Redis是一个开源的、先进的 key-value 存储系统,可用于构建高性能的存储系统。 Redis 支持数据结构有字符串、哈希、列表、集合、排序集合、位图、超文本等。 NoSQL (Not Only SQL 泛指非关系型的数据库。 Redis 是一种NoSQL, Redis 具有很多的优点,例如读写非常 快速,支持丰富的数据类型,所有的操作都是原子的。
一、安装
(1) 、Mac 下安装(mac下没有试过,有条件的可以试试)
通过 brew 命令安装,安装后启动 Redis 服务器和客户端,命令如下:
安装 brew install redis
启动服务器 redis-server
启动客户端 redis-cli
(2)、Windows 下安装
Redis 官方没有提供 Windows 版本,不过微软维护了 个版本,下载地址为 https://github.com/MicrosoftArchive/redis/releases,下载zip版本,解压到 C:\redis 。
在命令控制台定位到 c:\redis 目录下,输入命令: redis-server.exe redis.windows.conf 启动redis,启动成功则如下:
二、Spring Boot 中使用Redis
在工程的pom.xml文件中加入Redis依赖spring-boot-starter-data-redis,如:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
在工程的配置文件 application.yml中加入 Redis 的数据源配置,例如 host,port,数据库配置信息等。如果 Redis 置了密码,是要提供密码,选择数据库,配置 Pool 的相 关配置。配置代码如下:
spring:
redis:
host: localhost # Redis服务器地址
port: 6379 # Redis服务器连接端口
password: # Redis服务器连接密码(默认为空)
database: 0 # Redis数据库索引(默认为0)
timeout: 5000 # 连接超时时间(毫秒)
jedis:
pool:
max-active: 8 # 连接池最大连接数(使用负值表示没有限制)
max-idle: 500 # 连接池中的最大空闲连接
max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
min-idle: 0 # 连接池中的最小空闲连接
数据操作层的 RedisDao 类通过@Repository 注解来注入 Spring IoC 容器中 该类是通过 RedisTemplate 来访问 Redis的 。通过注入 StringRedisTemplate 的Bean 来对 Redis 数据库中的 字符串类型的数据进行操作, 写了两个方 ,包括向 Redis 中设 设String 类型的数据和从 Redis 读取 String 类型的数据,如:
@Repository
public class RedisDao {
@Autowired
private StringRedisTemplate stringRedisTemplate ;
/****
* 从数据库中查询数据列表,将每一条数据缓存redis
* @param userList
*/
public void setKey(List<JpaUser> userList){
ValueOperations<String,String> opt = stringRedisTemplate.opsForValue();
for(JpaUser u : userList){
opt.set(u.getUsername(),u.getPassword(),1000, TimeUnit.MINUTES); //1分钟过期
}
}
public String getKey(String k ){
ValueOperations<String,String> opt = stringRedisTemplate.opsForValue();
return opt.get(k);
}
}
新建一个Controller进行测试,从数据库读取数据,并写入redis,直接读取某一个键的值,如:
(接上一篇创建的数据库,手动在数据库插入如下值)
@GetMapping("/reddis")
public String redis(){
List<JpaUser> list = jpaUserService.getList();
StringBuffer sb = new StringBuffer();
sb.append("*****************打印数据库查询的数据***********<br>");
for(JpaUser j : list){
sb.append("user>>>"+ j.getUsername()+"<br>");
sb.append("pass>>>"+j.getPassword()+"<br>");
sb.append("id>>>>>"+j.getId()+"<br>");
}
sb.append("*************将数据进行缓存***************<br>");
redisDao.setKey(list);
sb.append("*************查询redis某一个键值对***************<br>");
sb.append("缓存444>>"+redisDao.getKey("444"));
return sb.toString() ;
}
启动应用,在浏览器输入:http://localhost:8080/user/reddis 结果如下:
大功告成!
说明数据已经被写入redis。
三、缓存管理
从数据库里删除最后一条数据,如下:
直接刷新页面,会看到,数据库查询最后一条数据已经没有了,但是缓存里还能获取到,说明我们的缓存机制已经OK。
(按理说过1分钟后缓存失效,则不应该查询到缓存数据,但是这里测试过依然存在,这里还不太明白,后续搞明白了在更新)
下载:redis.desktop.manager.exe 如: https://download.csdn.net/download/ssdate/11003294
安装桌面工具,并且链接redis服务,会看到如下:
前面写入的缓存依然在,删除444缓存,刷新页面如下:
OK,可以看到缓存已经消失了,至此redis基本搞明白了。
代码示例: https://download.csdn.net/download/ssdate/11003285
也可以移步至:https://gitee.com/ssdate/spring-test/tree/master/study_0306_jpa