一、数据类型:
String、Hash、List、Set、zSet、HyperLogLog、Geo、Pub/Sub
二、应用场景:
1、String(字符串)
set、setnx、get、decr、incr、mget
缓存层(mysql 存储层,redis做缓存层)、计数器(比如视频播放数,博客浏览数等)、共享session、短信验证码每隔多少秒才可以再获取
2、Hash(hashMap)
hset、hget、hdel、hlen、hexists、hkeys、hvals、hgetall
存储用户信息
3、List(双向链表)
lpush、rpush、lpop、rpop、brpop、lrange、lindex、len、lrem
关注列表、粉丝列表
消息队列:
lpush + lpop = 栈
lpush + rpop = 队列
lpush + ltrim = 有限集合
lpush + brpop = 消息队列
还可以利用 list 的 lrange 实现简单的分页查询
4、Set
sadd、spop、sismember、srem、sunion、sdiff
集合元素不重复,支持集合内的增删改查、取交集、并集、差集、合集
(1)标签
用户兴趣标签tag,可以根据标签获取到拥有同一标签的人的其他喜好,比如看小说时的小说推荐,以及看视频时的视频推荐
(2)生成随机数(抽奖)
(3)社交需求
5、SortedSet
zadd、zcard、zscore、zrank、zrem、zincrby、zrange
集合元素不重复,而且可以排序,根据csore排序
(1)榜单
视频播放量榜单、获赞榜单等
注:redis key 的设计
使用冒号进行分段存储,层级分明,利于客户端进行数据分析
6、HyperLogLog
pfadd、pfcount
HyperLogLog占用的空间固定,12k左右,可以估算出大约2^64个元素的基数
统计一个页面的用户访问量
虽然也可以使用set做,但数据来那个上千万,将会是一个非常大的开销
7、geo
Geoadd:增加某个地理位置的坐标
Geopos:获取某个地理位置的坐标
Geodist:获取两个地理位置的距离
GEORADIUS:根据给定地理位置坐标获取指定范围内的地理位置集合
GEOHASH:获取某个地理位置的 geohash 值
比如美团外卖显示商家距离你多远距离,可以数据库中存储商家经纬度坐标,通过redis的geo计算得出距离
8、Pub/Sub
发布订阅,实际应用场景较少,但redis的哨兵机制,实际上其中就有用到 Pub/Sub。