1.Redis String 字符串
Redis Strings存储字节序列,包括文本、序列化对象和二进制数组。因此,字符串是最基本的 Redis 数据类型。它们通常用于缓存,但它们支持额外的功能,也可以实现计数器并执行按位操作。
限制:Redis字符串最大为512MB
基本使用
- set key value - 存储一个字符串值 - 例如:SET mykey “Hello” - 注意set操作会替换已经存在的健的值
- setnx key value - 仅当键不存在时才储存值,通常用于实现锁
- get key - 用于检索字符值 - 例如:GET mykey,将返回"Hello"。
- append key value - 在现有键值的末尾追加字符串。- 例如,键mykey的值为"Hello",执行append mykey " World"后,mykey的值变为"Hello World"。
- mget key1 key2 … - 单次操作中检索多个字符值,返回以字符串列表
- incr/decr - 对存储的整数值进行原子性的自增和自减操作。例如,SET counter 5,然后INCR counter会使counter的值变为 6,DECR counter会使它变为 4。
- incrby/decrby step - 对存储数字的字符串键进行按指定步长自增/自减操作。与incr/decr类似但可以指定步长
- set中使用 set key value nx 则只有键不存在时才写入
- 而 set key value xx 则表示只有键存在时写入
2.Redis List 列表
Redis的List是一个字符串链表,通常被用于实现堆和栈,以及为后端服务实现消息队列。
基本操作
- lpush/rpush lkey v1 二 - 将值添加到列表的表头/表尾
- lpop/rpop lkey - 从列表的表头/表尾移除一个值并返回
- brpop/plpop key time - 阻塞列表,当列表为空时阻塞,直到列表中有新的数据插入或者超过实效会返回
- llen lkey - 返回列表的长度
- LMOVE source destination <LEFT | RIGHT> <LEFT | RIGHT>- 将一个列表中的元素移动到另一个列表(6.2.0版本以上你可以使用,以下可以使用pop push替代实现)
- lrange lkey first end - 从列表中获取指定范围的数据
- ltrim - 将列表缩减到指定的元素范围
- linsert key BEFORE|AFTER pivot value - 在指令列表的指定元素前/后插入值
- 特点
- Redis的List是基于链表实现的,这就意味着他可以在O(1)的时间下对数据进行插入和获取,但同时也意味着在需要通过下标访问的情况下其效率久较为低下,如果需要频繁使用下标访问可以使用redis提供的另外一个类型Sorted set。
- Redis会自动创建与删除空列表。
应用
Redis列表的常用场景:
拥有保存用户最新常上传的信息
用于不同进程之间的通信,例如实现 消费者-生产者 模型
限制列表,通过ltrim和lpush可以实现列表中只存在最新上传的n和数据
阻塞列表,通过brpop.blpop实现阻列表,当列表中没有数据时阻塞请求,等有数据输入或者请求过期时返回
3. Redis Set 集合
Redis set是一个无序的不重复的元素集合。
基本用法
- sadd sname value - 向集合添加元素
- spop sname - 随机删除一个元素
- srem sname key - 移除指定元素
- sismember sname key - 查看元素是否在集合中
- smismember sname key1 key2 - 查看多个元素是否在集合中
- scard - 返回集合长度
- srandmember - 随机选取集合元素,并不删除
- smembers - 查看集合所有元素
- sdiff set1 set2 - 差集
- sinter set1 set2 - 交集
- sunion set1 set2 - 并集
- sscan key cursor [MATCH pattern] [COUNT count] - cursor:
- sscan参数
- key:要进行迭代扫描的集合键名。
- cursor:游标,它是一个整数值,用于标识迭代的位置。第一次调用sscan时,cursor应该设置为 0。
- MATCH pattern(可选):用于指定一个模式,只有匹配该模式的元素才会被返回。这个模式遵循与KEYS命令中相同的通配符规则,例如*表示任意字符序列,?表示单个任意字符。
- COUNT count(可选):用于指定每次迭代要返回的元素数量的上限,但实际返回的元素数量可能小于这个值。
特点
大部分操作例如sadd,srem操作的时间开销时O(1)
当集合元素巨大时应当谨慎使用smember因为他的时间开销是O(n),并且会一次返回所有元素,最好的方法是使用sscan使用迭代的方式获取。
4. Redis Hashes 哈希
Redis哈希是由字段值对组成的记录类型。可以使用散列来表示基本对象和存储计数器分组等。
限制:哈希最多可以创建4,294,967,295个键值对
基本用法
- hset key k1 v1 k2 v2… - 设置值
- hget key k1 k2 … - 获取值
- hgetall - 获取所有key
- hvals key - 获取指定哈希所有值
- hsetnx key k1 v1 k2 v2 … - 设置值时若存在则不添加
- hmget key - 以列表的形式返回所有值
- hincrby/hdescby - 以制定的步长自增自减
- hexpire - 设置剩余生命周期(ttl)单位为秒
- hpexpire - 设置剩余生命周期(ttl)单位为分
- hexpireat - 将过期事件设置为以秒为单位的时间戳
- hpexpireat - 将过期事件设置为以毫秒为单位的时间戳
- hexpiretime - 获取以秒为单位的过期时间戳
- hpexpietime- 获取以毫秒秒为单位的过期时间戳
- hpersist - 删除过期时间
应用场景
事件追踪 - 使用hashkey记录过去时间发生的时间,并将事件的生命周期设置为一小时,便可记录过去一小时发生的事件
会话管理 - 为每个会话创建过期时间,当到期时取消授权或更新签证
5.Redis Sorted Set
Redis排序集是由一个相关分数排序的唯一字符串(成员)的集合。当多个字符串具有相同的分数时,这些字符串按字典顺序排序。
基本用法
- zadd setname m1 v1 m2 v2. - 向有序集合中插入值和对应的分数
- zrange setname start end - 根据索引返回值
- zrangebyscore setname start end - 按照分数从小到大获取指定分数范围内的元素
- zrevrangebyscore setname start end - 按照分数从大到小获取指定分数范围内的元素
- zranke setname m - 按照分数从小到大获取元素的排名
- zrevranke setname m - 按照分数从大到小获取元素的排名
- zscore key member - 获取元素在有序列表中的值
- zincrby/zdescby key increment member - 将有序列表中的成员值增加/减少指定值
- zrem key m1 m2 - 删除有序列表中的指定成员