zoukankan      html  css  js  c++  java
  • redis缓存中间件基础

    前序:

    默认使用SimpleCacheConfiguration 组件
    ConcurrentMapCacheManager==ConcurrentMapCache
    将数据保存在ConcurrentMap<Object,Object> 中

    开发中使用缓存中间件:
    redis , memcache ,ehcache

    安装redis流程:

    1.安装redis ,使用docker
    docker命令:

       docker pull redis

    
    

       docker images

    
    

       docker run -d -p 6379:6379 --name myredis docker.io/redis

    
    
    
    2.引入redis的starter
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    
    3.配置redis
    spring.redis.host=192.168.0.133

    配置完成后Redis客户端console测试:

    String测试:
    append msg hello
    插入key为msg,value为hello
    append msg world
    msg的值变为 helloworld
    get msg
    获得msg的值


    list测试: lpush mylist
    1 2 3 4 5 从左边往里面插入 那么值就是 5 4 3 2 1 lpop mylist 弹出左边的5 值为 4 3 2 1 rpop mylist 弹出右边的1 值为 4 3 2 set测试: sadd myset zhangsan lisi 增加一个set集合(无序)不可重复 sadd myset lisi 返回0 因为已经存在 smembers myset 查看myset 集合里面的值 sismember myset wangwu 判断myset集合里面是否存在wangwu 元素 如果有返回1 没有返回0

    代码测试:

    @Autowired
        RedisTemplate  redisTemplate;  //操作k-v都是对象的
    
        @Autowired
        StringRedisTemplate stringRedisTemplate;//操作字符串用
    
    
        @Autowired
        RedisTemplate<Object,Employee> empRedisTemplate;
        /*
        * String,List(列表),Set(集合),Hash(散列),ZSet(有序集合)
        * stringRedisTemplate.opsForValue()   【操作string字符串的】
        * stringRedisTemplate.opsForList()
        * stringRedisTemplate.opsForSet()
        * stringRedisTemplate.opsForHash()
        * stringRedisTemplate.opsForZSet()
        */
        @Test
        public void redisTest01(){
            //给redis中添加数据
           //stringRedisTemplate.opsForValue().append("msg","hello");
    //        String ss= stringRedisTemplate.opsForValue().get("msg");
    //        System.out.println(ss);
    
            stringRedisTemplate.opsForList().leftPush("mylist","1");
            stringRedisTemplate.opsForList().leftPush("mylist","2");
            stringRedisTemplate.opsForList().leftPush("mylist","3");
        }
    
        //保存对象测试
        @Test
        public void redisTest02(){
          Employee emp =  employeeMapper.getEmpById(1);
          //默认如果保存对象使用gdk,使用jdk序列化机制,序列化后的数据保存到redis中
            //redisTemplate.opsForValue().set("emp",emp);
          //解决方法:
            // 1.把对象转为json
            // 2.根据redisTemplate默认得序列话规则为gdk,重新配置新的RedisTemplate改变其序列化规则
            empRedisTemplate.opsForValue().set("emp-1",emp);
    
        }
    
    
        @Autowired
        EmployeeMapper employeeMapper;
        @Test
        public void contextLoads() {
            Employee emp = employeeMapper.getEmpById(1);
            System.out.println(emp.toString());
        }
    插入redis值乱码,重新配置新的RedisTemplate改变其序列化规则方法:
    思路:
    1.redis starter 引入后 ,在RedisAutoConfiguration类中有两个加入容器的方法

    2.类实现序列化
    public class Employee implements Serializable

    3.按照其格式,重写RedisTemplate方法,并且加入容器中。
    
    
    @Configuration
    public class MyRedisConfig {
        
        @Bean
        public RedisTemplate<Object, Employee> empRedisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
            RedisTemplate<Object, Employee> template = new RedisTemplate();
            template.setConnectionFactory(redisConnectionFactory);
            Jackson2JsonRedisSerializer<Employee> ser = new Jackson2JsonRedisSerializer<Employee>(Employee.class);
            template.setDefaultSerializer(ser);
            return template;
        }
    }
    setDefaultSerializer()方法:


  • 相关阅读:
    承载进程 (vshost.exe)
    命令行生成解决方案
    【SQL Server】存储过程的设计概念(3)TSQL的编译和执行过程
    .NET Framework 4
    reflector最新说明
    应用程序域
    vi 编辑器的用法(2013最新整理)
    linux中查看日志的方法
    修改linux主机名的方法介绍
    如何获得桌面上任意一个位置的颜色的 rgb 或者16进制值了
  • 原文地址:https://www.cnblogs.com/MagicAsa/p/10785452.html
Copyright © 2011-2022 走看看