Redis五大基本数据类型

本文详细介绍了Redis的五大数据类型:String、List、Set、Hash和Zset,包括它们的特点和常用操作命令。String作为基础类型,可用于计数;List适用于消息队列;Set提供交集、并集等操作;Hash适合存储对象;Zset则支持有序存储,适用于排行榜场景。这些数据类型在实际应用中有着广泛用途。

Redis中五大基本数据类型为String,List,Set,Hash和Zset(有序集合)。其中String类型是最为基础的,list可以用来做队列/栈,set保证集合内元素不重复,hash是的value部分也是若干个k-v的形式(一般用于存储对象),Zset与set的不同是维护了一个score,可以根据score进行排序。

下面是一些常用的API:(Redis的命令无大小写之分,为了区分命令关键字与key value,下面的命令都用大写符号表示):

String

最常用的一种数据类型,String类型的值可以是字符串、数字或者二进制,但值最大不能超过512MB。

命令描述
SET key value添加一个字符串key,其值为value
GET key得到指定key的字符串的值
APPEND key value向指定的key的value后追加字符串
DECR/INCR key将指定key的value数值进行-1/+1(仅对于数字)
DECRBY/INCRBY key n将指定key的value数值进行-n/+n(仅对于数字)
STRLEN key获取key对应的字符串长度
GETRANGE key start end按起止位置获取字符串(闭区间)
SETRANGE key offset value用指定的value替换掉key中offset开始的值
GETSET key value将指定的key的值设置成value,同时返回原来的值
SETNX key value仅当key不存在的时候进行set
SETEX key second value设置键值对并设置过期时间
MSET key1 value1 [key2 value2…]批量设置键值对
MSETNX key1 value1 [key2 value2…]批量设置键值对,仅当所有key都不存在的时候执行
MGET key1 [key2…]批量获得多个key保存的值

可见String类型可以做计数器,统计一些多单位的数量。

List

有序可重复的集合,底层是依赖双向链表实现的。

命令描述
LPUSH/RPUSH key value1[value2…]从左边/右边向列表中PUSH值(一个或多个)
LRANGE key start end获取list起止元素(end==-1表示到最后)
LINSERT key BEFORE|AFTER pivot value在指定的元素pivot前/后 插入value
LLEN key查询列表的长度
LINDEX key index通过索引获取列表元素
LSET key index value通过索引为元素设置值
LPOP/RPOP key从最左边/最右边移除值 并返回
LPOPPUSH source destination从列表尾部(右)弹出元素,并添加到另一个列表头部
LTRIM key start end通过下标截取指定范围内的列表
LREM key count valueList是允许重复的 count>0:从头部开始搜索 删除指定的value 至多count个; count<0: 从尾部进行搜索… count=0: 删除列表中所有的指定value。

可见List类型由于属于双端队列的原因,可以用作消息队列。

Set

无序去重的集合。Set 提供了交集、并集等方法,对于实现共同好友、共同关注等功能特别方便。

命令描述
SADD key member1[member2…]向集合中无序增加一个/多个元素
SCARD key获得集合中的成员数
SMEMBERS key返回集合中所有的成员
SISMEMBER key member查询menber元素是否是集合的成员,结果是无序的
SRANDMEMBER key [count]随机返回count个成员,缺省值为1
SPOP key [count]随机移除并返回集合中count个成员,count缺省值为1
SMOVE source destination member将source集合中的member移动到destination集合中
SREM key member1[member2…]移除集合中一个/多个成员
SDIFF key1 [key2…]返回所有集合的差集 key1-key2-…
SINTER key1 [key2…]返回所有集合的交集
SUNION key1 [key2…]返回所有集合的并集

Set的用处也有很多,比如可以把用户的关注/粉丝存储在不同set中,不同用户取交集就能够得到共同好友。。。

Hash

Hash 是一个键值对集合。

命令描述
HSET key field value将哈希表key 中的字段field 设置为value
HMSET key field1 value1 [field2 value2…]同时设置多个field-value键值对到哈希表key中
HSETNX key field value只有在字段field不存在时,设置哈希表字段的值
HEXISTS key field查看哈希表key中是否存在指定的field
HGET key field获取存储在哈希表中指定字段的值
HMGET key field1 [field2…]获取所有给定字段的值
HGETALL key获取在哈希表key中所有字段的值
HKEYS key获取哈希表key中所有的字段
HLEN key获取哈希表中字段的数量
HVALS key获取哈希表key中所有值
HDEK key field1 [field2…]删除哈希表key中一个/多个field字段
HINCRBY key field n为哈希表key中指定的字段的整数值加上n,并返回增量后的结果(只适用于整数型字段)

可见Hash更适合于对象的存储。

Zset

有序Set。内部维护了一个score的参数来实现。适用于排行榜和带权重的消息队列等场景。

