存储的数据 | 单个数据,最常见的数据类型 |
---|---|
存储数据的格式 | 一个存储空间保存一个数据 |
存储的内容 | 通常是字符串,或者一整串数字 |
最大的存储容量 | 512M |
采用预分配冗余空间的方式来减少内存的频繁分配,当字符串长度小于1M时,扩容都是加倍现有的空间;如果长度大于1M,会将原有的空间不断添加1M容量,直到能存放该数据且Value小于512M。例如,原有数据name为300kb,修改后为800kb,Redis会将原有的300kb空间不断翻倍,直到900kb时将数据存放;若修改后为10M,会将原有的300kb空间不断增加1M,直到10.3M时将数据存放。
基本命令
添加&修改数据
set key value
获取数据
get key
删除数据
del key
存放&修改多个数据
mset key1 value1 key2 value2 ...
获取多个数据
mget key1 key2 ....
追加信息
不存在该key就创建,存在就追加
append key value
注:如果要设置多个key的value,使用mset可以极大缩短执行过程时间。
拓展命令
自增数据
incr key //自增1
incrby key size //指定自增大小(整数)
incrbyfloat key size //指定自增大小(float)
如果原始数据不能被Redis转换为数值,或者数值超过了Redis最大值(java中的Long.MAX_VALUE,具体数值是9223372036854775807),自增将会报错。如果原数据已经是个float,使用自减也会报错,自减只能处理整数。
指定有效期
setex key seconds values //指定有效时间(秒)
psetex key milliseconds values //指定有效时间(毫秒)
不覆盖的创建数据
setnx命令的本质是set if not exists
setnx key value
使用案例
存储粉丝数、投稿数等数值类型的数据
命名规范一般有两种:
- 一般为“表明:主键名:主键值:字段名”作为key,值就是value;
- key为“表名:字段名”值是json;
有次数的使用
例如,迅雷会员体验、百度企业级翻译API、Bilibili漫画抵扣券等有次数或短时间(秒级)限制的数据。用户ID作为key,体验次数为value,到期或者次数归0时进行提示。也可以使用zset+time类型进行落地实现,这里以string为例:setex testVip 60 user:01 //设置60秒体验会员
set uid:00415 9223372036854775797 //设置10次体验
注:利用value达到Long.MAX_VALUE,Redis会报错的机制实现体验限制,避免每次使用都需判断的校验。incr uid:00415 //每次使用进行自增,直到10次后达到最大值