整理一些常见Redis数据结构「总结」

1. Redis概述

Redis是一个开源的高性能key-value数据库。它支持多种数据结构,包括字符串、哈希、列表、集合和有序集合等。Redis通常应用于数据缓存、会话管理、消息队列等场景,提供了丰富的命令模块,可以很方便地实现高效的数据查询和更新。

2. 字符串

2.1 字符串命令

Redis字符串命令包括set、get、incr、decr等操作,可以用于存储和获取值,以及对值进行增减操作。

SET key value [EX seconds] [PX milliseconds] [NX|XX]

GET key

INCR key

DECR key

其中,set命令用于存储键值对,可设置过期时间、是否存在才写等选项。get命令用于获取键对应的值,incr和decr命令分别用于对键所对应的值进行加、减操作。

2.2 数字类型和二进制类型

Redis的字符串值可以是数字类型,也可以是二进制类型。对于数字类型的字符串,Redis支持多种数值类型,包括整数、浮点数和Big Number。而对于二进制类型的字符串,则支持位操作命令和字串操作命令。

INCRBY key increment

DECRBY key decrement

BITOP operation destkey key [key ...]

SETBIT key offset value

GETBIT key offset

GETRANGE key start end

SETRANGE key offset value

其中,INCRBY和DECRBY命令用于对键值进行数值增减操作,BITOP和SETBIT命令用于对二进制类型的字符串进行位操作,GETBIT命令用于获取固定长度偏移量上的二进制值,GETRANGE和SETRANGE命令用于获取和设置字串。

3. 哈希表

3.1 哈希表操作

Redis的哈希表结构是键值对的集合,其中每个键都对应一个值。哈希表可以用于存储对象属性集,以及表示一张表的行数据。

HSET key field value

HMSET key field1 value1 [field2 value2 ]

HGET key field

HMGET key field1 [field2]

HGETALL key

HDEL key field1 [field2]

其中,HSET和HMSET命令用于设置哈希表key中的field和value,HGET和HMGET命令用于获取哈希表中的field所对应的value,HGETALL命令用于获取整个哈希表的所有键值对,HDEL命令用于删除哈希表中指定的键值对。

3.2 哈希表扩展操作

Redis支持多种哈希表扩展操作。比如可以用HINCRBY命令对键值进行数值增减操作,或者用HKEYS、HVALS、HLEN等命令分别获取哈希表的所有键名、所有值以及键值对总数。

HINCRBY key field increment

HKEYS key

HVALS key

HLEN key

4. 列表

4.1 列表命令

Redis列表是一个有序集合,其中每个元素都带有一个索引号。可以支持常规存取,也提供了丰富的命令来支持列表的扩展操作。

LPUSH key value1 [value2] 

RPUSH key value1 [value2]

LPOP key

RPOP key

LINDEX key index

LLEN key

其中,LPUSH和RPUSH命令用于在列表的左/右侧插入一个或多个元素,LPOP和RPOP命令用于移除列表的左/右端一个元素,LINDEX命令用于获取列表特定位置的元素值,LLEN命令用于获取列表长度。

4.2 列表扩展操作

Redis支持多种列表扩展操作。比如可以用LINSERT命令在列表中的特定元素前后插入元素,或者用LSET和LREM命令设置列表中特定索引上的元素值或删除列表中指定元素的值。

LINSERT key BEFORE|AFTER pivot value

LSET key index value

LREM key count value

5. 集合

5.1 集合命令

Redis集合是一个无序集合,其中每个元素都是唯一的。可以支持并集、交集、差集等常规操作,也提供了多种命令来进行集合扩展操作。

SADD key member [member2] 

SREM key member [member2]

SISMEMBER key member

SCARD key

SMEMBERS key

SUNION key1 [key2] [keyN]

SINTER key1 [key2] [keyN]

SDIFF key1 [key2] [keyN]

其中,SADD和SREM命令用于向集合中添加元素或删除元素,SISMEMBER命令用于判断指定元素在集合中是否存在,SCARD命令用于获取集合元素数量,SMEMBERS命令用于获取集合中的所有元素,SUNION、SINTER、SDIFF命令用于分别获取多个集合的并集、交集、差集。

5.2 集合扩展操作

Redis支持多种集合扩展操作。比如可以用SPOP命令弹出集合中的一个随机元素,用SRANDMEMBER命令获取集合中的一个随机元素,或者用SINTERSTORE、SUNIONSTORE和SDIFFSTORE命令分别把多个集合的交集、并集、差集结果存储到目标集合中。

SPOP key

SRANDMEMBER key [count]

SINTERSTORE destination key1 [key2] [keyN]

SUNIONSTORE destination key1 [key2] [keyN]

SDIFFSTORE destination key1 [key2] [keyN]

6. 有序集合

6.1 有序集合命令

Redis有序集合是一个有序集合,其中元素都带有一个权重值。可以按照权重排序,支持范围查找、插入删除等操作。

ZADD key score1 member1 [score2 member2]   

ZREM key member [member2]

ZRANK key member

ZREVRANK key member

ZSCORE key member

ZCARD key

ZRANGE key start stop [WITHSCORES]

ZREVRANGE key start stop [WITHSCORES]

其中,ZADD和ZREM命令用于向有序集合中添加元素或删除元素,ZRANK和ZREVRANK命令用于获取指定元素在集合中的顺序排位,ZSCORE命令用于获取指定元素的权重值,ZCARD命令用于获取集合元素数量,ZRANGE和ZREVRANGE命令用于获取指定权重区间的元素。

6.2 有序集合扩展操作

Redis支持多种有序集合扩展操作。比如可以用ZINCRBY命令对指定元素权重值进行增减操作,用ZUNIONSCORE和ZINTERSCORE命令对多个集合求交集或并集,assign权重等操作。

ZINCRBY key increment member

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

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

7. 总结

Redis提供了5种基本数据结构(字符串、哈希表、列表、集合、有序集合),每种结构都有丰富的命令模块和扩展操作,可以很好地满足常规数据库的需求。开发人员应根据实际场景选择合适的数据结构,以提升数据存储及查询效率。

数据库标签