Redis内部存储的数据为键值对,键的数据类型都是字符串类型,这里说的数据类型是指值的类型。
String(字符串)
使用场景:
- 存储json类型对象
- 作为计数器,例如点赞数,粉丝数
追加字符串,如果当前key不存在就相当于新建
1 | append name 666 |
获取字符串长度
1 | strlen name |
增加减少
1 | 127.0.0.1:6379> set views 1 |
截取字符串
1 | 127.0.0.1:6379> get demo |
替换
1 | 127.0.0.1:6379> get demo |
设置键值对的时候指定有效期
1 | setex key1 10 "hello" # 设置key1的值为hello,10秒后过期 |
如果key不存在就创建
1 | setnx key2 "hello2" |
批量设置
1 | 127.0.0.1:6379> mset k1 v1 k2 v1 k3 v3 |
设置对象 user:{id}.{filed}
1 | 127.0.0.1:6379> mset user:1:name zyz user:1:age 21 |
先get后set
1 | 127.0.0.1:6379> getset name zyz # key值不存在,先返回nil,再设置 |
List(列表)
是一个双向链表结构,可以用来存储一组数据;从这个列表的前端和后端取数据效率非常高。
使用场景:
- 模拟队列,堆栈
- 朋友圈点赞,查询点赞数,点赞人的信息等
插入
1 | 127.0.0.1:6379> lpush list 1 # 相当于压栈,操作第一个元素 |
删除
1 | 127.0.0.1:6379> lrange list 0 -1 |
获取值
1 | 127.0.0.1:6379> lindex list 0 |
查询list长度
1 | 127.0.0.1:6379> llen list |
根据指定的值删除
1 | 127.0.0.1:6379> lrange list 0 -1 |
截取元素
1 | 127.0.0.1:6379> lrange list 0 -1 |
将原列表的最后一个元素移到新的列表中
1 | 127.0.0.1:6379> lrange list 0 -1 |
更新值,需要先判断list是否存在
1 | 127.0.0.1:6379> exists list |
从指定元素值前面/后面插入
1 | 127.0.0.1:6379> lrange list 0 -1 |
List实际上是一个双向链表,前后都可以插入值;key不存在创建新的节点,key存在,新增内容;两边插入或改动效率最高。
消息队列(Lpush,Rpop),栈(Lpush,Lpop)
Set(集合)
值不可重复,值则相同添加失败。
使用场景:
- 去重
- 抽奖
- set运算,交集并集补集差集运算,例如好友推荐
添加值、查看所有值、判断值是否存在
1 | 127.0.0.1:6379> sadd myset aaa |
移除指定值的元素
1 | 127.0.0.1:6379> smembers myset |
随机挑选元素
1 | 127.0.0.1:6379> smembers myset |
随机删除
1 | spop myset |
移动指定元素
1 | 127.0.0.1:6379> smembers myset |
差集,交集,并集==>应用场景:B站,微博的共同关注等等
1 | 127.0.0.1:6379> sadd myset a |
Zset(有序集合)
可排序的set,每一个添加值都有一个对应的分数,可通过这个分数进行排序
使用场景:
- 海量数据的排行,例如天梯排名
添加
1 | 127.0.0.1:6379> zadd myzset 1 value1 |
排序
1 | 127.0.0.1:6379> zrangebyscore myzset -inf +inf # 最小值到最大值排序 |
移除元素
1 | zrem myzset value1 |
获取个数
1 | zcard myzset |
获取指定区间的成员数量
1 | zcount myzset 1 3 |
Hash(哈希)
可以理解为Map集合,key-map,值是一个Map集合
使用场景:
- 与String+json相比,存储对象的属性需要频繁修改时,使用Hash,可以针对某个属性单独修改,没有序列化,也不需要修改整个对象。
1 | 127.0.0.1:6379> hset myhash field1 aaa # 添加一个值 |
获取长度
1 | hlen myhash |
判断字段是否存在
1 | 127.0.0.1:6379> hexists myhash field1 |
获取所有字段/值
1 | 127.0.0.1:6379> hkeys myhash |
自增,自减
1 | hincrby myhash field1 1 |