命令描述
ZADD key score1 member1 [score2 member2]向有序集合中添加一个或多个成员,或者更新已存在成员的分数
ZCARD key获取有序集合的成员数
ZCOUNT key min max计算在有序集合中指定区间score的成员数
ZINCRBY key n member有序集合中指定成员的分数增加n
ZSCORE key member返回有序集合中,成员的分数值
ZRANGE key start end通过索引区间返回有序集合中指定区间的成员
ZRANGEBYSCORE key min max通过分数返回有序集合指定区间的成员,-inf和+inf表示最大值和最小值
ZREM key member1 [member2…]移除有序集合中一个/多个成员
ZREMRANGEBYSCORE key min max移除有序集合中给定的分数区间的所有成员
ZREVRANGEBYSCORE key max min返回有序集合指定分数区间内的成员,按照倒序排列

可见Zset适用于各种需要排序的场景,如热搜排行榜一类的。

最后放一个很棒的Redis五大基本数据类型的博客:链接

### Redis 五种基本数据结构及其用法 #### 1. **String(字符串类型)** String 类型是最简单的键值对存储方式,其值可以是一个普通的字符串或者二进制安全的字节序列。它支持的操作不仅限于设置和获取值,还可以执行原子操作如自增或自减计数值。 - 常见命令: - `SET key value` 设置指定键的值。 - `GET key` 获取指定键的值。 - `INCR key` 对键对应的整数值加一。 - `DECR key` 对键对应的整数值减一。 - 使用场景:缓存小型数据、计数器等[^1]。 ```python # Python 示例代码 import redis r = redis.Redis(host='localhost', port=6379, decode_responses=True) r.set('name', 'Alice') # SET name Alice print(r.get('name')) # GET name -> 输出: Alice ``` --- #### 2. **Hash(哈希类型)** Hash 数据结构用于存储字段与值之间的映射关系,适合表示对象属性。它的特点是可以通过单个命令高效地访问某个特定字段的值。 - 常见命令: - `HSET key field value` 将哈希表中的字段设为指定值。 - `HGET key field` 取得储存在哈希表中指定字段的值。 - `HMSET key field1 value1 [field2 value2 ...]` 同时将多个字段/值对设置到哈希表中。 - `HGETALL key` 返回整个哈希表的内容。 - 使用场景:存储用户信息或其他具有多属性的对象。 ```python # Python 示例代码 r.hset('user:1000', mapping={'name': 'Bob', 'age': 25}) print(r.hgetall('user:1000')) # 输出 {'name': 'Bob', 'age': '25'} ``` --- #### 3. **List(列表类型)** List 是一个有序的字符串列表,可以在两端进行高效的插入和移除操作。由于其实现基于双向链表,因此非常适合处理队列类的任务。 - 常见命令: - `LPUSH key element` 在列表头部插入元素。 - `RPUSH key element` 在列表尾部插入元素。 - `LPOP key` 移除并返回列表的第一个元素。 - `RPOP key` 移除并返回列表的最后一个元素。 - 使用场景:消息队列、最近浏览记录等功能。 ```python # Python 示例代码 r.lpush('queue', 'task1') r.rpush('queue', 'task2') print(r.lrange('queue', 0, -1)) # 查看当前队列内容 ['task2', 'task1'] ``` --- #### 4. **Set(集合类型)** Set 存储的是唯一且无序的字符串元素集,内部通过哈希表来实现,从而保证了常量时间复杂度下的查找效率。 - 常见命令: - `SADD key member [member ...]` 添加一个或多个成员至集合。 - `SMEMBERS key` 列举集合内的所有成员。 - `SCARD key` 统计集合内有多少个成员。 - `SDIFF key [key ...]` 找出第一个集合与其他集合的不同之处。 - 特点:去重功能强大,适用于好友推荐等领域[^4]。 ```bash DEL student (integer) 1 sadd student alice (integer) 1 sadd student bob (integer) 1 smembers student # 结果可能顺序不同 ["alice", "bob"] ``` --- #### 5. **Sorted Set(有序集合类型)** Sorted Set 和 Set 都能保存不重复的成员,但前者还附加了一个分数(score),使得它可以按照分值排序展示出来。 - 常见命令: - `ZADD key score member [score member ...]` 插入带有权重的新条目。 - `ZRANGE key start stop [WITHSCORES]` 按照索引范围提取部分成员以及它们各自的得分。 - `ZREM key member [member ...]` 删除某些已存在的项目。 - 应用实例:排行榜系统设计[^5]。 ```python # Python 示例代码 r.zadd('leaderboard', {'player1': 150, 'player2': 300}) print(r.zrange('leaderboard', 0, -1, withscores=True)) # [(b'player1', 150), (b'player2', 300)] ``` --- ### 总结 Redis 中的所有数据均以 Key-Value 形式储存,其中 Value 的具体表现形式由上述提到的各种数据类型决定[^2]。此外,跳跃表技术被用来管理 Sorted Sets 的层级高度上限问题,确保性能稳定[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值