redis常用的五种数据类型
一、字符串(string)
简介
字符串是 redis 中最基本的数据类型,可以存储任何类型的数据(如文本、数字、二进制数据等)。每个字符串的最大长度可以达到 512 mb。
常用命令
set key value
- 用途:设置键
key
的值为value
。 - 语法:
set key value
- 示例:
set username "john_doe"
get key
- 用途:获取键
key
的值。 - 语法:
get key
- 示例:
get username
del key
- 用途:删除指定的键
key
。 - 语法:
del key
- 示例:
del username
exists key
- 用途:检查键
key
是否存在。 - 语法:
exists key
- 示例:
exists username
incr key
- 用途:将键
key
的值加 1。若键不存在,则初始化为 0。 - 语法:
incr key
- 示例:
incr page_views
decr key
- 用途:将键
key
的值减 1。若键不存在,则初始化为 0。 - 语法:
decr key
- 示例:
decr user_count
append key value
- 用途:将字符串值
value
追加到键key
的现有值后。 - 语法:
append key value
- 示例:
append username "_2023"
mset key1 value1 key2 value2 …
- 用途:同时设置多个键值对。
- 语法:
mset key1 value1 key2 value2 ...
示例:
mset key1 "value1" key2 "value2"
mget key1 key2 …
- 用途:获取多个键的值。
- 语法:
mget key1 key2 ...
- 示例:
mget key1 key2
setex key seconds value
- 用途:设置键
key
的值为value
,并在seconds
秒后过期。 - 语法:
setex key seconds value
- 示例:
setex session:123 3600 "abc123" # 设置1小时后过期
应用场景
- 缓存系统:用于存储用户会话信息、网页内容等,以提高数据访问速度。
- 计数器:实现简单的计数器功能,例如统计网站访问量、点赞数等。
- token 存储:在身份验证系统中存储用户的身份令牌。
二、哈希(hash)
简介
哈希是一种存储键值对的映射,适合存储对象。每个哈希最多支持 2^32-1 个字段,通常用于表示一个复杂的对象。
常用命令
hset key field value
- 用途:为哈希表
key
中的字段field
设置值value
。 - 语法:
hset key field value
- 示例:
hset user:1000 name "john doe"
hget key field
- 用途:获取哈希表
key
中字段field
的值。 - 语法:
hget key field
示例:
hget user:1000 name
hgetall key
- 用途:获取哈希表
key
中的所有字段及其对应的值。 - 语法:
hgetall key
- 示例:
hgetall user:1000
hdel key field
- 用途:删除哈希表
key
中的字段field
。 - 语法:
hdel key field
- 示例:
hdel user:1000 age
hincrby key field increment
- 用途:将哈希表
key
中字段field
的值加上increment
。 - 语法:
hincrby key field increment
- 示例:
hincrby user:1000 age 1
hkeys key
- 用途:获取哈希表
key
中所有的字段名。 - 语法:
hkeys key
- 示例:
hkeys user:1000
hvals key
- 用途:获取哈希表
key
中所有的字段值。 - 语法:
hvals key
- 示例:
hvals user:1000
hexists key field
- 用途:检查哈希表
key
中是否存在字段field
。 - 语法:
hexists key field
- 示例:
hexists user:1000 name
hmset key field1 value1 field2 value2 …
- 用途:同时设置多个字段的值。
- 语法:
hmset key field1 value1 field2 value2 ...
- 示例:
hmset user:1000 name "john doe" age 30
hmget key field1 field2 …
- 用途:获取哈希表中多个字段的值。
- 语法:
hmget key field1 field2 ...
- 示例:
hmget user:1000 name age
应用场景
- 用户信息存储:使用哈希存储用户的多个属性(如用户名、年龄、地址等),方便进行快速查询和更新。
- 商品信息管理:在电商系统中,利用哈希存储商品的详细信息(如价格、库存、销量等)。
三、列表(list)
简介
列表是有序的字符串集合,支持重复元素。列表的长度可以达到 2^32-1 个元素,适合实现队列和栈等数据结构。
常用命令
lpush key value
- 用途:将一个或多个值插入到列表
key
的头部。 - 语法:
lpush key value [value ...]
- 示例:
lpush tasks "task 1"
rpush key value
- 用途:将一个或多个值插入到列表
key
的尾部。 - 语法:
rpush key value [value ...]
- 示例:
rpush tasks "task 2"
lpop key
- 用途:移除并返回列表
key
的第一个元素。 - 语法:
lpop key
- 示例:
lpop tasks
rpop key
- 用途:移除并返回列表
key
的最后一个元素。 - 语法:
rpop key
- 示例:
rpop tasks
lrange key start stop
- 用途:获取列表
key
指定范围内的元素,start
和stop
是索引,负数代表从末尾开始计数。 - 语法:
lrange key start stop
- 示例:
lrange tasks 0 -1 # 获取整个任务列表
ltrim key start stop
- 用途:修剪列表
key
,保留start
到stop
范围内的元素。 - 语法:
ltrim key start stop
- 示例:
ltrim tasks 0 4 # 只保留前5个元素
lindex key index
- 用途:获取列表
key
中指定索引index
的元素。 - 语法:
lindex key index
- 示例:
lindex tasks 1 # 获取第二个任务
llen key
- 用途:获取列表
key
的长度。 - 语法:
llen key
- 示例:
llen tasks
rpoplpush source destination
- 用途:移除列表
source
的最后一个元素,将其插入到列表destination
的头部。 - 语法:
rpoplpush source destination
- 示例:
rpoplpush tasks completed_tasks
brpop key [key …] timeout
- 用途:阻塞弹出列表
key
的最后一个元素,直到超时或有新的元素可用。 - 语法:
brpop key [key ...] timeout
- 示例:
brpop tasks 5 # 等待5秒后返回
应用场景
- 消息队列:使用列表实现任务队列,支持 fifo(先进先出)逻辑。
- 时间序列数据:存储用户操作记录或日志信息,以便按时间顺序访问。
四、集合(set)
简介
集合是无序的字符串集合,支持添加、删除和查找操作。集合中的元素是唯一的,重复元素会被自动忽略。
常用命令
sadd key member [member …]
- 用途:向集合
key
添加一个或多个成员。 - 语法:
sadd key member [member ...]
- 示例:
sadd myset "apple"
srem key member [member …]
- 用途:从集合
key
移除一个或多个成员。 - 语法:
srem key member [member ...]
- 示例:
srem myset "banana"
smembers key
- 用途:获取集合
key
中的所有成员。 - 语法:
smembers key
- 示例:
smembers myset
sismember key member
- 用途:判断成员
member
是否在集合key
中。 - 语法:
sismember key member
- 示例:
sismember myset "apple"
sinter key1 key2 [key3 …]
- 用途:返回给定所有集合的交集。
- 语法:
sinter key1 key2 [key3 ...]
- 示例:
sinter set1 set2
sunion key1 key2 [key3 …]
- 用途:返回给定所有集合的并集。
- 语法:
sunion key1 key2 [key3 ...]
- 示例:
sunion set1 set2
sdiff key1 key2 [key3 …]
- 用途:返回集合
key1
与其他集合的差集。 - 语法:
sdiff key1 key2 [key3 ...]
- 示例:
sdiff set1 set2
spop key [count]
- 用途:移除并返回集合
key
中的一个或多个随机成员。 - 语法:
spop key [count]
- 示例:
spop myset 2 # 随机移除并返回2个成员
scard key
- 用途:获取集合
key
的成员数量。 - 语法:
scard key
- 示例:
scard myset
smove source destination member
- 用途:将成员
member
从集合source
移动到集合destination
。 - 语法:
smove source destination member
示例:
smove myset other_set "apple"
应用场景
- 标签系统:使用集合存储用户的兴趣标签,方便进行兴趣推荐。
- 统计独立用户:统计网站的独立访客数或活跃用户数,利用集合的去重特性。
五、有序集合(sorted set)
简介
有序集合是一个字符串集合,其中每个元素都关联一个分数(score),集合中的元素是有序的。成员是唯一的,但分数可以重复。
常用命令
zadd key score member [score member …]
- 用途:向有序集合
key
添加一个或多个成员及其分数。 - 语法:
zadd key score member [score member ...]
示例:
zadd leaderboard 100 "player1"
zrange key start stop [withscores]
- 用途:返回有序集合
key
中指定区间内的成员。 - 语法:
zrange key start stop [withscores]
- 示例:
zrange leaderboard 0 -1 withscores # 获取所有玩家及其分数
zrem key member [member …]
- 用途:移除有序集合
key
中的一个或多个成员。 - 语法:
zrem key member [member ...]
- 示例:
zrem leaderboard "player1"
zrank key member
- 用途:返回成员
member
在有序集合key
中的排名(从 0 开始)。 - 语法:
zrank key member
- 示例:
zrank leaderboard "player2"
zcard key
- 用途:返回有序集合
key
的成员数量。 - 语法:
zcard key
- 示例:
zcard leaderboard
zscore key member
- 用途:获取有序集合
key
中成员member
的分数。 - 语法:
zscore key member
示例:
zscore leaderboard "player2"
zrevrange key start stop [withscores]
- 用途:以分数从高到低的顺序返回有序集合
key
中指定区间内的成员。 - 语法:
zrevrange key start stop [withscores]
- 示例:
zrevrange leaderboard 0 -1 withscores # 获取所有玩家及其分数,按分数从高到低
zincrby key increment member
- 用途:将有序集合
key
中成员member
的分数加上increment
。 - 语法:
zincrby key increment member
- 示例:
zincrby leaderboard 10 "player1" # player1的分数增加10
zpopmin key [count]
- 用途:移除并返回有序集合
key
中分数最低的一个或多个成员。 - 语法:
zpopmin key [count]
- 示例:
zpopmin leaderboard 1 # 移除并返回分数最低的1个成员
zpopmax key [count]
- 用途:移除并返回有序集合
key
中分数最高的一个或多个成员。 - 语法:
zpopmax key [count]
- 示例:
zpopmax leaderboard 1 # 移除并返回分数最高的1个成员
应用场景
- 排行榜:用于游戏的得分排行榜、社交媒体的热度排名等。
- 时间敏感的数据:如实时推荐系统,根据用户行为的分数动态更新推荐内容。
总结
通过详细了解 redis 各种数据类型及其常用命令,开发者可以更有效地利用 redis 提供的强大功能。在高并发和高性能的应用场景下,正确选择和使用 redis 的数据结构和命令将显著提高应用的性能和可扩展性。希望本篇文章能为你的 redis 使用提供帮助!
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论