Redis 常用的数据类型包括:
1.String(字符串): key——value(String)
a.最基本的数据类型,可以存储文本、数字等。
b.用于缓存、计数器等场景。
String常见应用场景
2.Hash(哈希):(help @hash)

a.类似于一个键值对集合,适合存储对象。
b.用于存储用户信息等结构化数据。
应用场景:
1对象缓存
HSET user:1 name roy balance 1888
hget user:name ——roy
HMGET user:1 name balance —— roy 1888
3.List(列表):
a.有序的字符串列表,可以从两端推入或弹出元素。
b.用于消息队列、任务列表等。
常用数据结构
Stack(栈)=LPUSH +LPOP (栈:先进后出,后进先出)
Queue(队列)= LPUSH + RPOP (队列:先进先出,后进后出)
Blocking MQ(阻塞队列)=LPUSH+ BRPOP
常见应用场景
视频列表、签到列表
排队机(比如:吃饭排队)
简化版的MQ
4.Set(集合):

a.无序的字符串集合,支持集合运算(如交集、并集、差集)。
b.用于标签、唯一性检查等。
Set常用操作
SADD key member [member ... //往集合key中存入元素,元素存在则忽略若key不存在则新建
SREM key member [member ... ///1从集合key中删除元素
SMEMBERS key //获取集合key中所有元素
SCARD key ////获取集合key的元素个数
SISMEMBER key member //判断member元素是否存在于集合key中
SRANDMEMBER key [count //从集合key中选出count个元素,元素不从key中删除
SPOP key [count] //从集合key中选出count个元素,元素从key中删除
Set运算操作
SINTER key 「key ... //交集运算
SINTERSTORE destination key [key ..] //将交集结果存入新集合destination中
SUNION key 「key .. //并集运算
SUNIONSTORE destination key [key ... //将并集结果存入新集合destination中
SDlFF key 「key ... //差集运算
SDIFFSTORE destination key [key ... //将差集结果存入新集合destination中
Set应用场景
微信抽奖小程序
1)点击参与抽奖加入集合 SADD key fuserlD}
2)查看参与抽奖所有用户 SMEMBERS key
3)抽取count名中奖者 SRANDMEMBER key [count] (可以重复中奖)/ SPOP key [count](不能重复中奖)
• 微信微博点赞,收藏,标签
1) 点赞 (key为 消息:id,value 点赞数 )
SADD like:{消息ID} {用户ID}
2) 取消点赞
SREM like:{消息ID} {用户ID}
3) 检查用户是否点过赞
SISMEMBER like:{消息ID} {用户ID}
4) 获取点赞的用户列表
SMEMBERS like:{消息ID}
5) 获取点赞用户数
SCARD like:{消息ID}
• 集合操作
SINTER set1 set2 set3 { c } 共同关注的人
SUNION set1 set2 set3 { a,b,c,d,e } 朋友圈的人
SDIFF set1 set2 set3 { a } 推荐好友
5.Zset(有序集合):
Zset 的底层数据结构
Zset(有序集合)的底层实现是通过 跳表(Skip List) 和 哈希表(Hash Table) 的结合:
●跳表(Skip List):
○用于按分数排序元素,支持快速的范围查询和排序操作。
○跳表是一种平衡数据结构,能够在 O(log N) 时间复杂度内完成插入、删除和查找操作。
●哈希表:
○用于快速查找元素的分数。
○哈希表提供了 O(1) 的查找时间复杂度。
通过结合跳表和哈希表,Redis 的 Zset 能够高效地支持按分数排序的操作,同时也能快速查找和更新元素的分数。

a.类似于 Set,但每个元素关联一个分数,元素按分数排序。
b.用于排行榜、优先队列等。
ZSet有序列表类型
• ZSet常用操作
ZADD key score member [[score member]…] //往有序集合key中加入带分值元素
ZREM key member [member …] //从有序集合key中删除元素
ZSCORE key member //返回有序集合key中元素member的分值
ZINCRBY key increment member //为有序集合key中元素member的分值加上increment
ZCARD key //返回有序集合key中元素个数
ZRANGE key start stop [WITHSCORES] //正序获取有序集合key从start下标到stop下标的元素
ZREVRANGE key start stop [WITHSCORES] //倒序获取有序集合key从start下标到stop下标的元素
• Zset集合操作
ZUNIONSTORE destkey numkeys key [key ...] //并集计算
ZINTERSTORE destkey numkeys key [key …] //交集计算
ZSet应用场景
• Zset集合操作实现排行榜
1)点击新闻
ZINCRBY hotNews:20190819 1 守护香港
2)展示当日排行前十
ZREVRANGE hotNews:20190819 0 9 WITHSCORES
3)七日搜索榜单计算
ZUNIONSTORE hotNews:20190813-20190819 7
hotNews:20190813 hotNews:20190814... hotNews:20190819
4)展示七日排行前十
ZREVRANGE hotNews:20190813-20190819 0 9 WITHSCORES
6.Bitmap(位图):二进制

