redis的在set(无序)zset(有序) hash的API

Set:https://www.cnblogs.com/freely/p/6848260.html

1:无序的

  1. 确定性
  2. 一致性

SADD:sadd 对应的集合中添加元素

sadd key element [element ...]

SCARD:scard 获取name对应的集合中元素个数

  scard key

SDIFF:sdiff 在第一个name对应的集合中且不在其他name对应的集合的元素集合

Sdiff key[key...]
SDIFFSTORE:sdiffstore   # 获取第一个name对应的集合中且不在其他name对应的集合,再将其新加入到dest对应的集合中

sdiffstore destination key[key...]

SINTER:sinter # 获取多个name对应集合的并集

Sinter key[key...]

SINTERSTORE:sinterstore # 获取多一个name对应集合的并集,再讲其加入到dest对应的集合中

Sinterstore destination key[key...]

SISMEMBER:sismember # 检查value是否是name对应的集合的成员

sismember key element

SMEMBERS:smembers # 获取name对应的集合的所有成员

smembers key

SMOVE:smove # 将某个成员从一个集合中移动到另外一个集合

Smove source destination member

SPOP:spop # 从集合)移除一个成员,并将其返回  随机的

 spop key

SRANDMEMBER:srandmember# 从name对应的集合中随机获取 numbers 个元素不会删除

srandmember key [count]

SREM:srem# 在name对应的集合中删除某些值

srem key element [element ...]

SUNION:sunion# 获取多个name对应的集合的并集

Sunion key[key...]

SUNIONSTORE:sunionstore# 获取多一个name对应的集合的并集,并将结果保存到dest对应的集合中

Sunionstore destination key[key...]

SSCAN:sscan# 同字符串的操作,用于增量迭代分批获取元素,避免内存消耗太大

 

 

zset

有序集合:https://blog.youkuaiyun.com/lin_will/article/details/79684628

ZADD:# 在name对应的有序集合中添加元素

ZADD  key score number [score number ......] 

ZCARD:# 获取name对应的有序集合元素的数量

Zcard key

ZCOUNT:# --获得指定分数范围内的元素个数

 ZCOUNT key min_score max_score

ZINCRBY#--增加元素的分数,返回增加后,元素的分数

ZINCRBY key imcrement mumber

ZRANGE:# 按照索引范围获取name对应的有序集合的元素

zrange key start  stop [WITHSCORES] 

# 参数:

    # name,redis的name

    # start,有序集合索引起始位置(非分数)

    # end,有序集合索引结束位置(非分数)

    # desc,排序规则,默认按照分数从小到大排序

    # withscores,是否获取元素的分数,默认只获取元素的值

    # score_cast_func,对分数进行数据转换的函数

 

ZRANGEBYSCORE:获取某个分数范围内的元素

 备注:在分数前面加 ”(“表示不包括该分数的意思

Limit 截取 offset截取的起始位置 count 截取的个数

ZRANGEBYSCORE key min_score max_score [WITHSCORES] [LIMIT OFFSET COUNT]

ZRANK:# 获得元素的排名

ZRANK key member (按照元素的从小到大的顺序获取指定元素的排名,排名从0开始)

ZREM:#-删除一个或是多个元素,返回的是被删除元素的个数

ZREM key member [member .....]

ZREMRANGEBYRANK:--删除指定排名的元素按照索引删除

ZREMRANGEBYRANK key start stop

ZREMRANGEBYSCORE:--按照分数范围删除元素

ZREMRANGEBYSCORE key start stop

ZREVRANGE:按照索引返回元素 从大到小排序

ZREVRANGE key start stop [WITHSCORES]

ZREVRANGEBYSCORE:返回有序集合中指定分数区间内的成员,分数由高到低排序。

ZREVRANGEBYSCORE key max min WITHSCORES LIMIT offset count

ZREVRANK:获得元素的排名

ZREVRANK key member(和ZRANK相反,从大到小

ZSCORE:# 获取name对应有序集合中 value 对应的分数

zscore key member

ZUNIONSTORE:# 获取两个有序集合的并集,

如果遇到相同值不同分数,则按照aggregate进行操作,如果不输入aggregate,则默认sum

# aggregate的值为:  SUM  MIN  MAX

 zunionstore destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX] 

 

 

ZINTERSTORE计算有序集合的交集

 ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight...]] [AGGREGATE SUM|MIN?MAX]

 该命令用来计算多个有序集合的交集并将结果存储在destination键中,返回值为destination键中的元素个数

参数解析:

  1)当AGGREGATE 是SUM(默认值),destination键中元素的分数是每个参与计算集合中该元素分数的和

2)当AGGREGATE 是MIN,destination键中元素的分数是每个参与计算集合中该元素分数的最小值

3)当AGGREGATE 是MAX,destination键中元素的分数是每个参与计算集合中该元素分数的最大值

 

ZSCAN:# 同字符串相似,相较于字符串新增score_cast_func,用来对分数进行操作

ZRANGEBYLEX:通过字典区间返回有序集合的成员

ZRANGEBYLEX key min max [LIMIT offset count]

