【Redis】2-Redis基本数据结构

本文深入解析Redis的五种核心数据结构:String、List、Hash、Set与SortedSet,涵盖每种数据结构的基本用途、操作命令及应用场景,是Redis学习与应用的实用指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis 2-Redis基本数据结构

5种基本数据结构

  • String 字符串
  • List 列表
  • Hash 哈希
  • Set 集合
  • Sorted Set 有序集合

1 String 字符串

  • 简单动态字符串 key:string
  • 基本用途
    • key、value 数据库
    • 计数器
  • 基本操作
    • 单条操作 get/set
    • 批量操作 mget/mset
    • 过期操作 expire/ttl/pttl/setex
    • 计数操作 incr/incrby
  1. 单条操作
  • set key value
  • get key
# 设置值
127.0.0.1:6379> set name zain
OK

# 获取值
127.0.0.1:6379> get name
"zain"
  1. 批量操作
  • mset key value [key value …]
  • mget key [key …]
# 设置值
127.0.0.1:6379> mset name zain url bheternal comment hahaha
OK

# 获取值
127.0.0.1:6379> mget name url comment
1) "zain"
2) "bheternal"
3) "hahaha"
  1. 过期操作
  • expire key seconds
    • 设置 key 过期时间
  • ttl key
    • 查看过期时间 秒
  • pttl key
    • 查看过期时间 毫秒(millisecond)
  • setex key seconds value
    • 赋值时设置 key 过期时间
# 设置过期时间
127.0.0.1:6379> expire name 50
(integer) 1

# 查看剩余时间 毫秒
127.0.0.1:6379> pttl name
(integer) 9833

# 查看剩余时间 秒
127.0.0.1:6379> ttl name
(integer) 3

# 查看剩余时间 过期
127.0.0.1:6379> ttl name
(integer) -2

# 过期后获取
127.0.0.1:6379> get name
(nil)

# 赋值时设置过期时间
127.0.0.1:6379> setex name 30 zain
OK
  1. 计数操作

可对整数类型做计数

  • incr key
  • incrby key increment
# 设置计数 key
127.0.0.1:6379> set read 1
OK

# 开始计数
127.0.0.1:6379> incr read
(integer) 2

127.0.0.1:6379> incr read
(integer) 3

# 计数步长改变
127.0.0.1:6379> incrby read 10
(integer) 13

# 减少计数
127.0.0.1:6379> incrby read -1
(integer) 12

2 List 列表

  • 双向链表 key:list
  • 基本用途
    • 异步队列
    • 列表
  • 基本操作
    • 入数/出数操作 lpush/lpop/rpush/rpop/len
    • 基于下标操作 lindex/ltrim
      • 慢操作 O(n) 需要遍历链表
  1. 入数/出数操作
  • lpush/rpush key element [element …]
  • lpop/rpop key
  • llen key
# 右入数3
127.0.0.1:6379> rpush task r1 r2 r3
(integer) 3

# 左入数3
127.0.0.1:6379> lpush task l1 l2 l3
(integer) 6

# 查看长度
127.0.0.1:6379> llen task
(integer) 6

# 右出数
127.0.0.1:6379> rpop task
"r3"

# 左出数
127.0.0.1:6379> lpop task
"l3"
  1. 基于下标操作
  • lindex key index
    • 获取指定位置元素
    • O(N)
  • lrange key start stop
    • 获取指定范围的元素
    • 0 -1 表示获取全部元素
    • O(S+N)
  • ltrim key start stop
    • 剪掉两边的元素
    • O(N)
# 获取 0 位置的数据
127.0.0.1:6379> lindex task 0
"l2"

# 获取全部元素
127.0.0.1:6379> lrange task 0 -1
1) "l2"
2) "l1"
3) "r1"
4) "r2"

# 获取前两个元素
127.0.0.1:6379> lrange task 0 1
1) "l2"
2) "l1"

# 剪掉两边的元素
127.0.0.1:6379> ltrim task 1 2
OK

127.0.0.1:6379> lrange task 0 -1
1) "l1"
2) "r1"

3 Hash 哈希

  • 哈希表 key:hashtable
  • 基本用途
    • Hash表
    • 计数
  • 基本操作
    • 单条操作 hget/hset/hdel/hexists/hlen
    • 批量操作 hmget/hmset/hkeys/hvals/hgetall
    • 计数操作 hincrby
  1. 单条操作
  • hget key field
  • hset key field value [field value …]
  • hdel key field [field …]
  • hexists key field
  • hlen key
# 设置 hash 表
127.0.0.1:6379> hset user name zain read 1 f1 1 f2 1
(integer) 1

# 获取 hash 表值
127.0.0.1:6379> hget user name
"zain"

127.0.0.1:6379> hget user f1
"1"

# 删除 hash 表值
127.0.0.1:6379> hdel user f1
(integer) 1

127.0.0.1:6379> hget user f1
(nil)

# 检查 hash 字段是否存在
127.0.0.1:6379> hexists user name
(integer) 1

