Redis 的八种数据结构
String 字符串
1️⃣ 支持二进制(可存储图片或序列化对象),单个最大512MB。
2️⃣ 一个Key对应一个Value,并且Set之后会覆盖之前所存储的值。
基本语法 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
set key value
getrange key start end # 字符串值的子字符(单个字符)
exists key # 判断存在返回1,不存在则返回0
append key value # 追加到value到原值之后
strlen key # 查看字符串长度
incr key 10 # 自增1 incrby key 10 自增10
decr key # 自减1 decrby key 10 自减10
setrange key start vakue # 在Start位置替换为value
setnx key value #如果键存在,则不设置值
mset k1 v1 k2 v2 #设置多个键值
mget k1 k2 #获取多个值
msetnx k1 v1 k2 v2 #要么都成功设置,要么都失败
getset key value #如果已存在Key,先显示旧value再进行替换,如果没有则直接写入
mset a:1:name Scan # 效果如下图所示
键值过期 :
1
2
3
ttl key #查询过期时间 -1永不过期 -2已过期
expire key time #设置key的过期时间,前提是Key已存在
setex key time value #设置key的过期时间,可以同时设置键值
Hash对象
ℹ️ 是一个String类型的field和value的映射表,适合当对象
1
2
3
4
5
6
7
8
9
10
hset key field value # 设置单个属性
hmset key field value field value # 设置多个属性
hget hgetall #一个是查询单个 一个是查询所有
hdel key field #删除hash中指定的值
hlen key #获取长度
hexists key field #判断值是否存在
hvals #获取所有值 获取所有键
hkey #获取所有键
hincrby key field 值 #自增自减操作 填数字
hsetnx #存在则不添加
无序集合
ℹ️ 元素没有重复的,都是单个的
1
2
3
4
5
6
7
sadd key 元素 #可添加多个元素
scard key #查看元素长度(个数)
smembers key #查看元素
srem key member #移除指定元素(可多个)
srandmember key num #随机抽取num个元素,不填写个数默认抽取一个并且不显示序号
spop key #删除随机元素
smove key newkey value #启动value到newkey
1
2
3
4
#交集 并集 差集
sdiff k1 k2 # 求差集: k1有的元素、k2中却没有的元素
sinter k1 k2 # 求交集: k1,k2都有的元素
sunion k1 k2 k3# 求并集( 包括重复的) : k1 k2 k3 合起来的元素
有序集合
1
2
3
4
5
6
7
8
zadd key score value #添加值、score值
zrange key #查询值
zrangebyscore key -inf +inf #根据value的score值从小到大排列
zrevrabge key #根据value的score值从大到小排列
zrangebyscore key -inf +inf withscores #查询所有的值包括key
zcard key #查询集合里的元素个数
zrem key 元素# 移除指定元素、可多个
zcount key min max #如果在min 或者 max 前添加 ( 则为闭区间
同一个元素可以有多个分数,每个分数对应一个不同的排序位置
列表
1
2
3
4
5
6
7
8
9
10
11
12
lpush key value #左插入数据(可以多个)
rpush key value #右插入数据(可以多个)
lpop #从最左边移除数据
rpop #从最右边移除数据
lrange key start end #end为-1时 查所有
lindex key 0 #查询指定下标元素
llen key #获取指定列表的元素长度
lrem key 数量 value #当数量为0时,删除所有value
ltrim key start end #截取元素,下标从0开始
rpoplpush key newkey #移除key的最后一个元素,到newkey里
lset key 下标值 newvalue #更新/替换 下标所在的元素 为 newvalue
linsert key after/before value newvalue # 在key的value之前或者之后 添加newvalue
地理位置
ℹ️ 有效的经度 从-180度到180度,有效的纬度 从-85.05112878度到85.05112878度
ℹ️ 本质上是有序 集合数据类型,官方做了二次包装
1
2
3
4
5
6
7
8
9
10
geoadd 索引值 经度 纬度 地点 #geoadd city 经度 维度 "漂亮国"
geopos city Beijing Shanghai #查看指定城市的经纬度信息,支持多个
geodis city Beijing Shanghai ( 可加单位 默认单位米) # 计算两点距离
georadius city 经度 纬度 距离 ( 可加单位 默认单位米) # 查询指定坐标范围的城市
可加参数:1.withcoord # 返回范围内城市的元素坐标
2.withdist #返回与中心店的距离
3.count #限制返回多少个城市数量
georadiusbymember city 地点 距离 ( 可加单位 默认单位米) #查询指定城市地点的范围地点城市
位图(Bitmap)
ℹ️ 只有 0 和 1 两 个 状 态
1
2
3
setbit key offset 0/1 #设置值为0或1
getbit key offset #查询offset是否为1
bitcount key #默认查询多少个是1
在上下学、在线状态的场景下实用。
基数(数据集)
ℹ️ 占用的内存是固定的,2^64个元素,相当于只需要12kb的内存即可。效率极高!
1
2
3
pfadd key element #添加数据集
pfcount key #统计数据集的元素个数
pfmegre k1 k2 #合并并且去重