• Redis中以key-value的结构存储数据,其中key都是以string类型存储,一般讨论数据类型都是指的value的类型。官方文档

string

  • 数值增减操作
操 作 作 用
incr  key key 增加 1
incrby  key increment key 增加 increment
incrbyfloat  key increment key 增加 increment (float)
decr  key key 减少 1
decrby  key decrement key 减少 decrement
  • 应用场景
    数据库分库分表后可能出现的自增主键重复,可以用Redis来生成主键,由于Redis是单线程执行的,故可以保证高并发下主键生成的唯一性。

  • 单指令操作与多指令操作的选择
    1. 单指令set发送给Redis时间短,但要发送多次。
    2. 多指令mset发送时间稍长,但只需发送一次。
  • 数据时效性
操 作 作 用
setex  key seconds value 设置 key-value seconds 秒后失效
psetex  key milliseconds value 设置 key-value milliseconds 毫秒后失效
  • 应用场景
    电视节目投票有一定时间内投票次数的限制,若投一次票后将投票人id存在Redis中并设置失效时间,再投票时查询Redis是否有投票人信息即可做到限制投票次数。

hash

  • 一个key值对应一个哈希表,hash的结构是field-value

  • hash类型基本操作

操 作 作 用
hset  key field value 设置 key 值对应的 field-value
hget  key field 获取 key 值对应hashfieldvalue
hgetall  key 获取 key 值对应的所有 field-value
hdel  key field [field …] 删除 key 值对应hash中一个或多个 field
hlen  key 获取hashfield 的数量
  • 应用场景
    购物车中商品和数量可以作为一对 field-value,用户作为 keyhset 用于新增商品 hlen 用于获取购物车中商品数量,hgetall 用于全选,hdel 用于删除操作…

list

  • 一个 key 值对应一个 list,底层用双向链表实现。

  • list类型基本操作

操 作 作 用
lpush  key value [value …] key 值对应list左侧添加一个或多个 value
rpush  key value [value …] key 值对应list右侧添加一个或多个 value
lrange  key start stop 获取 key 值对应的list从索引 startstop 的所有值
lrange  key index 获取 key 值对应的list中索引为 index 的值
llen  key 获取 key 值对应list的长度
lpop  key 获取 key 值对应list左侧的第一个值并移除
rpop  key 获取 key 值对应list右侧的第一个值并移除
blpop  key [key …] timeout 阻塞获取一个或多个 key 值对应list左侧的第一个值并移除,最多阻塞 timeout
brpop  key [key …] timeout 阻塞获取一个或多个 key 值对应list右侧的第一个值并移除,最多阻塞 timeout
lrem  key count value 删除 key 值对应listcountvalue
  • 应用场景
    1. 朋友圈点赞可以用 rpush 将点赞用户加入list,查看点赞的朋友可以用 lrange 获取点赞名单,取消点赞可以用 lremlist中移除该用户…
    2. 多台服务器产生日志,可以将日志发送到Redis中,由于Redis是单线程的,故可以将日志按照提交的时间顺序展示出来。

set

  • 底层采用和hash一样的结构,但 value 值放在 hash field 的位置,hash value 的位置置为 nil(类似Java中的HashMapHashSet)。

  • set类型基本操作

操 作 作 用
sadd  key member [member …] key 值对应的set中添加一个或多个 member
smembers  key 获取 key 值对应set中所有的 member
srem  key member [member …] key 值对应的set中删除一个或多个 member
scard  key 获取 key 值对应的setmember 的数量
  • 应用场景
    1. 统计网站访问量,记录不同 cookie 数量、不同 ip 地址。
    2. 实现黑白名单,过滤黑名单中的用户、设备、ip
  • set类型操作随机数据
操 作 作 用
srandmember  key [count] key 值对应的set中随机获取 countmember
spop  key [count] key 值对应的set中随机获取 countmember 并移除
  • 应用场景
    从热点数据(热门歌单、热点新闻、热卖商品 …)中随机推荐一部分到用户首页,应用于随机推荐类信息检索。

  • set类型交并差操作

操 作 作 用
sinter  key [key …] 获取多个 key 对应的set的交集
sunion  key [key …] 获取多个 key 对应的set的并集
sdiff  key [key …] 获取多个 key 对应的set的差集
sinterstore  destination key [key …] 获取多个 key 对应的set的交集并存储到 destination
sunionstore  destination key [key …] 获取多个 key 对应的set的并集并存储到 destination
sdiffstore  destination key [key …] 获取多个 key 对应的set的差集并存储到 destination

图片加载失败

  • 应用场景
    获取共同好友、共同关注、共同群聊…还可以进行更深层次的关联搜索…

sorted_set

  • set的存储结构上增加可排序字段 score

  • sorted_set类型基本操作

操 作 作 用
zadd  key score member [score member …] key 值对应的sorted_set中添加一个或多个 score-member
zrange  key start stop [WITHSCORES] 获取 key 值对应sorted_set中按照 score 值从小到大排序的第 start 个到第 stopmember,可选参数 WITHSCORES 可以同时获取 score
zrevrange  key start stop [WITHSCORES] 获取 key 值对应sorted_set中按照 score 值从大到小排序的第 start 个到第 stopmember,可选参数 WITHSCORES 可以同时获取 score
zrem  key member [member …] key 值对应的sorted_set中移除一个或多个 member
zrangebyscore  key min max [WITHSCORES] [LIMIT offset count] 获取 key 值对应的sorted_setscoremin~max 范围内的 member,可选参数 LIMIT 用法与 MySQL一致
zrevrangebyscore  key max min [WITHSCORES] [LIMIT offset count] 作用类比 zrangebyscore(逆序)
zremrangebyrank  key start stop 删除 key 值对应sorted_set中按照 score 值从小到大排序的第 start 个到第 stopmember
zremrangebyscore  key min max 删除 key 值对应sorted_setscore 值在 min~max 范围内的 member
zcard  key 获取 key 值对应的sorted_setmember 的数量
zcount  key min max 获取 key 值对应sorted_setscore 值在 min~max 范围内 member 的数量
zrank  key member 获取 key 值对应sorted_setmember 的排序
zscore  key member 获取 key 值对应sorted_setmemberscore
zincrby  key increment member key 值对应sorted_setmemberscore 增加 increment
  • 应用场景
    1. 对于基于时间线的任务,可以采用sorted_set存储任务,并用 score 记录截止日期(时间戳),按照时间戳先后顺序执行任务。
    2. 对于带有权重的任务,可以用 score 记录权重,还可以通过对 score 做分段实现多个权重条件。