《深入理解Spring Cloud与微服务构建》学习笔记(六)~SpringBoot 整合 Redis

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

猜你喜欢

转载自blog.csdn.net/ssdate/article/details/83305926