前言
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件; 下面就了解的应用场景及其原理做个总结:
String类型
介绍
存储字符串类型的key-value
常用命令及应用场景
常见命令 | 命令介绍 | 应用场景 | 例 |
---|---|---|---|
set/get/setex | 存储字符串类型的key-value | 验证码、幂等性(重复提交判断)、token令牌、 序列化json对象存储 | set user:captcha:zhangsan 123456 ex 30/setex user:captcha:zhangsan 30 123456 (张三收到验证码为123456,30s后失效),set user:zhangsan 用户信息json串(用户张三的个人信息) |
mset/mget | 批量设置key-value | 同set/get | mset user:name zhangsan user:age 20 (用户姓名为张三,年龄20) |
incr | 对key对应的值进行加1操作,并返回新值 | 统计、计数器、发号器 | incr article:123:reading(对id为123的文章阅读量增加1) |
incrby | 对key对应的值进行加increment操作,并返回新值 | 同incr | incr article:123:reading 10(对id为123的文章阅读量增加10) |
setnx | key如果存在则返回0,不存在则返回1 | 分布式锁 | setnx addr 123(设置地址为123) |
getset | 设置key的值,并返回key的旧值 | 状态变更(比如用户下单,可以修改下单状态) | getset addr 567(注意:返回为旧值123) |
原理
Redis的字符串是动态字符串,是可以修改的字符串,它的内部表示就是一个字符数组,内部结构的实现类似于Java的ArrayList,它的内部结构是一个带长度信息的字节数组
注意
- 值的长度不能超过512MB
- key的命名规范,不要过长,冒号分割, 业务名:表名:ID
List
介绍
- 字符串列表,按照插入顺序排序
常用命令及应用场景
常见命令 | 命令介绍 | 应用场景 | 例 |
---|---|---|---|
lpush/rpush | 将一个或多个值插入到列表头部(左边)/(右边) | 最新评论列表/非实时榜 |