- String
- hash
- list
- set
- sortedset
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这种结构, 可以设置一个大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集合特点是取出的数据与存入的数据相反. 切换存储空间 使用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是通过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获取一个流水号, 而且还将其移除了, 这样就保证了流水号的唯一性.
有序的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 即拿到所有的元素.