【Redis】五大基本类型

说明

中文文档:http://redis.cn/documentation.html

String 文档:http://redis.cn/commands.html#string

List 文档:http://redis.cn/commands.html#list

Set 文档:http://redis.cn/commands.html#set

Hash 文档:http://redis.cn/commands.html#hash

Hset 文档:http://redis.cn/commands.html#sorted_set

Key

实际使用中,建议key使用 :(冒号)分割不同层次

127.0.0.1:6379> set user:2:name Aoa
OK
127.0.0.1:6379> set user:1:name Bob
OK

mark

String 类型

最简单Redis类型

## 设置 K-V ################################################
# set k v [nx|xx] [过期时间/秒]
127.0.0.1:6379> set k v nx # Key 不存在设置(分布式锁用到)
OK
127.0.0.1:6379> set k v nx
(nil)
127.0.0.1:6379> set kk v xx # Key 存在设置
(nil)

## V 自增|减 ################################################
# 原子性 几个客户端同时操作会增加|减少
127.0.0.1:6379> set k 10
OK
127.0.0.1:6379> incr k # key 自增 1 
(integer) 11
127.0.0.1:6379> incrby k 10 # key 增加 10
(integer) 21
127.0.0.1:6379> decr k # key 自减 1 
(integer) 20
127.0.0.1:6379> decrby k 5 # key 减少 5 
(integer) 15

## 批量 set|get ################################################
# 原子操作 一起成功|一起失败
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"

## 修改|检查|删除 ################################################
127.0.0.1:6379> set k vv # 再次设置为修改
OK
127.0.0.1:6379> exists k # 检查是否存在
(integer) 1
127.0.0.1:6379> del k # 删除 并 返回
(integer) 1
127.0.0.1:6379> exists k
(integer) 0

## 获取指定长度 ################################################
# getrange 键 起始位置 长度
127.0.0.1:6379> set k abcde
OK
127.0.0.1:6379> getrange k 1 2 # get range
"bc"
127.0.0.1:6379> getrange k 0 -1 
"abcde"

## 设置指定 '位置' 的值 ################################################
# setrange 键 位置 值
127.0.0.1:6379> set k abcde
OK
127.0.0.1:6379> setrange k 1 mm # set range
(integer) 5
127.0.0.1:6379> get k
"ammde"

List 列表

list 列表常用于 队列的操作。【消息队列】

  • 实际上是一个链表
  • 如果 key 不存在,就创建新的链表
  • 如果 key 存在,就添加值
  • 移除了所有值,也就不存在了
  • 两边插入或者改动值,效率最高高!对中间元素进行操作,效率就相对于低一些

mark

## 添加值(头部)################################################
# lpush 键 值 (一个值 或者 多个值)
127.0.0.1:6379> lpush k v1
(integer) 1
127.0.0.1:6379> lpush k v2
(integer) 2
127.0.0.1:6379> lpush k v3
(integer) 3
127.0.0.1:6379> LPUSH k v4 v5
(integer) 5
127.0.0.1:6379>

## 添加值(尾部)################################################
# rpush 键 值 (一个值 或者 多个值)
127.0.0.1:6379> rpush k v6
(integer) 6

## 查看值(批量) ################################################
# lrange 键 start end
127.0.0.1:6379> lrange k 0 -1
1) "v5"
2) "v4"
3) "v3"
4) "v2"
5) "v1"
6) "v6"
127.0.0.1:6379> lrange k 0 1
1) "v5"
2) "v4"

## 查看值(单个索引) ################################################
# lindex 键 索引 
127.0.0.1:6379> lindex k 1
"v4"

## 删除值(头部)################################################
# lpop 键 [timeout] 删除值 并 返回
127.0.0.1:6379> lpop k
"v5"

## 删除值 (尾部) ################################################
# rpop 键 [timeout] 删除值 并 返回
127.0.0.1:6379> rpop k
"v6"

## 获取长度 ################################################
127.0.0.1:6379> llen k
(integer) 4

## 移除指定值 ################################################
# lrem 键 数量 值(移除多个数量时,是移除相同值)
127.0.0.1:6379> lrem k 1 v1
(integer) 1

## 修剪 ################################################
# ltrim 键 0 1(修剪后,原来数据列表数据被改变)
127.0.0.1:6379> ltrim k 0 1
OK
(integer) 1

## 修改值(替换值) ################################################
# 指定下标,替换值
127.0.0.1:6379> lrange k 0 -1
1) "v4"
2) "v3"
127.0.0.1:6379> lset k 3 v2 # 修改值
(error) ERR index out of range # 超出索引
127.0.0.1:6379> lset k 1 v2 # 修改值
OK
127.0.0.1:6379> lrange k 0 -1
1) "v4"
2) "v2"

## 插入值 ################################################
# linsert 键 before|after 值 插入值(某个值 之前|之后 添加)
127.0.0.1:6379> linsert k before v2 v3
(integer) 3
127.0.0.1:6379> lrange k 0 -1
1) "v4"
2) "v3"
3) "v2"
127.0.0.1:6379> linsert k after v2 v5
(integer) 4
127.0.0.1:6379> lrange k 0 -1
1) "v4"
2) "v3"
3) "v2"
4) "v5"
127.0.0.1:6379>

