Redis操作详解,从基础到高级应用
Redis是一款高性能的键值存储数据库,支持多种数据结构(如字符串、哈希、列表、集合等),广泛应用于缓存、消息队列等场景,本文从基础操作入手,详细介绍了Redis的安装配置、常用命令(如SET/GET、HSET/HGET、LPUSH/LPOP等)以及持久化机制(RDB和AOF),进阶部分涵盖事务处理、Lua脚本、发布订阅模式及集群部署方案,并结合实际案例演示如何优化性能与解决高并发问题,通过本文,读者可系统掌握Redis的核心功能与高级应用技巧,提升分布式系统开发能力。
Redis基础操作
1 连接Redis
Redis支持多种客户端连接方式,如命令行工具redis-cli
、编程语言客户端(如Python的redis-py
、Java的Jedis
)等,以下是一个简单的连接示例:
redis-cli -h 127.0.0.1 -p 6379 -a yourpassword
2 基本键值操作
Redis的核心功能是键值存储,常用命令包括:
- SET:设置键值对
SET key value
- GET:获取键的值
GET key
- DEL:删除键
DEL key
- EXPIRE:设置键的过期时间(秒)
EXPIRE key 60
- TTL:查看键的剩余生存时间
TTL key
Redis数据结构及其操作
1 字符串(String)
字符串是Redis最基本的数据类型,支持多种操作:
- INCR/DECR:自增/自减
INCR counter DECR counter
- APPEND:追加字符串
APPEND key "new_value"
- GETRANGE:获取子字符串
GETRANGE key 0 4
2 哈希(Hash)
哈希适合存储对象,如用户信息:
- HSET:设置字段值
HSET user:id1 name "Alice" age 25
- HGET:获取字段值
HGET user:id1 name
- HGETALL:获取所有字段
HGETALL user:id1
3 列表(List)
列表是一个双向链表,适合实现队列或栈:
- LPUSH/RPUSH:左/右插入元素
LPUSH mylist "item1" RPUSH mylist "item2"
- LPOP/RPOP:左/右弹出元素
LPOP mylist
- LRANGE:获取列表范围
LRANGE mylist 0 -1
4 集合(Set)
集合是无序且唯一的元素集合,适合去重:
- SADD:添加元素
SADD myset "a" "b" "c"
- SMEMBERS:获取所有元素
SMEMBERS myset
- SINTER:求交集
SINTER set1 set2
5 有序集合(Sorted Set)
有序集合按分数排序,适合排行榜:
- ZADD:添加带分数的元素
ZADD leaderboard 100 "Alice" 200 "Bob"
- ZRANGE:按排名查询
ZRANGE leaderboard 0 -1 WITHSCORES
- ZREVRANGE:逆序查询
ZREVRANGE leaderboard 0 -1 WITHSCORES
Redis高级操作
1 事务(Transactions)
Redis支持事务,通过MULTI
、EXEC
、DISCARD
实现:
MULTI SET key1 "value1" SET key2 "value2" EXEC
2 发布/订阅(Pub/Sub)
Redis可以作为消息队列使用:
# 订阅频道 SUBSCRIBE news # 发布消息 PUBLISH news "Hello, Redis!"
3 Lua脚本
Redis支持执行Lua脚本,提高复杂操作的原子性:
EVAL "return redis.call('GET', KEYS[1])" 1 mykey
4 持久化
Redis提供两种持久化方式:
- RDB(快照):定期保存数据到磁盘
SAVE # 同步保存 BGSAVE # 后台保存
- AOF(日志):记录所有写操作
CONFIG SET appendonly yes
Redis应用场景
1 缓存
Redis最常见的用途是缓存热点数据,减轻数据库压力:
SET cache:user:1 "{name: 'Alice', age: 25}" EX 3600
2 会话存储
存储用户会话信息,提高Web应用性能:
SET session:abc123 "{user_id: 1, last_login: '2023-10-01'}"
3 排行榜
利用有序集合实现实时排行榜:
ZADD leaderboard 1000 "Player1" 2000 "Player2"
4 消息队列
使用List或Stream实现异步任务处理:
LPUSH tasks "{task: 'send_email', data: '...'}"
Redis优化与最佳实践
- 合理设置过期时间:避免内存泄漏。
- 使用Pipeline:减少网络开销。
- 避免大Key:单个Key不宜过大,影响性能。
- 监控性能:使用
INFO
命令或Redis Monitor
工具。