三、hash (字典)
Redis 的字典相当于 Java 语言里面的 HashMap,它是无序字典 。内部实现结构上同 Java 的 HashMap 也是一致的,同样的数组 + 链表二维结构 。第一维 hash 的数组位置碰撞时,就会将碰撞的元素使用链表串接起来 。所以特点也是和Java中Map结构相似 。不同的是,Redis 的字典的值只能是字符串,另外它们 rehash 的方式不一样,因为 Java 的 HashMap 在字典很大时,rehash 是个耗时的操作,需要一次性全部 rehash 。Redis 为了高性能,不能堵塞服务,所以采用了渐进式 rehash 策略 。渐进式 rehash 会在 rehash 的同时,保留新旧两个 hash 结构,查询时会同时查询两个 hash 结构,然后在后续的定时任务中以及 hash 的子指令中,循序渐进地将旧 hash 的内容 一点点迁移到新的 hash 结构中 。当 hash 移除了最后一个元素之后,该数据结构自动被删除,内存被回收 。
操作命令:
HSET key field value -- 将哈希表 key 中的字段 field 的值设为 value HSETNX key field value -- 只有在字段 field 不存在时,设置哈希表字段的值 。HVALS key -- 获取哈希表中所有值HSCAN key cursor [MATCH pattern] [COUNT count] -- 迭代哈希表中的键值对 。HMSET key field1 value1 [field2 value2 ] -- 同时将多个 field-value (域-值)对设置到哈希表 key 中 。HMGET key field1 [field2] -- 获取所有给定字段的值HLEN key -- 获取哈希表中字段的数量HKEYS key -- 获取所有哈希表中的字段HINCRBYFLOAT key field increment -- 为哈希表 key 中的指定字段的浮点数值加上增量 increment HINCRBY key field increment -- 为哈希表 key 中的指定字段的整数值加上增量 increment HGETALL key -- 获取在哈希表中指定 key 的所有字段和值HGET key field -- 获取存储在哈希表中指定字段的值HEXISTS key field -- 查看哈希表 key 中,指定的字段是否存在HDEL key field1 [field2] -- 删除一个或多个哈希表字段

文章插图
四、set (集合)
Redis 的集合相当于 Java 语言里面的 HashSet,它内部的键值对是无序的唯一的 。它的内部实现相当于一个特殊的字典,字典中所有的 value 都是一个值 NULL,Java中的HashSet也是基于一个value为null的HashMap 。当集合中最后一个元素移除之后,数据结构自动删除,内存被回收 。set 结构可以用来做有去重需求需要实现的功能,可以保证唯一性 。
操作命令:
SADD key member1 [member2] -- 向集合添加一个或多个成员SCARD key -- 获取集合的成员数SDIFF key1 [key2] -- 返回给定所有集合的差集SDIFFSTORE destination key1 [key2] -- 返回给定所有集合的差集并存储在 destination 中SINTER key1 [key2] -- 返回给定所有集合的交集SINTERSTORE destination key1 [key2] -- 返回给定所有集合的交集并存储在 destination 中SISMEMBER key member -- 判断 member 元素是否是集合 key 的成员SMEMBERS key -- 返回集合中的所有成员SMOVE source destination member -- 将 member 元素从 source 集合移动到 destination 集合SPOP key -- 移除并返回集合中的一个随机元素SRANDMEMBER key [count] -- 返回集合中一个或多个随机数SREM key member1 [member2] -- 移除集合中一个或多个成员SUNION key1 [key2] -- 返回所有给定集合的并集SUNIONSTORE destination key1 [key2] -- 所有给定集合的并集存储在 destination 集合中SSCAN key cursor [MATCH pattern] [COUNT count] -- 迭代集合中的元素 
文章插图
spop命令是随机移除一个value,这一操作,刚好是baidu从bat中给移除去了,冥冥之中自有天意呀!不过baidu的技术还是最牛逼的!
五、zset (有序列表)
zset 是 Redis 提供的最为特色的数据结构,它类似于 Java 的 SortedSet 和 HashMap 的结合体,一方面它是一个 set,保证了内部 value 的唯一性,另一方面它可以给每个 value 赋予一个 score,代表这个 value 的排序权重 。它的内部实现用的是一种叫着“跳跃列表”的数据结构 。当zset 中最后一个 value 被移除后,数据结构自动删除,内存被回收 。
操作命令:
ZADD key score1 member1 [score2 member2] -- 向有序集合添加一个或多个成员,或者更新已存在成员的分数ZCARD key -- 获取有序集合的成员数ZCOUNT key min max -- 计算在有序集合中指定区间分数的成员数ZINCRBY key increment member -- 有序集合中对指定成员的分数加上增量 incrementZINTERSTORE destination numkeys key [key ...] -- 计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中ZLEXCOUNT key min max -- 在有序集合中计算指定字典区间内成员数量ZRANGE key start stop [WITHSCORES] -- 通过索引区间返回有序集合指定区间内的成员ZRANGEBYLEX key min max [LIMIT offset count] -- 通过字典区间返回有序集合的成员ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] -- 通过分数返回有序集合指定区间内的成员ZRANK key member -- 返回有序集合中指定成员的索引ZREM key member [member ...] -- 移除有序集合中的一个或多个成员ZREMRANGEBYLEX key min max -- 移除有序集合中给定的字典区间的所有成员ZREMRANGEBYRANK key start stop -- 移除有序集合中给定的排名区间的所有成员ZREMRANGEBYSCORE key min max -- 移除有序集合中给定的分数区间的所有成员ZREVRANGE key start stop [WITHSCORES] -- 返回有序集中指定区间内的成员,通过索引,分数从高到低ZREVRANGEBYSCORE key max min [WITHSCORES] -- 返回有序集中指定分数区间内的成员,分数从高到低排序ZREVRANK key member -- 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序ZSCORE key member -- 返回有序集中,成员的分数值ZUNIONSTORE destination numkeys key [key ...] -- 计算给定的一个或多个有序集的并集,并存储在新的 key 中ZSCAN key cursor [MATCH pattern] [COUNT count] -- 迭代有序集合中的元素(包括元素成员和元素分值)
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- rdb redis配置之快照保存
- AMD|100MB缓存最强U!AMD锐龙7 5800X3D超频被破解 冲上4.82GHz
- 数据类型 一文了解Reids五大对象
- Redis的过期键删除策略
- 一文学会redis,就是这么简单
- Redis快速入门,学会这15点
- 一篇文章读懂redis
- 全网最简洁最全Redis安装检测
- 环境搭建-Redis
- 什么是缓存一致性问题?如何解决呢?
