参考自《Redis开发与运维》
简介
字符串是Redis最基础的数据结构,键都是字符串类型,而其他几种数据结构都是建立在字符串基础上。
字符串类型的值实际上可以是字符串(简单字符串或复杂字符串JSON/XML等等),数字,二进制,值最大不能超过512MB
字符串命令
命令 | 命令描述 |
|
|
| 作用和 |
| 作用和 |
| 获取值 |
| 批量设置值 |
| 批量获取值,按传入键的顺序返回,有些键不存在,返回nil |
| 计数,自增操作,值不为整数,返回错误,值是整数,返回自增的结果,key不存在,按照值为0递增,返回1 |
| 自增,自减,增加指定值,减少指定值,增加指定浮点数 |
| 向字符串尾部追加值 |
| 设置并返回原值 |
批量操作可以有效提高开发效率,执行命令的时间包括命令发送时间(受网络影响)+服务端运行命令时间,批量操作只需一次命令发送时间,否则要N次命令发送时间,而且一般来说命令发送时间大于服务端命令执行时间,而且网络不好的话,发送时间更长,同时注意每次批量操作发送的命令不是无节制的,如果数量过多可能造成Redis阻塞或网络拥塞。因为Redis处理能力已经很高了,对于开发人员来说,网络可能成功性能的瓶颈
setnx
和setxx
应用场景:setnx
可以作为分布式锁的一种实现方案,因为Redis是单线程命令处理机制,如果多个客户端同时执行setnx key value
,那么只有一个客户端能设置成功
字符串内部编码
字符串类型的内部编码有三种:
int:8个字节的长整型
embstr:小于等于39字节的字符串
raw:大于39字节的字符串
Redis会根据当前值的类型和长度决定使用哪种内部编码实现
字符串的典型使用场景
- 缓存功能
Redis作为缓存层,MySQL作为存储层,绝大部分请求的数据都是从Redis中获取。由于Redis具有支撑高并发的特性,所以缓存通常能起到加速读写和降低后端压力的作用。
PS.Redis合理键名设置:业务名:对象名:id:[属性] - 计数
Redis可以实现快速计数、查询缓存的功能,同时数据可以异步落地到其他数据源。 - 共享Session
一个分布式Web服务将用户的Session信息保存到各自的服务器上,处于负载均衡的考虑,分布式服务会将用户的访问均衡到不同的服务器上,用户刷新一次访问可能会发现需要重新登录,为了解决这个问题,可以用Redis将用户的Session进行集中管理,每次用户更新或者查询登录信息都直接从Redis中集中获取,只要保证Redis是高可用和可扩展的就行 - 限速
许多应用出于安全的考虑,会在每次进行登录时,让用户输入手机验证码,从而确定是否是用户本人。但是为了短信接口不被频繁访问,会限制用户每分钟获取验证码的频率,此功能可以用Redis实现,使用set ex nx
和incr自增验证码获取次数。
其他限速功能也可以类似实现,限制一个IP地址不能在一秒钟内访问超过N次等等,充分利用字符串提供的命令