存储的数据 单个数据,最常见的数据类型
存储数据的格式 一个存储空间保存一个数据
存储的内容 通常是字符串,或者一整串数字
最大的存储容量 512M

采用预分配冗余空间的方式来减少内存的频繁分配,当字符串长度小于1M时,扩容都是加倍现有的空间;如果长度大于1M,会将原有的空间不断添加1M容量,直到能存放该数据且Value小于512M。例如,原有数据name为300kb,修改后为800kb,Redis会将原有的300kb空间不断翻倍,直到900kb时将数据存放;若修改后为10M,会将原有的300kb空间不断增加1M,直到10.3M时将数据存放。

基本命令

添加&修改数据

  1. set key value

获取数据

  1. get key

删除数据

  1. del key

存放&修改多个数据

  1. mset key1 value1 key2 value2 ...

获取多个数据

  1. mget key1 key2 ....

追加信息

不存在该key就创建,存在就追加

  1. append key value

注:如果要设置多个key的value,使用mset可以极大缩短执行过程时间。

拓展命令

自增数据

  1. incr key //自增1
  2. incrby key size //指定自增大小(整数)
  3. incrbyfloat key size //指定自增大小(float)

如果原始数据不能被Redis转换为数值,或者数值超过了Redis最大值(java中的Long.MAX_VALUE,具体数值是9223372036854775807),自增将会报错。如果原数据已经是个float,使用自减也会报错,自减只能处理整数。

指定有效期

  1. setex key seconds values //指定有效时间(秒)
  2. psetex key milliseconds values //指定有效时间(毫秒)

不覆盖的创建数据

setnx命令的本质是set if not exists

  1. setnx key value

使用案例

存储粉丝数、投稿数等数值类型的数据

命名规范一般有两种:

  1. 一般为“表明:主键名:主键值:字段名”作为key,值就是value;
  2. key为“表名:字段名”值是json;

    有次数的使用

    例如,迅雷会员体验、百度企业级翻译API、Bilibili漫画抵扣券等有次数或短时间(秒级)限制的数据。用户ID作为key,体验次数为value,到期或者次数归0时进行提示。也可以使用zset+time类型进行落地实现,这里以string为例:
    1. setex testVip 60 user:01 //设置60秒体验会员
    2. set uid:00415 9223372036854775797 //设置10次体验
    1. incr uid:00415 //每次使用进行自增,直到10次后达到最大值
    注:利用value达到Long.MAX_VALUE,Redis会报错的机制实现体验限制,避免每次使用都需判断的校验。