Redis是一个用ANSC C语言编写的K-V型数据库
Key的类型是字符串
Value的类型有string, list, set, sortedset(zset)有序集合类型, hash类型, 以及bitmap, geo地理位置类型, 还有Redis5.0新增加的stream类型.
Tips: Redis中命令忽略大小写, 而key不忽略.

String数据类型

String类型能表达三种值类型: 字符串, 整数, 浮点数.

命令名称 语法 描述
set set key value 赋值
get get key 取值
getset getset key value 取值并赋值
setnx setnx key value 不存在则赋值, setnx key value NX PX 300 原子操作, px设置秒数
append append key value 向尾部追加值
strlen strlen key 获取字符串长度
incr incr key 递增数字
incrby incrby key increment 增加指定的整数
decr decr key 递减数字
decrby decrby key decrement 减少指定的整数

一般应用于:

  1. key和命令是字符串
  2. 普通的赋值
  3. incr用于乐观锁: 递增数字, 可用于实现乐观锁(事务)
  4. setnx用于分布式锁: value不存在时赋值, 可用于实现分布式锁

    List列表类型

    list列表主要可以存储有序, 重复的元素. 在头部or尾部有较高的查询速度. list元素最多为2^32-1个(40亿)
命令名称 语法 描述
lpush lpush key v1 v2 v3 .. 从左侧插入列表
lpop lpop key 从列表左侧取出
rpush rpush key v1 v2 v3 … 从右侧插入列表
rpop rpop key 从列表右侧取出
lpushx lpushx key value 将值插入列表头部
rpushx rpushx key value 将值插入列表尾部
blpop blpop key timeout 从列表左侧取出, 列表为空则阻塞, 可以设置最大阻塞时间, 单位为秒
brpop brpop key timeout 从列表右侧取出, 列表为空则阻塞, 可以设置最大阻塞时间, 单位为秒
llen llen key 获取列表中元素个数
lindex lindex key value 获取列表中下表为key的元素个数
lrange lrange key start end 返回列表中指定区间元素, 区间通过start和end指定
lrem lrem key count value 删除列表中与value相等的元素, count>0时, lrem会从列表左边开始删除. count<0时, lrem会从列表尾部开始删除. count=0时, lrem删除所有值为value的元素
lset lset key index value 将列表index位置的元素设置成value的值
ltrim ltrim key start end 对列表进行修剪,只保留start到end区间
rpoplpush rpoplpush key1 key2 从key1列表右侧弹出并插入到key2列表左侧
brpoplpush brpoplpush key1 key2 从key1列表右侧弹出并插入到key2列表左侧, 会阻塞
linsert linsert key BEFORE/AFTER pivot value 将value插入到列表, 且位于值pivot之前或之后

一般应用于

  1. 因为有序而作为栈/队列使用
  2. 用于各种列表, 商品列表/用户列表/评论列表

    Set集合类型

    无序、唯一的元素, 集合中最大成员数为2^32 - 1
命令名称 语法 描述
sadd sadd key mem1 mem2 …. 为集合添加新成员
srem srem key mem1 mem2 …. 删除集合中指定成员
smembers smembers key 获得集合中所有元素
spop spop key 返回集合中一个随机元素,并将该元素删除
srandmember srandmember key 返回集合中一个随机元素,不会删除该元素
scard scard key 获得集合中元素的数量
sismember sismember key member 判断元素是否在集合内
sinter sinter key1 key2 key3 求多集合的交集
sdiff sdiff key1 key2 key3 求多集合的差集
sunion sunion key1 key2 key3 求多集合的并集