String、Hash、Set、List、Zset、Hyperloglog、Geo、Streams
一、String
最基本也是最常用的数据类型就是String。get和set命令就是String的操作命令,Redis的字符串被叫做二进制安全的字符串(Binary-safe strings)。
String可以存储三种类型,INT(整数)、float(单精度浮点数)、string(字符串)。
# 基于此实现分布式锁
设置值,如果key存在,则不成功 setnx jack shuaige
# (整数)值递增(值不存在会得到1)
incr jack incrby jack 100
二、Hash
用来存储多个无序的键值对,最大存储数量2^32-1(40亿左右)。
优点:
把所有相关的值聚集到一个Key中,节省内存空间
只使用一个Key,减少Key冲突
当需要批量获取值的时候,只需要使用一个命令,减少内存/IO/CPU的消耗
缺点:
Field不能单独设置过期时间
需要考虑数据量分布的问题(field非常多的时候,无法分布到多个节点)
# 设置、批量设置值
hset h1 f 6 hset h1 e 5
hmset h1 a 1 b 2 c 3 d 4
# 取值 hget h1 a
# 批量取值 hmget h1 a b c d
# 获取所有field hkeys h1
# 获取所有field的值 hvals h1
# 返回哈希表中,所有的字段和值 hgetall h1
# 删除field hdel h1 a
# 获取哈希表中字段的数量 hlen h1
三、List
介绍
存储有序的字符串(从左到右),元素可以重复,最大存储数量2^32-1(40亿左右)。
下面通过画图来演示一下入队列,出队列
操作命令
# 左推 lpush queue a lpush queue b c
# 右推 rpush queue d e
# 左边移除并返回列表的第一个元素 lpop queue
# 右边移除并返回列表的第一个元素 rpop queue
# 通过索引获取列表中的元素 lindex queue 0
# 返回列表中指定区间内的元素 lrange queue 0 -1
四、Set
介绍
Set 存储 String 类型的无序集合,最大存储数量 2^32-1(40亿左右)。
操作命令
# 添加一个或多个元素 sadd myset a b c d e f g
# 获取所有元素 smembers myset
# 统计元素个数 scard myset
# 随机获取一个元素 srandmember myset
# 随机弹出一个元素 spop myset
# 移除一个或者多个元素 srem myset d e f
# 查看元素是否存在 sismember myset a
# 获取差集 sdiff set1 set2
# 获取交集 sinter set1 set2
# 获取并集 sunion set1 set2
应用场景
1、抽奖
随机获取元素:spop myset
1、 点赞、签到、打卡
我们以微博举例子,假设这条微博的ID是t1001,用户ID是u6001,
用dianzan:t1001来维护t1001这条微博的所有点赞用户。
点赞了这条微博:sadd dianzan:t1001 u6001
取消点赞:srem dianzan:t1001 u6001
是否点赞:sismember dianzan:t1001 u6001
点赞的所有用户:smembers dianzan:t1001
点赞数:scard dianzan:t1001
3、商品标签
用 tags:i8001 来维护商品所有的标签。
sadd tags:i8001 画面清晰细腻
sadd tags:i8001 真彩清晰显示屏
sadd tags:i8001 流畅至极
4、商品筛选
华为P40上线了,支持民族品牌,加到各个标签中去。
sadd brand:huawei p40
sadd os:android p40
sadd screensize:6.0-6.24 p40
买的时候筛选,牌子是华为,操作系统是安卓,屏幕大小在6.0-6.24之间的,取交集:
sinter brand:huawei os:android screensize:6.0-6.24