说明
中文文档: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
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 存在,就添加值
- 移除了所有值,也就不存在了
- 两边插入或者改动值,效率最高高!对中间元素进行操作,效率就相对于低一些
## 添加值(头部)################################################ # 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 里面的值,是
无序不重复
的
## 添加值 ################################################ 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
更适用于字符的存储
## 单个设置值 ################################################ 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
基础上,增加一个顺序
段
## 添加值 ################################################ # 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 普通消息
- 成绩表、工资表
- 排行榜的实现
版权声明:《 【Redis】五大基本类型 》为明妃原创文章,转载请注明出处!
最后编辑:2022-1-23 14:01:04