Redis7 数据类型
文章目录
- Redis7 数据类型
- 1. Redis键(Key)
- 2. Redis字符串(String)
- 3. Redis列表(List)
- 4. Redis哈希表(Hash)
- 5. Redis集合(Set)
- 5.1 常用操作
- 5.2 集合运算
- 6. Redis有序集合(Sorted Set)
- 6.1 常用操作
- 6.2 高级操作
- 7. Redis位图(BitMap)
- 7.1 位图操作
- 8. Redis基数统计(HyperLogLog)
- 8.1 HyperLogLog操作
- 9. Redis地理空间(GEO)
- 9.1 地理空间操作
- 10. Redis流(Stream)
- 10.1 流操作
1. Redis键(Key)
Redis键是存储在Redis中的数据项的名称。以下是一些常用的键操作命令:
keys *
:查看当前数据库的所有键。exists key
:判断某个键是否存在。type key
:查看键的类型。del key
:删除键。unlink key
:非阻塞删除,仅删除keyspace元数据,真正删除在后续异步进行。ttl key
:查看还有多少秒过期。expire key 秒钟
:给指定键设置过期时间。move key dbindex [0-15]
:将键转移到指定数据库(Redis默认分为16个数据库,默认打开是0)。select dbindex [0-15]
:切换到指定数据库。dbsize
:查看当前数据库key数量。flushdb
:清空当前库。flushall
:通杀所有库。
2. Redis字符串(String)
set key value
:设置键的值。get key
:获取键的值。mset key value key value ...
:同时设置多个键的值。mget key key ...
:同时获取多个键的值。getrange key index1 index2
:获取value的index1-index2位置的值。setrange key index value
:用value替换index处的值。incr key
:将键的值增加1。decr key
:将键的值减1。strlen key
:获取键的值的长度。append key value
:将value追加到键的值的末尾。getset key value
:将键的值设置为value,并返回旧值。
3. Redis列表(List)
Redis列表是一个有序集合,允许在列表的两端添加或移除元素。
lpush key v1 v2 ...
:在列表的左侧添加一个或多个元素。rpush key v1 v2 ...
:在列表的右侧添加一个或多个元素。lrange key index1 index2
:获取列表中从index1到index2的元素。lpop key
:从列表的左侧移除并返回第一个元素。rpop key
:从列表的右侧移除并返回第一个元素。lindex key index
:根据索引获取列表中的元素。llen key
:获取列表的长度。lrem key N v1
:删除列表中N个值等于v1的元素。rpoplpush key1 key2
:从key1列表的右侧移除元素,并将其添加到key2列表的左侧。lset key index value
:设置列表中索引为index的元素的值。
4. Redis哈希表(Hash)
Redis哈希表是一个键值对集合,其中键是一个字符串,值可以是一个字符串、整数或列表。
hset key feild value
:设置哈希表的键值对。hget key feild
:获取哈希表中键对应的值。hmset key feild value feild value ...
:同时设置哈希表的多个键值对。hmget key feild feild ...
:同时获取哈希表的多个键值对。hgetall key
:获取哈希表中的所有键值对。hdel key feild
:删除哈希表中的键值对。hlen key
:获取哈希表中的键值对数量。hexists key feild
:检查哈希表中是否存在指定的键。hkeys key
:获取哈希表中的所有键。hvals key
:获取哈希表中的所有值。hincrby key feild v
:将哈希表中键对应的值增加v。hsetnx key feild value
:如果键不存在,则设置键的值。
5. Redis集合(Set)
集合(Set)是Redis中的一种数据结构,用于存储唯一的字符串元素。
5.1 常用操作
-
SADD key member [member ...]
向集合中添加一个或多个成员。如果成员已经存在,则不会重复添加。
SADD myset a b c
-
SMEMBERS key
获取集合中的所有成员。
SMEMBERS myset
-
SISMEMBER key member
判断成员是否存在于集合中。
SISMEMBER myset a
-
SREM key member [member ...]
从集合中移除一个或多个成员。
SREM myset a
-
SCARD key
获取集合的成员数量。
SCARD myset
-
SRANDMEMBER key [count]
从集合中随机获取一个或多个成员。如果不指定count,则只返回一个成员。
SRANDMEMBER myset
-
SPOP key [count]
移除并返回集合中的一个或多个成员。如果不指定count,则只移除一个成员。
SPOP myset
-
SMOVE source destination member [member ...]
将集合中的一个或多个成员移动到另一个集合中。
SMOVE myset myset2 a b
5.2 集合运算
集合还支持一些高级操作,例如集合运算:
-
SDIFF key [key ...]
返回一个集合,该集合是第一个集合与所有给定集合的差集。
SDIFF myset myset2
-
SINTER key [key ...]
返回一个集合,该集合是第一个集合与所有给定集合的交集。
SINTER myset myset2
-
SUNION key [key ...]
返回一个集合,该集合是第一个集合与所有给定集合的并集。
SUNION myset myset2
6. Redis有序集合(Sorted Set)
有序集合(Sorted Set)是集合的扩展,每个元素都会关联一个分数,可以根据分数来排序集合中的元素。
6.1 常用操作
-
ZADD key score member [score member ...]
向有序集合中添加一个或多个成员,每个成员都会关联一个分数。
ZADD myzset 10 apple 20 banana 30 cherry
-
ZRANGE key start stop [WITHSCORES]
按照索引范围获取有序集合中的元素。
ZRANGE myzset 0 2
-
ZREVRANGE key start stop [WITHSCORES]
按照索引范围获取有序集合中的元素,结果将按照分数从高到低排序。
ZREVRANGE myzset 0 2
-
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
根据分数范围获取有序集合中的元素。
ZRANGEBYSCORE myzset 10 20
6.2 高级操作
-
ZCARD key
获取有序集合的成员数量。
ZCARD myzset
-
ZREM key member [member ...]
从有序集合中移除一个或多个成员。
ZREM myzset banana
-
ZSCORE key member
获取有序集合中成员的分数。
ZSCORE myzset apple
-
ZINCRBY key increment member
对有序集合中指定成员的分数进行增量操作。
ZINCRBY myzset 5 apple
7. Redis位图(BitMap)
Redis的位图(BitMap)是一个特殊的字符串类型,可以用来存储和检查大量布尔值。由于位图只使用单个比特位来表示每个值,因此它非常适合存储大量的小规模数据集。
7.1 位图操作
-
SETBIT key offset value
在位图中的指定偏移量处设置值为1或0。
SETBIT user:001:online 0 1 表示用户001在线
-
GETBIT key offset
获取位图在指定偏移量处的值(0或1)。
GETBIT user:001:online 0 获取用户001在线状态
-
BITCOUNT key [start end]
计算位图中指定范围内的1的数量。如果不指定start和end,则计算整个位图。
BITCOUNT user:001:online 0 100 计算用户001在线时间段内的活跃用户数
-
BITOP operation destkey sourcekey [sourcekey ...]
对多个位图执行位运算,并将结果存储在目标位图中。支持的运算包括AND、OR、XOR和NOT。
BITOP AND resultkey key1 key2 将key1和key2的位图进行AND运算,结果存储在resultkey
8. Redis基数统计(HyperLogLog)
Redis的HyperLogLog是一种概率数据结构,用于计算集合中不同元素的大致基数(即不同元素的个数)。它非常适合存储大量唯一值,且占用的空间非常小。
8.1 HyperLogLog操作
-
PFADD key element [element ...]
向HyperLogLog中添加一个或多个元素。
PFADD uniqueVisitors UV1 user1 user2 user3
-
PFCOUNT key [key ...]
返回HyperLogLog中存储的基数估计值。
PFCOUNT UV1
-
PFMERGE destkey sourcekey [sourcekey ...]
将多个HyperLogLog合并为一个,并计算合并后的基数估计值。
PFMERGE UV2 UV1 UV3
9. Redis地理空间(GEO)
Redis的地理空间(GEO)模块允许你存储和查询地理坐标点,并计算两点之间的距离和获取基于位置的元素范围。
9.1 地理空间操作
-
GEOADD key longitude latitude member [longitude latitude member ...]
添加一个或多个地理坐标到键中。
GEOADD locations 116.4074 39.9042 beijing
-
GEOPOS key member [member ...]
获取指定成员的地理坐标。
GEOPOS locations beijing
-
GEORADIUS key longitude latitude radius unit [WITHCOORD [WITHDIST [WITHHASH]]]
以给定中心点和半径获取所有位于指定范围内的成员。
GEORADIUS locations 116.4074 39.9042 100 km WITHCOORD
10. Redis流(Stream)
Redis的Stream是一个全新的数据结构,用于处理实时消息流,支持消息的发布和订阅,以及高效的持久化。
10.1 流操作
-
XADD key [NX|XX] [ID
][len ] [field ...] 添加一个消息到Stream中。
XADD mystream * field1 value1 field2 value2
-
XRANGE key start stop [WITHSCORES]
获取Stream中从start到stop的消息。
XRANGE mystream 0 10
-
XREAD key [key ...] stream [id [count]]
从Stream中读取消息。
XREAD Streams mystream 0