127.0.0.1:6379> hexists user f1
(integer) 0

# 查看 hash 表字段数量
127.0.0.1:6379> hlen user
(integer) 3
  1. 批量操作
  • hmget key field [field …]
  • hmset key field value [field value …]
  • hkeys key
    • 获取全部 key
  • hvals key
    • 获取全部 value
  • hgetall key
    • 获取全部 key value
# 获取 hash 表多个元素
127.0.0.1:6379> hmget user name read
1) "zain"
2) "1"

# 设置 hash 表多个元素
127.0.0.1:6379> hset user f1 3 f2 3
(integer) 1

127.0.0.1:6379> hmget user f1 f2
1) "3"
2) "3"

# 获取 hash 表全部字段
127.0.0.1:6379> hkeys user
1) "f1"
2) "read"
3) "f2"
4) "name"

# 获取 hash 表全部值
127.0.0.1:6379> hvals user
1) "3"
2) "1"
3) "3"
4) "zain"

# 获取 hash 表全部数据 key field [key field ...]
127.0.0.1:6379> hgetall user
1) "f1"
2) "3"
3) "read"
4) "1"
5) "f2"
6) "3"
7) "name"
8) "zain"
  1. 计数操作
  • hincrby
# 设置计数
127.0.0.1:6379> hincrby user read 1
(integer) 2

127.0.0.1:6379> hget user read
"2"

4 Set 集合

  • 集合 key:set
  • 基本用途
    • 无重复数据集合
  • 基本操作
  1. 基本操作
  • sadd key member [member …]
  • smembers key
  • 获取全部成员
  • O(N)
  • scard key
    • 查看成员数量
  • spop key [count]
    • 弹出定量数据
  • sismember key member
    • 检查成员是否存在
  • srem key member [member …]
    • 移除指定元素
    • O(N)
# 设置集合
127.0.0.1:6379> sadd uid u1 u2 u3 u4 u2 u5 u1
(integer) 5

# 获取全部成员
127.0.0.1:6379> smembers uid
1) "u1"
2) "u4"
3) "u3"
4) "u5"
5) "u2"

# 弹出成员
127.0.0.1:6379> spop uid 3
1) "u5"
2) "u2"
3) "u1"

# 查看成员数量
127.0.0.1:6379> scard uid
(integer) 2

# 检查成员是否存在
127.0.0.1:6379> sismember uid u3
(integer) 1
127.0.0.1:6379> sismember uid u1
(integer) 0

# 移除指定元素
127.0.0.1:6379> srem uid u3
(integer) 1
127.0.0.1:6379> smembers uid
1) "u4"

5 Sorted Set 有序集合

  • 有序集合 key:zset
  • 基本用途
    • 基于分数排名
    • 延迟队列
  • 基本操作
  1. 基本操作
  • zadd key [NX|XX] [CH] [INCR] score member [score member …]
    • XX: Only update elements that already exist. Never add elements.
    • NX: Don’t update already existing elements. Always add new elements.
    • CH: Modify the return value from the number of new elements added, to the total number of elements changed (CH is an abbreviation of changed)
    • O(log(N))
  • zrange key start stop [WITHSCORES]
    • 获取范围内的元素, 前后下标1都包含
    • WITHSCORES 是否携带分数返回
    • O(log(N)+M)
  • zcard key
    • 获取元素数量
  • zscore key member
    • 获取元素分数
  • zrangebyscore key min max [WITHSCORES] [LIMIT offset count]
    • 通过分数范围获取元素
    • LIMIT 0 1 限定返回数量
  • zrem key member [member …]
    • 移除指定元素
    • O(M*log(N))
  • zcount key min max
    • 统计分数范围内的元素数量
    • O(log(N))
# 添加元素
127.0.0.1:6379> zadd rank 80 xiaoming 90 xiaohong 49 lilei
(integer) 3

# 获取元素
127.0.0.1:6379> zrange rank 0 0
1) "lilei"
127.0.0.1:6379> zrange rank 0 0 WITHSCORES
1) "lilei"
2) "49"

# 获取元素数量
127.0.0.1:6379> zcard rank
(integer) 3

# 获取元素分数
127.0.0.1:6379> zscore rank lilei
"49"

# 通过分数范围获取元素
127.0.0.1:6379> zrangebyscore rank 60 100
1) "xiaoming"
2) "xiaohong"

# 通过分数范围获取元素, 限定返回示例
127.0.0.1:6379> zrangebyscore rank 60 100 withscores limit 0 1
1) "xiaoming"
2) "80"

# 移除指定元素
127.0.0.1:6379> zrem rank lilei
(integer) 1
127.0.0.1:6379> zrange rank 0 3
1) "xiaoming"
2) "xiaohong"

# 统计分数范围内的元素数量
127.0.0.1:6379> zcount rank 60 100
(integer) 2

附录

  1. 单词说明
  • incr
    • 增加
    • increase
  • increment
    • 增量, 增加量是多少
  • mget
    • 多重获取
    • multiple get
  • trim
    • 修剪、切除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值