Redis7 数据类型

kyang MVP++

img

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 ...]

    向集合中添加一个或多个成员。如果成员已经存在,则不会重复添加。

    1
    SADD myset a b c
  • SMEMBERS key

    获取集合中的所有成员。

    1
    SMEMBERS myset
  • SISMEMBER key member

    判断成员是否存在于集合中。

    1
    SISMEMBER myset a
  • SREM key member [member ...]

    从集合中移除一个或多个成员。

    1
    SREM myset a
  • SCARD key

    获取集合的成员数量。

    1
    SCARD myset
  • SRANDMEMBER key [count]

    从集合中随机获取一个或多个成员。如果不指定count,则只返回一个成员。

    1
    SRANDMEMBER myset
  • SPOP key [count]

    移除并返回集合中的一个或多个成员。如果不指定count,则只移除一个成员。

    1
    SPOP myset
  • SMOVE source destination member [member ...]

    将集合中的一个或多个成员移动到另一个集合中。

    1
    SMOVE myset myset2 a b

5.2 集合运算

集合还支持一些高级操作,例如集合运算:

  • SDIFF key [key ...]

    返回一个集合,该集合是第一个集合与所有给定集合的差集。

    1
    SDIFF myset myset2
  • SINTER key [key ...]

    返回一个集合,该集合是第一个集合与所有给定集合的交集。

    1
    SINTER myset myset2
  • SUNION key [key ...]

    返回一个集合,该集合是第一个集合与所有给定集合的并集。

    1
    SUNION myset myset2

6. Redis有序集合(Sorted Set)

有序集合(Sorted Set)是集合的扩展,每个元素都会关联一个分数,可以根据分数来排序集合中的元素。

6.1 常用操作

  • ZADD key score member [score member ...]

    向有序集合中添加一个或多个成员,每个成员都会关联一个分数。

    1
    ZADD myzset 10 apple 20 banana 30 cherry
  • ZRANGE key start stop [WITHSCORES]

    按照索引范围获取有序集合中的元素。

    1
    ZRANGE myzset 0 2
  • ZREVRANGE key start stop [WITHSCORES]

    按照索引范围获取有序集合中的元素,结果将按照分数从高到低排序。

    1
    ZREVRANGE myzset 0 2
  • ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

    根据分数范围获取有序集合中的元素。

    1
    ZRANGEBYSCORE myzset 10 20

6.2 高级操作

  • ZCARD key

    获取有序集合的成员数量。

    1
    ZCARD myzset
  • ZREM key member [member ...]

    从有序集合中移除一个或多个成员。

    1
    ZREM myzset banana
  • ZSCORE key member

    获取有序集合中成员的分数。

    1
    ZSCORE myzset apple
  • ZINCRBY key increment member

    对有序集合中指定成员的分数进行增量操作。

    1
    ZINCRBY myzset 5 apple

7. Redis位图(BitMap)

Redis的位图(BitMap)是一个特殊的字符串类型,可以用来存储和检查大量布尔值。由于位图只使用单个比特位来表示每个值,因此它非常适合存储大量的小规模数据集。

7.1 位图操作

  • SETBIT key offset value

    在位图中的指定偏移量处设置值为1或0。

    1
    SETBIT user:001:online 0 1  # 表示用户001在线
  • GETBIT key offset

    获取位图在指定偏移量处的值(0或1)。

    1
    GETBIT user:001:online 0  # 获取用户001在线状态
  • BITCOUNT key [start end]

    计算位图中指定范围内的1的数量。如果不指定start和end,则计算整个位图。

    1
    BITCOUNT user:001:online 0 100  # 计算用户001在线时间段内的活跃用户数
  • BITOP operation destkey sourcekey [sourcekey ...]

    对多个位图执行位运算,并将结果存储在目标位图中。支持的运算包括AND、OR、XOR和NOT。

    1
    BITOP AND resultkey key1 key2  # 将key1和key2的位图进行AND运算,结果存储在resultkey

8. Redis基数统计(HyperLogLog)

Redis的HyperLogLog是一种概率数据结构,用于计算集合中不同元素的大致基数(即不同元素的个数)。它非常适合存储大量唯一值,且占用的空间非常小。

8.1 HyperLogLog操作

  • PFADD key element [element ...]

    向HyperLogLog中添加一个或多个元素。

    1
    PFADD uniqueVisitors UV1 user1 user2 user3
  • PFCOUNT key [key ...]

    返回HyperLogLog中存储的基数估计值。

    1
    PFCOUNT UV1
  • PFMERGE destkey sourcekey [sourcekey ...]

    将多个HyperLogLog合并为一个,并计算合并后的基数估计值。

    1
    PFMERGE UV2 UV1 UV3

9. Redis地理空间(GEO)

Redis的地理空间(GEO)模块允许你存储和查询地理坐标点,并计算两点之间的距离和获取基于位置的元素范围。

9.1 地理空间操作

  • GEOADD key longitude latitude member [longitude latitude member ...]

    添加一个或多个地理坐标到键中。

    1
    GEOADD locations 116.4074 39.9042 beijing
  • GEOPOS key member [member ...]

    获取指定成员的地理坐标。

    1
    GEOPOS locations beijing
  • GEORADIUS key longitude latitude radius unit [WITHCOORD [WITHDIST [WITHHASH]]]

    以给定中心点和半径获取所有位于指定范围内的成员。

    1
    GEORADIUS locations 116.4074 39.9042 100 km WITHCOORD

10. Redis流(Stream)

Redis的Stream是一个全新的数据结构,用于处理实时消息流,支持消息的发布和订阅,以及高效的持久化。

10.1 流操作

  • XADD key [NX|XX] [ID <id>][len <len>] <field> <value> [field <value> ...]

    添加一个消息到Stream中。

    1
    XADD mystream * field1 value1 field2 value2
  • XRANGE key start stop [WITHSCORES]

    获取Stream中从start到stop的消息。

    1
    XRANGE mystream 0 10
  • XREAD key [key ...] stream [id [count]]

    从Stream中读取消息。

    1
    XREAD Streams mystream 0
  • 标题: Redis7 数据类型
  • 作者: kyang
  • 创建于 : 2024-10-20 11:07:45
  • 更新于 : 2025-07-11 16:56:12
  • 链接: https://blog.kyang.top/2024/10/20/Redis7 数据类型/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论