1.String类型及其利用

2.hash类型及其利用

3.list类型及其利用

4.set类型及其利用

5.Zset类型及其利用

6.总结

1.String类型及其利用
String类型是咱们最罕用的类型,有些人甚至只会用这一种类型。

//最罕用的api//单个值操作set key valueget key//同时设置/获取多个键值MSET key value [key value ....]MGET key [key ....]//数值增减//递增数字INCR key//减少指定的数字INCRBY key increment//递加数字DECR key//缩小指定的整数DECRBY key decrement//获取字符串长度STRLEN key//分布式锁set key value [EX seconds] [PX milliseconds] [NX|XX]

应用场景:
1)保留个别的json对象,能够用这个类型(比方从表里查出来的User信息)。
2)比方保留浏览量,点赞数等等,能够应用自增的性能(不必思考线程安全性)。
3)分布式锁,就是一个有工夫限度的key和value值,能够保障程序执行的串行化,是一种跨JVM的锁,后续会有文章进行零碎介绍。
4)token等信息。

2.hash类型及其利用
hash类型转化成咱们的JAVA数据结构,能够用Map<String,Map<Object,Object>>来形容。就是一个key,它的value是由多个key和value组成

//最罕用的api

//一次设置一个字段值HSET key field value//一次获取一个字段值HGET key field//一次设置多个字段值HMSET key field value [field value ...]//一次获取多个字段值HMGET key field [field ....]//获取字段所有值hgetall key//获取某个key内的全副数量hlen//删除hdel

假如咱们当初要保留一个用户信息,最后咱们能够用json的模式来保留:

然而这样做之后咱们发现,可能咱们只须要用到用户的一个或者两个字段的数据,然而这样却每次都要对用户的所有信息进行序列/反序列化,减少了服务器的开销,有没有一个方法咱们可能能够准确取出某一个咱们须要的属性呢?这个时候就能够用hash:


这样咱们就能够准确取得用户信息的字段值了。

3.list类型及其利用
list在java中咱们肯定罕用,然而在redis中,list是一个双端链表的构造,容量是2的32次方减1个元素,大略40多亿,次要性能有push/pop等。
罕用api:

//向列表右边增加元素LPUSH key value [value ...]//向列表左边增加元素RPUSH key value [value ....]//查看列表LRANGE key start stop//获取列表中元素的个数LLEN key

利用场景:
1)微信公众号订阅的音讯

只有我关注的作者公布了新文章,就会播送到我的list外面,查看的文章的时候,一次显示10条,相似于分页:
lrange likearticle:UserId 0 9

不过数据个别不会保留太远古的数据,可能就保留两千条左右,再长远的数据就要去数据库里查问。

2)商品评论列表
针对一些商品公布的评论,能够放在一个list外面,而后工夫按降序排列。

lpush items:comment:1001 {"id":1001,"name":"huawei","date":1600484283054,"content":"lasjfdljsa;fdlkajsd;lfjsa;ljf;lasjf;lasjfdlsad"}

3)保留分页信息
因为lrange命令就像limit一样,所以用这个命令,能够反对分页查问,先把数据筹备好放入缓存中,再进行分页。

4)各种交易记录的下拉列表(近期数据)
这个原理也和第一条一样,重点就是个别redis只保留几千条,比方近一年的信息,再往前查就要去数据库外面查了。

4.set类型及其利用
set类型为哈希表实现,特点是元素不反复,同时对两个set也能够取交并差汇合等等。

//罕用api

//增加元素SADD key member [member ...]//删除元素SREM key member [member ...]//遍历汇合中的所有元素SMEMBERS key//判断元素是否在汇合中SISMEMBER key member//获取汇合中的元素总数SCARD key//从汇合中随机弹出一个元素,元素不删除SRANDMEMBER key [数字]//从汇合中随机弹出一个元素,出一个删一个SPOP key [数字]//汇合运算//汇合的差集运算 A-B 属于A但不属于B的元素形成的汇合SDIFF key [key ...]//汇合的交加运算 A∩B  属于A同时也属于B的独特领有的元素形成的汇合SINTER key [key ...]//汇合的并集运算 A ∪ B 属于A或者属于B的元素合并后的汇合SUNION key [key ...]

应用场景:
1)抽奖场景
应用从汇合中随机弹出元素的命令,能够用于抽奖,也可用数据库中的Order By RAND()。

2)微信敌人圈点赞
家喻户晓,微信敌人圈点赞只会呈现独特的好友,所以此时就能够用取交加的办法来获取共同点赞的敌人。

3)QQ可能意识的人
能够用汇合的差集运算,来举荐。

5.Zset类型及其利用
这是一个带分数的有汇合,咱们把zset和set比照着看,就会发现:
Zset与Set的区别在于每一个元素都有一个Score属性,并且存储时会将元素依照Score从低到高排列。这个score能够是工夫等值。
//罕用api

//增加元素ZADD key score member [score member ...]//依照元素分数从小到大的程序//返回索引从start到stop之间的所有元素ZRANGE key start stop [WITHSCORES]//获取元素的分数ZSCORE key member//删除元素ZREM key member [member ...]//获取指定分数范畴的元素ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]//减少某个元素的分数ZINCRBY key increment member// 获取汇合中元素的数量ZCARD key//取得指定分数范畴内的元素个数ZCOUNT key min max//依照排名范畴删除元素ZREMRANGEBYRANK key start stop//获取元素的排名 从小到大ZRANK key member//获取元素的排名 从大到小ZREVRANK key member

应用场景:
1)商品评论列表。
咱们在后面应用了list作为商品评论列表,其实在数据量比拟大的状况下,会有bug,如果数据减少地够快:
当你翻第一页的时候,数据是第一页(失常)
当你翻第二页的时候,第一页的内容曾经被顶到了第二页,数据就还是第一页(异样)
然而当咱们应用zset,因为zset有个score字段,咱们把这个字段设置为数据的创立工夫,能够依据上次查出来的列表的最初一条工夫,来进行搜寻,这样,之前数据反复的问题就不会产生了。
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
2)依据商品销售对商品进行排序显示
因为自带排序功能,所以对于排名显示,这个类型十分好用。

6.总结

类型介绍应用场景
String根底和罕用类型能够存储任何数据
Hash键值对汇合能够对某个对象的一个属性进行操作
List双向链表能够存储分页数据
Set不反复的元素汇合能够存储不反复的元素,能够取交并差汇合
Sorted Set不反复的可排序元素汇合能够存储不反复的元素,且对齐进行有序的排序