您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Redis数据结构及简单操作指令
## 一、Redis简介
Redis(Remote Dictionary Server)是一个开源的、基于内存的键值存储系统,由Salvatore Sanfilippo开发。它支持多种数据结构,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)等。Redis以其高性能、丰富的数据结构和原子操作而闻名,广泛应用于缓存、消息队列、实时分析等场景。
### 核心特性
- **内存存储**:数据主要存储在内存中,读写速度极快
- **持久化支持**:提供RDB和AOF两种持久化机制
- **数据结构丰富**:支持5种基础数据结构及扩展类型
- **原子操作**:所有操作都是原子性的
- **高可用**:支持主从复制和哨兵模式
- **分布式**:通过Redis Cluster实现分布式存储
## 二、基础数据结构及操作
### 1. 字符串(String)
#### 数据结构特点
- 最基本的键值类型
- 二进制安全,可包含任何数据
- 最大能存储512MB
#### 常用指令
```redis
# 设置键值
SET key value [EX seconds] [PX milliseconds] [NX|XX]
示例: SET username "john" EX 60 # 设置60秒过期
# 获取值
GET key
示例: GET username
# 批量操作
MSET key1 value1 key2 value2
MGET key1 key2
# 数值增减
INCR key # 值+1
DECR key # 值-1
INCRBY key increment # 增加指定数值
DECRBY key decrement # 减少指定数值
# 位操作
SETBIT key offset value
GETBIT key offset
BITCOUNT key [start end]
# 设置字段值
HSET key field value
示例: HSET user:1000 name "Alice" age 30
# 获取字段值
HGET key field
HGETALL key # 获取所有字段
# 批量操作
HMSET key field1 value1 field2 value2
HMGET key field1 field2
# 删除字段
HDEL key field
# 其他操作
HEXISTS key field # 检查字段是否存在
HKEYS key # 获取所有字段名
HVALS key # 获取所有字段值
HLEN key # 获取字段数量
# 添加元素
LPUSH key value [value ...] # 左侧插入
RPUSH key value [value ...] # 右侧插入
# 获取元素
LRANGE key start stop # 获取范围元素
示例: LRANGE mylist 0 -1 # 获取所有元素
# 弹出元素
LPOP key # 左侧弹出
RPOP key # 右侧弹出
# 阻塞操作
BLPOP key [key ...] timeout # 阻塞式左侧弹出
BRPOP key [key ...] timeout # 阻塞式右侧弹出
# 其他操作
LLEN key # 获取列表长度
LINDEX key index # 获取指定位置元素
LTRIM key start stop # 修剪列表
# 添加成员
SADD key member [member ...]
# 获取成员
SMEMBERS key # 获取所有成员
SCARD key # 获取成员数量
# 集合运算
SINTER key [key ...] # 交集
SUNION key [key ...] # 并集
SDIFF key [key ...] # 差集
# 其他操作
SISMEMBER key member # 判断是否成员
SREM key member [member ...] # 删除成员
SPOP key [count] # 随机移除成员
SRANDMEMBER key [count] # 随机获取成员
# 添加成员
ZADD key [NX|XX] [CH] [INCR] score member [score member ...]
示例: ZADD leaderboard 100 "Alice" 90 "Bob"
# 获取成员
ZRANGE key start stop [WITHSCORES] # 按分数升序
ZREVRANGE key start stop [WITHSCORES] # 按分数降序
# 范围查询
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
# 其他操作
ZCARD key # 获取成员数量
ZSCORE key member # 获取成员分数
ZRANK key member # 获取成员排名(升序)
ZREVRANK key member # 获取成员排名(降序)
ZREM key member [member ...] # 删除成员
SETBIT key offset value # 设置位
GETBIT key offset # 获取位
BITCOUNT key [start end] # 统计置1的位数
BITOP operation destkey key [key ...] # 位运算
PFADD key element [element ...] # 添加元素
PFCOUNT key [key ...] # 统计基数
PFMERGE destkey sourcekey [sourcekey ...] # 合并多个HLL
GEOADD key longitude latitude member [longitude latitude member ...]
GEODIST key member1 member2 [unit]
GEOPOS key member [member ...]
GEORADIUS key longitude latitude radius unit [WITHCOORD] [WITHDIST] [COUNT count]
# 键查询
KEYS pattern # 查找匹配的键(生产环境慎用)
SCAN cursor [MATCH pattern] [COUNT count] # 安全遍历
# 键删除
DEL key [key ...] # 删除键
UNLINK key [key ...] # 异步删除(Redis 4.0+)
# 过期控制
EXPIRE key seconds # 设置过期时间(秒)
TTL key # 查看剩余时间
PERSIST key # 移除过期时间
# 其他
EXISTS key [key ...] # 检查键是否存在
TYPE key # 获取键类型
RENAME key newkey # 重命名键
MULTI # 开始事务
SET key1 value1
SET key2 value2
EXEC # 执行事务
DISCARD # 取消事务
# 客户端示例(伪代码)
pipeline = redis.pipeline()
pipeline.set('key1', 'value1')
pipeline.get('key2')
results = pipeline.execute()
Redis支持通过Lua脚本执行复杂操作:
EVAL "return redis.call('GET', KEYS[1])" 1 mykey
EVALSHA sha1 numkeys key [key ...] arg [arg ...]
SCRIPT LOAD "lua_script_code"
SCRIPT EXISTS sha1 [sha1 ...]
SCRIPT FLUSH
SCRIPT KILL
# 设置缓存
SET user:1000 "{name:'Alice',age:30}" EX 3600
# 获取缓存
GET user:1000
INCR page:views:today
GET page:views:today
# 生产者
LPUSH notifications "message1"
# 消费者
BRPOP notifications 30
ZADD leaderboard 100 "player1"
ZADD leaderboard 90 "player2"
ZREVRANGE leaderboard 0 9 WITHSCORES
Redis的丰富数据结构使其能够灵活应对各种场景需求。通过掌握这些基础数据结构和操作指令,开发者可以构建高性能的Redis应用。在实际使用中,应根据具体业务场景选择最合适的数据结构,并注意性能优化和资源管理。
注意:本文介绍的指令基于Redis 6.x版本,不同版本可能存在差异。生产环境建议参考官方文档确认指令可用性。 “`
这篇文章共计约3300字,详细介绍了Redis的各类数据结构及其操作指令,包含基础类型、高级数据结构、键管理、事务等内容,并提供了实际应用示例和优化建议。采用Markdown格式编写,结构清晰,便于阅读和参考。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。