a.用于操作位数组,适合存储大量布尔值。
b.用于用户签到、状态标记等。
Bitmap常用操作
SETBIT key offset value //将一个二进制数组的offset位置设置成value。value只能是0或者1。
GETBIT key offset //返回一个二进制数组的offset位置的值。
BITCOUNT key [start end [BYTE|BIT]] //返回二进制数组中1的个数
BITPOS key bit [start [end [BYTE|BIT]]] //返回bitmap中第一个值为bit的offset位置。
BITOP AND|OR|XOR|NOT destkey key [key ...] //对两个bitmap做二进制的与或非计算。
• 每日签到
SETBIT dailycheck:1 100 1 1号用户第100天完成了签到
BITCOUNT dailycheck:1 统计1号用户的签到次数
BITPOS dailycheck:1 统计1号用户第一天签到的时间
• 优点
快速、高效、节省空间
7.HyperLogLog:
a.用于基数统计,适合估算独立元素的数量(用于统计一个集合中不重复的元素个数。)。
b.用于统计 UV(独立访客数,比如ip)等。
• Hyperloglog常用操作
PFADD visitlog 192.168.65.111 192.168.65.112 192.168.65.111 //添加用户访问记录
PFCOUNT visitlog //统计不同的独立访客
• Hyperloglog其他操作
PFMERGE destkey [sourcekey [sourcekey ...]] //将多个hyperloglong数据整合成一条
8.Geo(地理位置):
a.用于存储地理位置信息,支持地理位置计算。
b.用于位置服务、附近搜索等。
• 常用操作
GEOADD key [NX|XX] [CH] longitude latitude member [longitude latitude member ...] //添加一个或多个地点
GEOPOS key [member [member ...]] //返回地址的经纬度
GEODIST key member1 member2 [M|KM|FT|MI] //计算两个地点之间的距离
GEORADIUS key longitude latitude radius M|KM|FT|MI [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count
[ANY]] [ASC|DESC] [STORE key|STOREDIST key] //查询某个经纬度地址附近的地点
GEOSEARCH key FROMMEMBER member|FROMLONLAT longitude latitude BYRADIUS radius
M|KM|FT|MI|BYBOX width height M|KM|FT|MI [ASC|DESC] [COUNT count [ANY]] [WITHCOORD]
[WITHDIST] [WITHHASH] //查询某个地点附近的地点
Geo应用场景
获取经纬度
GEOADD changsha 113.017489 28.200454 火车站
112.96903 28.201195 橘子洲 113.017031 28.199706 赛格广
场 113.017004 28.197677 国储
• 查询距离
GEODIST changsha 火车站 橘子洲 M
• 查找火车站附近的景点
GEORADIUSBYMEMBER changsha 火车站 2 KM withdist
withcoord count 4 withhash
9stream类型
• 作用介绍:
Redis版的MQ -- 阻塞队列 + pub/sub
了解即可,企业应用比较少。
• 常用操作
XADD key [NOMKSTREAM] [MAXLEN|MINID [=|~] threshold [LIMIT count]] *|id field value [field value ...]
//往对列的末尾发布一条消息
XDEL key id [id ...] // 删除队列中的一条消息
XLEN key //获取队列的长度
XRANGE key start end [COUNT count] //查询队列中的消息
stream应用示例
• 创建队列,并添加消息 *表示让系统自动生成ID
XADD mystream * name loulan name roy name admin
• 查看对列消息 - 对列开始 + 对列结尾
XRANGE mystream - +
• 创建消费者组 0 从队列头部开始消费。 $ 从队列尾部开始消费
XGROUP CREATE mystream groupA 0
• 消费消息 > 表示从第一条未被消费过的消息消费。也可以指定ID
XREADGROUP GROUP groupA consumer1 count 2 STREAMS mystream >
• 查看消费者组的消费进度
XPENDING mystream groupA