Set 集合

Set 里面的值,是无序不重复

mark

## 添加值 ################################################
127.0.0.1:6379> sadd k v1
(integer) 1
127.0.0.1:6379> sadd k v2
(integer) 1

## 查看所有值 ################################################
127.0.0.1:6379>smembers k
1) "v2"
2) "v1"

## 值是否存在 ################################################
127.0.0.1:6379> sismember k v5
(integer) 0
127.0.0.1:6379> sismember k v2
(integer) 1

## 获取 Set 集合元素个数 ################################################
127.0.0.1:6379> scard k
(integer) 2

## 移除元素 ################################################
127.0.0.1:6379> srem k v2
(integer) 1
127.0.0.1:6379> smembers k
1) "v1"

## 获取值(随机) ################################################
# srandmember k [count] Set无序不重复,所以是随机获取
127.0.0.1:6379> srandmember k
"v4"
127.0.0.1:6379> SRANDMEMBER k
"v3"
127.0.0.1:6379> SRANDMEMBER k
"v3"

## 删除值(随机) ################################################
# spop k [count]
127.0.0.1:6379> spop k
"v4"

## 移动值 ################################################
#SMOVE 源集合 目标集合 值(移动 Set1 元素 到 Set2)
127.0.0.1:6379> SMOVE k k1 v1
(integer) 1

使用技巧

交集,并集,差集

127.0.0.1:6379> sdiff k1 k2 # 差集
1) "v1"
127.0.0.1:6379>
127.0.0.1:6379> sinter k1 k2 # 交集
(empty list or set)
127.0.0.1:6379> sunion k1 k2 # 并集
1) "v1"

Hash 哈希

存储形式(Key-Map集合)

  • Hash 更适用于经常变更的数据,尤其用户数据之类的.
  • Hash 适用于对象的存储(用户、姓名、性别)
  • String 更适用于字符的存储

mark

## 单个设置值 ################################################
127.0.0.1:6379> hset k hash1 value1
(integer) 1

## 批量设置值 ################################################
127.0.0.1:6379> HMSET k hash1 value1 hash2 value2
OK

## 查看所有 Hash ################################################
127.0.0.1:6379> hgetall k
1) "hash1"
2) "value1"
3) "hash2"
4) "value2"

## 删除 单个|多个 Hash ################################################
# hdel 键 Map键(可以多个)
127.0.0.1:6379> hdel k hash1
(integer) 1

## Hash 字段数量 ################################################
127.0.0.1:6379> hlen k
(integer) 1

## 某个 Hash 是否存在 ################################################
# 
127.0.0.1:6379> hexists k hash1
(integer) 0 # 不存在
127.0.0.1:6379> hexists k hash2
(integer) 1 # 存在
127.0.0.1:6379>

## 获取 Hash 所有 key & value ################################################
# 
127.0.0.1:6379> hkeys k
1) "hash2"
127.0.0.1:6379> hvals k
1) "value2"
127.0.0.1:6379>

## Hash 自增|自减 ################################################
127.0.0.1:6379> hset k hash 1
(integer) 1
127.0.0.1:6379> hincrby k hash 1 # 增加
(integer) 2 
127.0.0.1:6379> hincrby k hash -1 # 减少
(integer) 1

Zset 有序集合

Set 基础上,增加一个 顺序

mark

## 添加值 ################################################
# zadd 键 score 值
127.0.0.1:6379> zadd k 1 value1
(integer) 1
127.0.0.1:6379> zadd k 2 value2 3 value3
(integer) 2
127.0.0.1:6379>

## 排序 ################################################
127.0.0.1:6379> zadd k 55 value2 44 value3 11 value1
(integer) 3
127.0.0.1:6379> zrevrange k 0 -1 # 大 ~ 小
1) "value2"
2) "value3"
3) "value1"
127.0.0.1:6379> zrange k 0 -1 # 小 ~ 大
1) "value1"
2) "value3"
3) "value2"
127.0.0.1:6379>

## 通过 score段 排序 ################################################
# zrangebyscore 键 小值 大值 [withscores](小~大 排序)
127.0.0.1:6379> zadd k 55 value2 44 value3 11 value1
(integer) 3
127.0.0.1:6379> zrangebyscore k -inf +inf # 无穷小 无穷大
1) "value1"
2) "value3"
3) "value2"
127.0.0.1:6379> ZRANGEBYSCORE k -inf +inf withscores
1) "value1"
2) "11"
3) "value3"
4) "44"
5) "value2"
6) "55"
127.0.0.1:6379>

## 移除元素 ################################################
# zrem k member[可以多个]  通过 member段移除
127.0.0.1:6379> zrem k value1
(integer) 1
127.0.0.1:6379> zrange k 0 -1
1) "value3"
2) "value2"

## 获取元素个数 ################################################
127.0.0.1:6379> zcard k
(integer) 2

## 元素区间统计 ################################################
# zcount k min max
127.0.0.1:6379> zcount k 44 66
(integer) 2

使用技巧

  • 带权重元素的使用:1 重要消息,2 普通消息
  • 成绩表、工资表
  • 排行榜的实现
发表评论 / Comment

用心评论~