redis学习总结(二)

参考:

https://blog.csdn.net/jy02268879/article/details/81447860

https://www.cnblogs.com/woods1815/p/13287724.html

目录:

zset有序集合命令及时间复杂度

setex、setnx、set、getset 命令的区别与使用

 

redis数据结构之zset有序集合,命令及时间复杂度

zset有序集合,元素不重复。

可用于排行榜(新旧程度排名,score可以用时间戳)。

结构

key             score        value
rank            15             a

                   35             b

                   28             c

                   94             d

                   8               e

跟普通的set比起来,每一个element都多了一个score。score可以重复,element不能重复。

集合内命令

zadd key score element  向有序集合中添加score和element  时间复杂度 o(logN)

zscore key element 获取element的分数   时间复杂度o(1)

zincrby key increScore element 自增element的分数  时间复杂度o(1)

zcard key 返回有序集合中元素的个数  时间复杂度o(1)

zrank key element 获取元素排名,下标从0开始

ZREVRANK key member  获取元素排名,倒叙

zrange key start end [withscores]   查询有序集合成指定排名区间内的成员,下标从0开始   时间复杂度o(log(n)+m)

zrevrange key start stop [withscores]    查询有序集合成指定排名区间内的成员,倒叙,下标从0开始

zrangebyscore key minScore maxScore [withscores]  查询有序集合指定分数区间内的成员  时间复杂度o(log(n)+m)

zrevrangebyscore key maxScore minScore [withscores]  查询有序集合指定分数区间内的成员,倒叙

zcount key minScore maxScore   计算在有序集合中指定分数区间的成员数  时间复杂度o(log(n)+m)

zrem key element 删除有序集合中的element  时间复杂度o(1)

zremrangebyrank key start end 移除有序集合中给定的排名区间的所有成员,从0开始  时间复杂度o(log(n)+m)

zremrangebyscore key minScore maxScore   移除有序集合中给定的分数区间的所有成员  时间复杂度o(log(n)+m)

集合间命令

ZINTERSTORE destination numkeys key [key ...]   计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中

ZUNIONSTORE destination numkeys key [key ...]   计算给定的一个或多个有序集的并集,并存储在新的 key 中

redis 中setex、setnx、set、getset 命令的区别与使用

介绍几个常用的redis命令:

SET 命令

set key value

设置指定 key 的值为 value。

如果 key 已经存储其他值, SET 就覆写旧值,且无视类型。

复制代码
127.0.0.1:6379> set testSetKey aaa
OK
127.0.0.1:6379> get testSetKey
"aaa"
127.0.0.1:6379> set testSetKey bbb  # 会覆写旧值
OK
127.0.0.1:6379> get testSetKey
"bbb"
复制代码

SETEX 命令

setex key seconds value

设置指定 key 的值为 value,并将 key 的过期时间设为 seconds (以秒为单位)。

如果 key 已经存在, SETEX 命令将会替换旧的值。

复制代码
127.0.0.1:6379> setex testSetexKey 60 aaa   # 设置过期时间为60秒
OK
127.0.0.1:6379> get testSetexKey   # 有效期内获取
"aaa"
127.0.0.1:6379> get testSetexKey   # 时间过期后再次获取返回 nil
(nil)
127.0.0.1:6379> setex testSetexKey 60 aaa
OK
127.0.0.1:6379> get testSetexKey
"aaa"
127.0.0.1:6379> setex testSetexKey 60 bbb    # 替换旧值
OK
127.0.0.1:6379> get testSetexKey
"bbb"
复制代码

SETNX 命令

setnx key value

设置指定 key 的值为 value,只有在 key 不存在时设置 key 的值。

setnx(SET if Not eXists) 命令在指定的 key 不存在时,为 key 设置指定的值。

设置成功,返回 1 。 设置失败,返回 0 。

复制代码
127.0.0.1:6379> setnx testSetnxKey aaa
(integer) 1
127.0.0.1:6379> get testSetnxKey
"aaa"
127.0.0.1:6379> setnx testSetnxKey bbb  # 当key值存在时,返回0
(integer) 0
127.0.0.1:6379> get testSetnxKey
"aaa"
复制代码

GETSET 命令

getset key value

设置指定 key 的值为 value,并返回 key 的旧值(old value)。

返回给定 key 的旧值。 当 key 没有旧值时,即 key 不存在时,返回 nil 。

当 key 存在但不是字符串类型时,返回一个错误。

复制代码
127.0.0.1:6379> getset testGetsetKey aaa  # 没有旧值时,返回 nil
(nil)
127.0.0.1:6379> get testGetsetKey
"aaa"
127.0.0.1:6379> getset testGetsetKey bbb  # 返回旧值
"aaa"
127.0.0.1:6379> get testGetsetKey
"bbb"
原文地址:https://www.cnblogs.com/xuwc/p/14013421.html