字符串
值最大不能超过512MB。
使用场景
1.缓存功能
通过设置合理的键值,如 业务名:对象名:id:[属性]”作为键名(也可以不是分号)。
2.计数
incr命令用于对值做自增操作,返回结果分为三种情况
- 值不是整数,返回错误。
- 值是整数,返回自增后的结果。
- 键不存在,按照值为0自增,返回结果
除了decr(自减)、incrby(自增指定数字)、decrby(自减指定数字)、incrbyfloat(自增浮点数)
因为Redis是单线程架构,任何命令到了Redis服务端都要顺序执行,所以并不存在并发问题;
3.限速
限制操作次数,如获取验证码,限制一分钟获取一次,可以通过在redis中设置set nx ex来判断是否可以重新获取;
哈希
列表
- 列表中的元素是有序的,这就意味着可以通过索引下标获取某个元素或者某个范围内的元素列表
- 列表中的元素可以是重复的
使用场景
1.消息队列
如图所示,Redis的lpush+brpop命令组合即可实现阻塞队列,生产者客户端使用lrpush从列表左侧插入元素,多个消费者客户端使用brpop命令阻塞式的“抢”列表尾部的元素,多个客户端保证了消费的负载均衡和高可用(brpop阻塞命令并不会影响其他客户端的正常使用)
2.文章列表
可以通过lrange来分页获取,列表保存hash或者字符串类型的键值;
3.数据结构
- lpush+lpop=Stack(栈)
- lpush+rpop=Queue(队列)
- lpsh+ltrim=Capped Collection(有限集合)
- lpush+brpop=Message Queue(消息队列)
集合
集合(set)类型也是用来保存多个的字符串元素,但和列表类型不一样的是,集合中不允许有重复元素
,并且集合中的元素是无序
的,不能通过索引下标获取元素。
Redis除了支持集合内的增删改查,随机获取元素和随机pop元素,同时还支持多个集合取交集、并集、差集
使用场景
1.标签功能
(1)给用户添加标
sadd user:1:tags tag1 tag2 tag5
sadd user:2:tags tag2 tag3 tag5...
sadd user:k:tags tag1 tag2 tag4...
(2)给标签添加用户
sadd tag1:users user:1 user:3
sadd tag2:users user:1 user:2 user:3...
sadd tagk:users user:1 user:2.
- sadd=Tagging(标签)
- spop/srandmember=Random item(生成随机数,比如抽奖)
- sadd+sinter=Social Graph(社交需求)
有序集合
它保留了集合不能有重复成员
的特性,但有序集合中的元素可以排序
。但是它和列表使用索引下标作为排序依据不同的是,它给每个元素设置一个分数(score)
作为排序的依据(每次添加新元素都必须带有一个float类型的分数)
除了增删查改,可以获取有序集合中的排行信息,包括全部,部分范围(名词范围,分数范围)的排行信息,单个的排行信息,集合间的交集,并集,并且在计算的过程中可以带权值(计算的分数=分数*权值),并且有sum,min,max操作,即在交并得过程中,最后结果是取sum还是 min,max;
使用场景
1、添加用户赞数
主要使用zincrby 命令来+1,有序集合最主要的还是他的排行功能和分数范围搜索功能;