Redis五种数据结构演示

文章目录

String


setex key 过期时间(单位秒) 值
例如上图
setex c 100 c
设置key为c的值为c , 过期时间为100s

psetex key 过期时间(单位毫秒) 值
psetex d 10000 d
10000毫秒为10s

ttl为查询还有多久时间过期, 单位为秒

获取字符串的范围getrange

getset 重要!!!
设置值的时候, 能获取旧的值.
例如下面设置key为a的值为aa . 获得了旧的值为a

mset mget 一次性设置和获取多个key

setnx 是有这个key的话,无法设置成功, 无这个key , 才会返回1, 代表设置成功了. 可用于分布式锁.

strlen 字符串长度

msetnx 具有原子性 , 即批量设置一些key value ,要么全部成功(返回1 ) , 要么全部失败(返回0 ).
如下图, 一开始设置q q w w , 设置成功了.

再次设置q q uuu uuu , 返回0 ,失败了.
因为上面的操作已经有key为q的了. 同时也获取不到uuu的值.
在这里插入图片描述
数字累加操作与自定义步长
例如如下, 定义了一个key 为 score 值为10的键值对.
使用incr score (key) 每次可以加一
使用incrby key 增加的多少
即可以指定步长是多少 ,例如下图是指定了100的步长

减少可以使用decr 来进行减少的操作 .
默认使用decr是减一
decrby key value
是指定某个key减去多少的值.

字符串追加命令: append 把某个字符串追加到指定key的后面.
如下图, 把mysql这个字符串进行追加
在这里插入图片描述
set key value [EX seconds| PX milliseconds] [NX| XX]
可以用于分布式锁. 解决了setnx语句无法设置过期时间的问题

具体可看此篇文章
https://javaweixin6.blog.csdn.net/article/details/108693123

hash

hash这种结构, 可以设置一个大key和一个小key
如下图, 可以设置大key为map , 小key为name , 值为jim
keys * 可以看到key只有map一个
type key 可以看到类型为map.
hexists 判断是否有这个值.
hget 大key 小key 来获取值.

  • hgetall 是获取所有的键值对
    如下 获得了大key为map的所有的键值对.
    name 为小key jim为值
    age 为小key 20为值

  • hkeys 获取所有的小key
    例如获得了name age

  • hvals map(key) 是获取所有的值

    hlen map 获取所有的小key的数量
    hmget 批量获取值
    hmset 批量设置值

    删除key的操作

    hsetnx 只有当hash中的key如果存在设置失败, 如果不存在 , 设置成功.

list

list集合特点是取出的数据与存入的数据相反.
切换存储空间

使用lpush往list中放值 1 2 3 4 5 6 7 8 9 10
llen 为获取list中元素的个数.
lrange list 0 2 获取list中位置为0 到2 的元素, 可以看到得到的是 10 9 8 .
与放入的顺序相反, 说明存储元素的时候, 是放入list的头部的 .
在这里插入图片描述
设置第 0个元素的值为100
lset list 0 100 可以看到执行之后, 第0个元素的值为100 .

lindex 获取指定索引的元素的值, 例如index为0 获取第一个元素, index为9 获取最后一个元素.

lpop 移除list中第一个元素
rpop 移除list中最后一个元素

set

set为无序的集合, 并且去重. set是通过hash实现的, 添加删除查找的时间复杂度都是O(1)

sadd set a b c d 给set中添加元素 a b c d
再次执行sadd set a 可以看到返回为0 , 即重复的值无法添加进去.
scard set 获取set中的元素的 个数.
rename set 给set集合重命名.

sdiff set集合1 set集合2
求集合1 相较于集合2 的差集 . 集合1 和集合2 共有 a b
例如如下图, 集合1 相较于集合2 的差集为 a b
集合2 相较于集合1 的差集为 e f

求交集 sinter
求并集 sunion

返回集合中 指定个数的随机元素
srandmember set1 3 例如返回set1集合中, 随机三个元素

判断是否为set集合中的成员元素
sismember set1 a 判断a 是否为set1集合中的元素, 返回1 代表是.
sismember set1 vvv vvv不是set1集合中的元素, 返回了0 .

移除指定成员
srem set1 a b 例如移除了set集合中元素名称为 a b 两个元素 .

spop set2 移除随机一个元素并将其返回.
例如下图移除了set2 中的e ,并将其返回了.

可以用的场景: 使用脚本把不 重复的流水号放入set集合中, 业务代码中从此set集合中获取, 并且用spop获取一个流水号, 而且还将其移除了, 这样就保证了流水号的唯一性.

sortedset

有序的set集合 . 通过分数来进行排序, sortedset也是通过hash实现的, 添加删除查找的时间复杂度都是O(1)
类似Java中的LinkedHashSet
sortedset 演示如下
添加元素用的是 zadd sortedset1 100 a 300 b 200 c
求元素的个数 : zcard sortedset
获取sortedset集合中元素的分数 : zscore sortedset a

zcount : 返回sortedset 集合中, 指定分数范围的集合的元素.
例如如下, 分别范围分数范围为0 到220 和 0 到 300 的 集合的元素.
该范围为一个闭区间, 即 包含给定的范围的值.

zrank 可以看到是返回指定元素的索引, 并且是根据添加时的分数排序来指定其索引位置的. 分数越小的, 排在越前面.

zincrby sortedset 1000 a 给元素a的分数加1000分 , 可以看到返回了a最新的分数为1100分, 并且a的排序的索引 ,也到了最后一个第三个 (从0开始)

成员的元素是不能重复的, 但是分数是可以重复的.
例如下面, 给b加上800 , 此时 a和b的分数都是1100.
通过获取索引可以看到a为第二个, b为第三个.
在这里插入图片描述
zrange 可以按照元素的索引位置拿到指定范围的元素 .
例如下图是拿到0 到100的索引位置的元素 . 包含索引位置为100的元素 即拿到101个元素.
也可以直接写 0 -1 即拿到所有的元素.

猜你喜欢

转载自blog.csdn.net/qq_33229669/article/details/108689326