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
- 单条操作
- set key value
- get key
# 设置值
127.0.0.1:6379> set name zain
OK
# 获取值
127.0.0.1:6379> get name
"zain"
- 批量操作
- 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"
- 过期操作
- 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
- 计数操作
可对整数类型做计数
- 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) 需要遍历链表
- 入数/出数操作
- 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"
- 基于下标操作
- 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
- 单条操作
- 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
- 批量操作
- 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"
- 计数操作
- 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
- 基本用途
- 无重复数据集合
- 基本操作
- 基本操作
- 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
- 基本用途
- 基于分数排名
- 延迟队列
- 基本操作
- 基本操作
- 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
附录
- 单词说明
- incr
- 增加
- increase
- increment
- 增量, 增加量是多少
- mget
- 多重获取
- multiple get
- trim
- 修剪、切除