zoukankan      html  css  js  c++  java
  • 第九章:(6)Spring Boot 与 缓存 之 整合 Redis

    一、使用 Docker 快速安装 Redis

      1、安装 redis,使用 docker 方式

        使用 Docker 中国,镜像中国 加速下载 https://www.bbsmax.com/A/amd083yqdg/

      2、命令安装

    获取 Redis 镜像
    docker pull registry.docker-cn.com/library/redis
    
    启动 Redis 容器,并设置端口映射
    docker run -d -p 6379:6379 --name myredis imgId
    
    查看运行的 Docker 容器
    docker ps
    

      

    二、引入 redis 的 starter

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>

    三、配置 Redis 

      在 SpringBoot 的配置文件中配置 Redis 信息

    #redis 的配置信息
    spring.redis.host=192.168.8.119
    

      

    四、RedisAutoConfiguration

      当在项目中导入 redis 的相关依赖时,RedisAutoConfiguration 就会生效。

      RedisAutoConfiguration 会给我们导入两个用于操作 Redis 的类:

      

       其中:

        StringRedisTemplate stringRedisTemplate;  //操作k-v都是字符串的
    
        RedisTemplate redisTemplate;  //k-v 都是对象的
    

      

    五、使用 RedisTemplate 操作 Redis

      1、操作常用数据结构

        Redis 常见的五大数据类型

    String 字符串     redisTemplate.opsForValue(); //操作字符串
    list   列表       redisTemplate.opsForList();  //操作list
    Set    集合       redisTemplate.opsForSet();   //操作set
    Hash   散列       redisTemplate.opsForHash();  //操作hash
    ZSet   有序集合   redisTemplate.opsForZSet();  //操作有序set
    

        代码示例:

        @Test
        public void test01() {
            // redis 中保存数据
            //stringRedisTemplate.opsForValue().append("msg", "hello");
    
            // 读取数据
            String msg = stringRedisTemplate.opsForValue().get("msg");
            System.out.println("msg = " + msg);
    
            //操作列表
            stringRedisTemplate.opsForList().leftPush("myList", "1");
            stringRedisTemplate.opsForList().leftPush("myList", "2");
            stringRedisTemplate.opsForList().leftPush("myList", "3");
        }

      2、保存对象

        使用 Redis 保存自定义的 JavaBean 对象,JavaBean 需要实现序列化 Serializable 接口。

        示例:

        @Test
        public void test02() {
            Employee emp = employeeMapper.getEmpById(1);
            //默认如果保存对象,使用 jdk 序列化机制,序列化后的数据保存到 redis 中
            redisTemplate.opsForValue().set("emp-01", emp);
        }

        通过 Redis 的可视化工具看到的效果:

        

        默认使用的是 JDK 序列化机制来保存的。

        

          

        如果想把数据以 JSON 的方式保存,怎么办呢?

        (1)保存数据的时候,自己将对象转为 json 字符串

        (2)redisTemplate 有默认的序列化规则,可以自己定制序列化器

          配置自定义序列化器:

    @Configuration
    public class MyRedisConfig {
    
        @Bean
        public RedisTemplate<Object, Employee> empRedisTemplate(
                RedisConnectionFactory redisConnectionFactory)
                throws UnknownHostException {
    
            RedisTemplate<Object, Employee> template = new RedisTemplate<Object, Employee>();
            //设置默认的序列化器
            template.setDefaultSerializer(new Jackson2JsonRedisSerializer<Employee>(Employee.class));
            template.setConnectionFactory(redisConnectionFactory);
            return template;
        }
    }

          保存数据:

        @Autowired
        RedisTemplate<Object, Employee> empRedisTemplate;  //使用自定义的 redisTemplate
        
        @Test
        public void test02() {
            Employee emp = employeeMapper.getEmpById(1);
    
            //如果想保存 JSON 字符串
            //1. 将数据以 json 的方式保存,自己将对象转为 json 字符串
            //2. redisTemplate 有默认的序列化规则
            empRedisTemplate.opsForValue().set("emp-02", emp);
    
        }

         查看效果:

          

  • 相关阅读:
    回溯算法
    再谈排序与图论算法
    Hash表
    B树和TreeSet与TreeMap
    回顾二叉树
    Spring实战第一部分总结
    Lucene6.6添加索引数据时字符个数超限,字符数不能超过BYTE_BLOCK_SIZE=32766
    第一章 机器学习基本概念
    第十至十二章 算法分析--高阶数据结构
    Lucene4.6至 Lucene6.6的每个迭代对API的改动
  • 原文地址:https://www.cnblogs.com/niujifei/p/15731746.html
Copyright © 2011-2022 走看看