文章目录

StringListHashSetSorted SetBitmap

String

字符串(String):可以存储任意类型的数据,比如字符串、整数、浮点数等。

Redis中String数据类型的常用命令包括:

设置值:SET key value,设置键key的值为value。获取值:GET key,获取键key的值。获取值的长度:STRLEN key,获取键key的值的长度。追加值:APPEND key value,将值value追加到键key的值的末尾。自增:INCR key,将键key的值加1。自减:DECR key,将键key的值减1。自增指定值:INCRBY key increment,将键key的值增加指定的increment值。自减指定值:DECRBY key decrement,将键key的值减少指定的decrement值。设置过期时间:EXPIRE key seconds,为键key设置过期时间,单位为秒。删除键:DEL key,删除指定的键key。

应用场景: 一般常用在需要计数的场景,比如用户的访问次数、热点文章的点赞转发数量等等。

List

列表(List):按照插入顺序存储一组有序的元素,元素可以重复。可以执行从列表头部或尾部插入、删除、修剪等操作。

Redis中List数据类型的常用命令包括:

左边插入元素:LPUSH key value1 [value2 ...],将一个或多个值插入到列表key的左边。右边插入元素:RPUSH key value1 [value2 ...],将一个或多个值插入到列表key的右边。获取指定范围的元素:LRANGE key start stop,获取列表key中指定范围内的元素。获取列表长度:LLEN key,获取列表key的长度。弹出左边第一个元素:LPOP key,从列表key的左边弹出并返回第一个元素。弹出右边第一个元素:RPOP key,从列表key的右边弹出并返回第一个元素。在指定元素前或后插入元素:LINSERT key BEFORE|AFTER pivot value,在列表key中,在元素pivot前或后插入新元素value。根据索引设置元素值:LSET key index value,将列表key中索引位置的元素设置为value。根据索引获取元素值:LINDEX key index,获取列表key中索引位置的元素值。截取列表:LTRIM key start stop,保留列表key中指定范围内的元素,其他元素删除。

应用场景: 发布与订阅或者说消息队列、慢查询。

Hash

存储键值对的无序集合,适合存储对象的属性。可以对单个哈希键执行设置、获取、删除操作,也可以对整个哈希执行获取全部键值对等操作。

Redis中Hash数据类型的常用命令包括:

设置字段值:HSET key field value,设置哈希表 key 中字段 field 的值为 value。获取字段值:HGET key field,获取哈希表 key 中字段 field 的值。批量设置字段值:HMSET key field1 value1 [field2 value2 ...],同时设置多个字段的值。批量获取字段值:HMGET key field1 [field2 ...],同时获取多个字段的值。获取所有字段和值:HGETALL key,获取哈希表 key 中的所有字段和值。判断字段是否存在:HEXISTS key field,判断哈希表 key 中是否存在字段 field。删除字段:HDEL key field1 [field2 ...],删除哈希表 key 中的一个或多个字段。获取字段数量:HLEN key,获取哈希表 key 中字段的数量。获取所有字段:HKEYS key,获取哈希表 key 中的所有字段。获取所有值:HVALS key,获取哈希表 key 中的所有值。

应用场景: 系统中对象数据的存储。

Set

集合(Set):存储唯一、无序的元素集合,不允许重复。可以对集合进行添加、删除、查找、交集、并集等操作。

Redis中Set数据类型的常用命令包括:

添加一个或多个元素:SADD key member1 [member2 ...],向集合key中添加一个或多个元素。获取集合中的所有成员:SMEMBERS key,获取集合key中的所有成员。判断元素是否属于集合:SISMEMBER key member,判断元素member是否是集合key的成员。获取集合的基数(元素数量):SCARD key,获取集合key的基数。移除一个或多个元素:SREM key member1 [member2 ...],从集合key中移除一个或多个元素。返回并移除集合中的一个随机元素:SPOP key,从集合key中随机移除并返回一个元素。返回集合中的一个随机元素:SRANDMEMBER key [count],从集合key中返回一个或多个随机元素。计算多个集合的交集:SINTER key1 [key2 ...],计算给定多个集合的交集。计算多个集合的并集:SUNION key1 [key2 ...],计算给定多个集合的并集。计算多个集合的差集:SDIFF key1 [key2 ...],计算给定多个集合的差集。

