抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

序列化

防止乱码:

// key序列化
redisTemplate.setKeySerializer(STRING_SERIALIZER);
// value序列化
redisTemplate.setValueSerializer(JACKSON__SERIALIZER);
// Hash key序列化
redisTemplate.setHashKeySerializer(STRING_SERIALIZER);
// Hash value序列化
redisTemplate.setHashValueSerializer(JACKSON__SERIALIZER);
redisTemplate.afterPropertiesSet();

String

  //插入字符串
  redisTemplate.opsForValue().set("String","String");

图示

https://img-blog.csdnimg.cn/20200623163957765.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2MzU3MjQy,size_16,color_FFFFFF,t_70

使用场景

String是最常用的数据类型,普通的key/value都可以归为此类,value其实不仅是String,也可以是数字。

比如想知道什么时候封锁一个IP地址(访问超过几次)。INCRBY命令让这些变得很容易,通过原子递增保持计数。

List

//插入集合
List<String> strings1 = new ArrayList<>();
strings1.add("LIST1");
strings1.add("LIST2");
strings1.add("LIST2");
for (String str:strings1){
    redisTemplate.opsForList().leftPush("list1",str);//左插入
    redisTemplate.opsForList().rightPush("list2",str);//右插入
}

图示(注意对比左右插入的区别)

https://img-blog.csdnimg.cn/20200623164202529.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2MzU3MjQy,size_16,color_FFFFFF,t_70

https://img-blog.csdnimg.cn/20200623164301795.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2MzU3MjQy,size_16,color_FFFFFF,t_70

使用场景

最新消息排行。

消息队列。利用Lists的push的操作,将任务存储在list中,然后工作线程再用pop操作将任务取出进行执行。

Set

//插入set集合
Set<String> set1 = new HashSet<>();
   set1.add("set1");
   set1.add("set2");
   set1.add("set3");
   set1.add("set3");
for (String str:set1){
    redisTemplate.opsForSet().add("set",str);
}

图示(注意对比代码和图示)
https://img-blog.csdnimg.cn/20200623164355888.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2MzU3MjQy,size_16,color_FFFFFF,t_70

使用场景

set类似list,特殊之处是set可以自动排重。

set还提供了某个成员是否在一个set内的接口,这个也是list没有的。

比如在微博应用中,每个人的好友存在一个集合(set)中,这样求两个人的共同好友的操作,可能就只需要用求交集命令即可。

Redis还为集合提供了求交集、并集、差集等操作。

Hash

//插入map
redisTemplate.opsForHash().put("hash","hashKey1","hashValue1");
redisTemplate.opsForHash().put("hash","hashKey2","hashValue2");

图示
https://img-blog.csdnimg.cn/2020062316462358.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2MzU3MjQy,size_16,color_FFFFFF,t_70

使用场景

1.购物车:hset [key] [field] [value] 命令, 可以实现以用户Id,商品Id为field,商品数量为value,恰好构成了购物车的3个要素。

2.存储对象:hash类型的(key, field, value)的结构与对象的(对象id, 属性, 值)的结构相似,也可以用来存储对象。

zset

​​​​​​​//插入zset
redisTemplate.opsForZSet().add("zset","hello", 1);
redisTemplate.opsForZSet().add("zset","hi", 2);
redisTemplate.opsForZSet().add("zset","nihao", 3);

使用场景

例如热门歌曲榜单列表,value值是歌曲ID,score是播放次数,这样就可以对歌曲列表按播放次数进行排序。

当然还有类似微博粉丝列表、评论列表等等,可以将value定义为用户ID、评论ID,score定义为关注时间、评论点赞次数等等。

图示
https://img-blog.csdnimg.cn/20200623164752893.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2MzU3MjQy,size_16,color_FFFFFF,t_70

redis学习思维导图

学习地址

评论