一.在windows安装redis
redis-server.exe:服务端程序,提供redis服务
redis-cli.exe: 客户端程序,通过它连接redis服务并进行操作
redis-check-dump.exe:本地数据库检查
redis-check-aof.exe:更新日志检查
redis-benchmark.exe:性能测试,用以模拟同时由N个客户端发送M个 SETs/GETs 查询 (类似于 Apache 的ab 工具).
redis.windows.conf: 配置文件,将redis作为普通软件使用的配置,命令行关闭则redis关闭
redis.windows-service.conf:配置文件,将redis作为系统服务的配置,用以区别开两种不同的使用方式
redis-server.exe redis.windows.conf
![Spring Boot 2.x整合redis Spring Boot 2.x整合redis](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzcxOC9lMzY2ZTYzNDg5ZTliYTI1ZTg3ZGVjYjk3NWYzOGVhZS5wbmc=)
redis-server --service-install redis.windows.conf
![Spring Boot 2.x整合redis Spring Boot 2.x整合redis](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzgwMi9iOTc2YTJiMGZlNjBhMWM4ZWIyNzRkZjA4YzhkZWNmMi5wbmc=)
- 这时候先关闭打开的第一个cmd窗口,然后执行以下命令启动再次redis
redis-server --service-start
//停止redis服务 redis-server --service-stop
- 最后,测试一下redis是否能够正常使用,切换到redis目录下
redis-cli.exe -h 127.0.0.1 -p 6379
![Spring Boot 2.x整合redis Spring Boot 2.x整合redis](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzI2NS8yNTZkNjJkNTY2MDczOGEwMzVlZjgzYTcwMzIwOGVmMS5wbmc=)
- 至此redis安装完成
- 可以下载redis可视化工具,下载地址
二.Spring Boot2.x整合redis
1.添加依赖
![Spring Boot 2.x整合redis Spring Boot 2.x整合redis](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzkyMS8wYTliNmE3NzU0NzU5N2JmZmRhZmQ5ZmYxOTE2OGMyOS5wbmc=)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>it.playmaker</groupId>
<artifactId>SpringBoot-redis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<!-- 注意:1.5版本的依赖和2.0的依赖不一样,注意看哦 1.5我记得名字里面应该没有“data”, 2.0必须是“spring-boot-starter-data-redis” 这个才行-->
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--spring2.0集成redis所需common-pool2-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.4.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
![Spring Boot 2.x整合redis Spring Boot 2.x整合redis](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzMyMS82YzZkNTA2NGEwY2EzNWJkNzk4MmFjMGM1ZjQwMzhlMS5wbmc=)
- RedisCacheManager类初始化不再能以RedisTemplate为参数进行初始化,取而代之,给出了另一种初始化RedisCacheManager的方法
- RedisCacheManager在新版本中移除了该方法,所以不能再使用,若要使用则需要将spring-data-redis版本降低,1.6.0.RELEASE此方法是可用的,但是不推荐此方法,除非整体降低springboot的版本
- 2.x以上的新的方法
2.redisTemplate和StringRedisTemplate
@SpringBootTest
@RunWith(SpringRunner.class)
public class RedisTest {
@Autowired
private RedisTemplate redisTemplate;
@Test
public void set() {
redisTemplate.opsForValue().set("name","123");
System.out.println(redisTemplate.opsForValue().get("name"));
}
}
- 我们在使用redisTemplate存入数据往往会出现乱码的情况
- 解决的方法有两种
(1).为redistemplates手动设置StringSerializer
private RedisTemplate redisTemplate;
@Autowired(required = false)
public void setRedisTemplate(RedisTemplate redisTemplate) {
RedisSerializer stringSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringSerializer);
redisTemplate.setValueSerializer(stringSerializer);
redisTemplate.setHashKeySerializer(stringSerializer);
redisTemplate.setHashValueSerializer(stringSerializer);
this.redisTemplate = redisTemplate;
}
(2).用StringRedisTemplate代替RedisTemplate
![Spring Boot 2.x整合redis Spring Boot 2.x整合redis](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzUwMi9mMzRlNTU5NTgyNGU0NTE1ZjkxMDkxYTQxODA4MzEwZS5wbmc=)
- 内部实现与第一种一样的
- StringRedisTemplate是RedisTemplate的子类
3.Spring boot 用redis实现缓存
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_name` varchar(100) DEFAULT NULL COMMENT '用户名',
`password` varchar(100) DEFAULT NULL COMMENT '密码',
`name` varchar(100) DEFAULT NULL COMMENT '姓名',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
INSERT INTO `user` VALUES ('1', 'zhangsan', '123456', '张三');
INSERT INTO `user` VALUES ('2', 'lisi', '123456', '李四');
INSERT INTO `user` VALUES ('3', 'wangwu', '123456', '王五');
INSERT INTO `user` VALUES ('4', 'zhangwei', '123456', '张伟');
INSERT INTO `user` VALUES ('5', 'lina', '123456', '李娜');
INSERT INTO `user` VALUES ('6', 'lilei', '123456', '李磊');
(1).创建项目导入依赖
(2).加入Spring-Boot配置文件
#DB Configuration:
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxx?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=xxxx
#JPA Configuration:
spring.jpa.database=mysql
spring.jpa.show-sql=true
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy
(3).创建实体类并实现序列化
@Entity
@Table(name="s_user")//对应表
public class User implements Serializable{
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)//自增长
private Long id;
@Column(name="user_name")//在windows系统下mysql不区分大小写。在Linux系统下,区分大小写
private String user_name;
@Column(name="password")
private String password;
@Column(name="name")
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUser_name() {
return user_name;
}
public void setUser_name(String user_name) {
this.user_name = user_name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User [id=" + id + ", user_name=" + user_name + ", password=" + password + ", name=" + name + "]";
}
}
(4).编写Mapper类
/*
* 使用mybatis实现对数据库的操作接口
*/
@Mapper //要求mybatis的版本3.3以上 声明Mapper接口
public interface IUserMapper {
@Select("select * from s_user")
public List<User> findAll();
}
(5).用户业务逻辑
/*
* 用户业务层接口
*/
public interface IUserService {
//查找所有用户
List<User> findAll();
}
(6).用户业务逻辑实现类
@Service("userService")
public class UserServiceImpl implements IUserService{
@Autowired
private IUserMapper userMapper;
@Override
public List<User> findAll() {
System.out.println("取数据库取数据...");
return userMapper.findAll();
}
}
(7).创建Controller
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private IUserService userService;
@RequestMapping("/findAll")
public List<User> findAll(){
List<User> users = userService.findAll();
return users;
}
}
(8).创建引导类(省略)
- 运行引导类,打开浏览器输入地址
http://localhost:8080/user/findAll
- 每次访问同一个url
- 控制台都要打印
- 显然自带并没有缓存
(9).实现缓存
@EnableCaching
@Cacheable(value=”findAllCache”,key=”’user.findAll’”) //当前方法使用缓存 并存入redis数据库中
//value属性:表示存入redis数据库的key
//key属性:用于指定方法执行返回值的key,该属性是spring用的。不写也有默认值(支持spring EL表达式)
- 此时我们再次运行引导类,打开浏览器输入地址
http://localhost:8080/user/findAll
,多次测试
- 控制台只打印了一次
- 并且,我们打开redis可视化工具
![Spring Boot 2.x整合redis Spring Boot 2.x整合redis](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzU5My81ZmFmNTUzNGQyNzMxNjI1MDFmZDk4ODU3OTNlZTBjOS5wbmc=)