应用场景: 需要存放的数据不能重复以及需要获取多个数据源交集和并集等场景。

Sorted Set

有序集合(Sorted Set):存储唯一、有序的元素集合,每个元素都关联一个分数,用于根据分数排序。可以对有序集进行添加、删除、查找、按照分数范围获取等操作。

Redis中有序集合(Sorted Set)数据类型的常用命令包括:

添加一个或多个成员:ZADD key score1 member1 [score2 member2 ...],向有序集合key中添加一个或多个成员,每个成员都关联一个分数进行排序。获取有序集合的成员数量:ZCARD key,获取有序集合key的成员数量。获取指定成员的分数:ZSCORE key member,获取有序集合key中指定成员的分数。增加指定成员的分数:ZINCRBY key increment member,将有序集合key中指定成员的分数增加increment。获取有序集合的指定区间的成员:ZRANGE key start stop [WITHSCORES],按索引区间获取有序集合key的成员,可选择同时返回成员的分数。获取有序集合的指定分数范围的成员:ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count],按分数范围获取有序集合key的成员,可选择同时返回成员的分数,并可设置偏移量和数量。移除一个或多个成员:ZREM key member1 [member2 ...],从有序集合key中移除一个或多个成员。计算有序集合指定区间内的成员数量:ZCOUNT key min max,计算有序集合key在指定分数范围内的成员数量。获取有序集合中指定成员的排名:ZRANK key member,获取有序集合key中指定成员的排名,按分数从小到大排序,排名从0开始。获取有序集合中指定成员的分数值:ZREVRANK key member,获取有序集合key中指定成员的分数值,按分数从大到小排序,排名从0开始。

应用场景: 需要对数据根据某个权重进行排序的场景。比如在直播系统中,实时排行信息包含直播间在线用户列表,各种礼物排行榜,弹幕消息(可以理解为按消息维度的消息排行榜)等信息。

Bitmap

Bitmap 存储的是连续的二进制数字(0 和 1),通过 bitmap, 只需要一个 bit 位来表示某个元素对应的值或者状态,key 就是对应元素本身 。我们知道 8 个 bit 可以组成一个 byte,所以 bitmap 本身会极大的节省储存空间。

Redis中位图(Bitmap)数据类型的常用命令包括:

设置指定偏移量上的位值:SETBIT key offset value,设置位图key中指定偏移量上的位值为value(0或1)。获取指定偏移量上的位值:GETBIT key offset,获取位图key中指定偏移量上的位值。统计位图中值为1的位的数量:BITCOUNT key [start end],统计位图key中指定范围内(闭区间)的值为1的位的数量。

若不指定范围,则统计整个位图中值为1的位的数量。 对一个或多个位图执行逻辑与(AND)操作并存储结果:BITOP AND destkey key [key ...],对指定的一个或多个位图key执行逻辑与操作,并将结果存储到destkey中。对一个或多个位图执行逻辑或(OR)操作并存储结果:BITOP OR destkey key [key ...],对指定的一个或多个位图key执行逻辑或操作,并将结果存储到destkey中。对一个位图执行逻辑非(NOT)操作并存储结果:BITOP NOT destkey key,对指定的位图key执行逻辑非操作,并将结果存储到destkey中。对一个位图执行逻辑异或(XOR)操作并存储结果:BITOP XOR destkey key [key ...],对指定的一个或多个位图key执行逻辑异或操作,并将结果存储到destkey中。获取位图的指定范围内的子位图:GETRANGE key start end,获取位图key中指定范围内的子位图。设置指定范围内的位值,并返回修改后的位图:SETRANGE key offset value,设置位图key中指定范围内的位值为value,并返回修改后的位图。

应用场景: 适合需要保存状态信息(比如是否签到、是否登录…)并需要进一步对这些信息进行分析的场景。比如用户签到情况、活跃用户情况、用户行为统计(比如是否点赞过某个视频)。

查看原文