键都是字符串类型.
字符串类型的值实际可以是:
- 字符串
- 简单字符串
- 复杂字符串
- json
- xml
- 数字
- 整数
- 浮点数
- 二进制
- 图片
- 音频
- 视频
最大不能超过 512MB.
2.2.1 命令
1. 常用命令
(1) 设置值
- set
- setex
- setnx
- 可以用于分布式锁
(2) 获取值
- get
(3) 批量设置值
- mset
(4) 批量获取值
- mget
如果不用 mget, 那么需要 n 次 get 操作:
- n 次 get 时间 = n 次网络时间 + n 次命令时间
使用 mget:
- n 次 get 时间 = 1 次网络时间 + n 次命令时间
网络会成为性能瓶颈:
- 注意每次的命令数过多也会阻塞 Redis
(5) 计数
- incr
- decr
- incrby
- decrby
- incrbyfloat
2. 不常用命令
(1) 追加值
- append
给字符串值追加.
(2) 字符串长度
- strlen
(3) 设置并返回原值
- getset
(4) 设置指定位置的字符
- setrange
(5) 获取部分字符串
- getrange
2.2.2 内部编码
字符串类型的内部编码有3种:
- int: 8B
- embstr: 小于等于 39B 的字符串
- raw: 大于 39B 的字符串
2.2.3 典型使用场景
1. 缓存功能
键命名:
- 比较推荐的方式是使用 “业务名:对象名:id:[属性]” 作为键名(也可以不是分号)
2. 计数
实际上一个真实的计数系统要考虑的问题会很多:防作弊、按照不同维度计数,数据持久化到底层数据源等。
3. 共享 Session
可能由于负载均衡, 当用户刷新页面后需要重新登录:
用 Redis 将用户 Session 进行集中管理:
4. 限速
利用超时机制实现: