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()方法:


 

转载于:https://www.cnblogs.com/MagicAsa/p/10785452.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值