get range of sorted set by lexicographical ordering.ZRANGEBYLEX 返回指定成员区间内的成员,按成员字典正序排序, 分数必须相同。 在某些业务场景中,需要对一个字符串数组按名称的字典顺序进行排序时,可以使用Redis中SortSet这种数据结构来处理。-表示负无穷大,+表示无穷大,(表示不包括,【表示包括

ZLEXCOUNT:通过字典序返回区间的个数

zlexcount key min max

ZREMRANGEBYLEX

zremrangebylex key min max

 

 

 

Hash

HDEL:删除一个或多个哈希表字段

HDEL key field1 [field2...] 

HEXISTS:查看哈希表 key 中,指定的字段是否存在。

HEXISTS key field

HGET:获取存储在哈希表中指定字段的值

HGET key field 

HGETALL:获取在哈希表中指定 key 的所有字段和值

HGETALL key

HINCRBY:为哈希表 key 中的指定字段的整数值加上增量 increment 。

HINCRBY key field increment 

HINCRBYFLOAT:为哈希表 key 中的指定字段的浮点数值加上增量 increment 。

HINCRBYFLOAT key field increment 

HKEYS:获取所有哈希表中的字段

HKEYS key 

HLEN:获取哈希表中字段的数量

HLEN key 

HMGET:获取所有给定字段的值

HMGET key field1 [field2]

HMSET:同时将多个 field-value (域-值)对设置到哈希表 key 中。

HMSET key field1 value1 [field2 value2... ] 

HSET:将哈希表 key 中的字段 field 的值设为 value 

HSET key field value 

HSETNX:只有在字段 field 不存在时,设置哈希表字段的值。 

HSETNX key field value

HVALS:获取哈希表中所有值

HVALS key 

HSTRLEN:获取哈希表中字段对应值的长度

HSTRLEN key field

Redis 中的 `Set` 和 `ZSet` 是两种用于存储集合类型的数据结构,它们之间在功能、实现方式以及应用场景上存在显著的区别。以下是对这两种数据结构的详细对比分析: ### 1. 数据特性 - **Set** 是一个无序且不重复的字符串集合。每个元素在集合中没有顺序的概念,且不允许重复[^3]。 - **ZSet**(有序集合)则是在 `Set` 的基础上增加了排序功能。每个元素都关联一个浮点数分数(score),Redis 根据这个分数对元素进行排序。即使多个元素具有相同的分数,它们在集合中的顺序仍然可以通过内部机制进行确定。 ### 2. 实现方式 - **Set** 是通过哈希表(hash table)实现的,因此其添加、删除和查找操作的时间复杂度均为 $O(1)$。由于其底层实现的特点,`Set` 不支持元素的排序操作。 - **ZSet** 的实现则更为复杂,它结合了跳跃表(skip list)和哈希表两种数据结构: - 跳跃表用于维护元素的排序,支持高效的范围查询。 - 哈希表用于确保元素的唯一性,并支持 $O(1)$ 时间复杂度的查找操作。 ### 3. 操作功能 - **Set** 支持的操作包括: - 添加元素(SADD) - 删除元素(SREM) - 判断元素是否存在(SISMEMBER) - 获取集合中所有元素(SMEMBERS) - 集合运算(如并集、交集、差集)等。 - **ZSet** 支持的操作则包括: - 添加带有分数的元素(ZADD) - 删除指定元素(ZREM) - 获取元素的分数(ZSCORE) - 获取元素的排名(ZRANK) - 范围查询(ZRANGE) - 按照分数范围删除元素(ZREMRANGEBYSCORE)等。 ### 4. 应用场景 - **Set** 更适合用于需要快速判断成员是否存在、集合运算等场景。例如,可以用于实现社交网络中的好友推荐、标签系统等功能。 - **ZSet** 则适用于需要对集合中的元素进行排序的场景。例如: - 排行榜系统:通过分数对用户进行排序。 - 优先级队列:根据分数管理任务的优先级。 - 延迟队列:将任务的执行时间作为分数,按时间顺序处理任务。 ### 5. 性能差异 - 对于基本的添加和删除操作,`Set` 的时间复杂度为 $O(1)$,性能优于 `ZSet`。 - **ZSet** 的操作通常涉及排序维护,因此添加和删除操作的时间复杂度为 $O(\log n)$,其中 $n$ 是集合中元素的数量。 ### 6. 内存占用 - **Set** 由于仅需要维护一个哈希表,内存占用相对较低。 - **ZSet** 需要同时维护跳跃表和哈希表,因此内存占用较高。此外,每个元素还需要额外存储一个分数值。 ### 示例代码 #### Set 示例 ```bash # 添加元素 SADD myset "apple" SADD myset "banana" # 获取集合中的所有元素 SMEMBERS myset # 判断元素是否存在 SISMEMBER myset "apple" # 删除元素 SREM myset "banana" ``` #### ZSet 示例 ```bash # 添加带分数的元素 ZADD myzset 1 "one" ZADD myzset 2 "two" # 获取元素的分数 ZSCORE myzset "one" # 获取元素的排名 ZRANK myzset "two" # 获取范围内的元素 ZRANGE myzset 0 -1 WITHSCORES # 按分数范围删除元素 ZREMRANGEBYSCORE myzset 1 2 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值