Redis 基本操作笔记
1. Redis 简介
Redis(Remote Dictionary Server)是一个开源的、高性能的键值对存储系统,通常作为数据库、缓存、消息中间件等使用。它支持多种数据类型,包括字符串、哈希、列表、集合、有序集合等。
Redis 特点:
- 性能:Redis 支持每秒百万级别的操作。
- 持久化:支持数据持久化,可以选择 AOF 或 RDB 持久化方式。
- 数据类型丰富:支持字符串、哈希、列表、集合、有序集合等数据类型。
- 高可用:支持主从复制、哨兵模式和集群模式。
2. Redis 数据类型
2.1 字符串(String)
字符串是 Redis 中最基本的数据类型,一个键对应一个值,值可以是字符串、整数、浮点数等。
常用命令:
-
SET key value:设置字符串值
SET mykey "Hello Redis"
-
GET key:获取字符串值
GET mykey
-
INCR key:对键值进行加 1 操作(整数)
INCR mykey
-
DECR key:对键值进行减 1 操作(整数)
DECR mykey
-
APPEND key value:在现有字符串值后追加字符串
APPEND mykey " World"
2.2 哈希(Hash)
哈希是键值对的集合,每个哈希可以包含多个字段和值。适合存储对象类型的数据。
常用命令:
-
HSET key field value:设置哈希表字段的值
HSET user:1000 name "Alice" age 30
-
HGET key field:获取哈希表字段的值
HGET user:1000 name
-
HGETALL key:获取哈希表所有字段和值
HGETALL user:1000
-
HDEL key field:删除哈希表中的字段
HDEL user:1000 age
2.3 列表(List)
列表是简单的字符串列表,按插入顺序排序。你可以在列表的两端插入、删除元素。
常用命令:
-
LPUSH key value:将一个或多个值插入到列表的左侧
LPUSH mylist "apple"
-
RPUSH key value:将一个或多个值插入到列表的右侧
RPUSH mylist "banana"
-
LPOP key:从列表的左侧弹出元素
LPOP mylist
-
RPOP key:从列表的右侧弹出元素
RPOP mylist
-
LRANGE key start stop:获取列表中指定范围的元素
LRANGE mylist 0 2
2.4 集合(Set)
集合是无序的字符串集合,不允许重复元素。
常用命令:
-
SADD key member:将一个或多个元素添加到集合中
SADD myset "apple" "banana"
-
SREM key member:从集合中移除一个或多个元素
SREM myset "banana"
-
SMEMBERS key:获取集合中的所有成员
SMEMBERS myset
-
SISMEMBER key member:检查元素是否是集合的成员
SISMEMBER myset "apple"
2.5 有序集合(Sorted Set)
有序集合与集合类似,但每个元素都会关联一个分数,Redis 会根据分数进行排序。
常用命令:
-
ZADD key score member:将一个或多个成员及其分数添加到有序集合
ZADD myzset 1 "apple" 2 "banana"
-
ZREM key member:从有序集合中移除一个或多个成员
ZREM myzset "banana"
-
ZRANGE key start stop:获取指定范围内的有序集合成员(按分数排序)
ZRANGE myzset 0 -1
-
ZREVRANGE key start stop:获取指定范围内的有序集合成员(按分数降序排列)
ZREVRANGE myzset 0 -1
3. Redis 常用命令
3.1 键操作(Key Operations)
-
DEL key:删除一个键
DEL mykey
-
EXISTS key:检查一个键是否存在
EXISTS mykey
-
KEYS pattern:获取所有匹配的键
KEYS "user:*"
-
TTL key:查看键的剩余过期时间
TTL mykey
-
EXPIRE key seconds:设置键的过期时间
EXPIRE mykey 60
-
PERSIST key:移除键的过期时间
PERSIST mykey
3.2 事务(Transaction)
Redis 提供了多条命令的原子性操作,通过 MULTI
、EXEC
、DISCARD
、WATCH
实现。
-
MULTI:开始一个事务
MULTI
-
EXEC:执行事务
EXEC
-
DISCARD:放弃事务
DISCARD
-
WATCH key:监视一个键
WATCH mykey
3.3 持久化(Persistence)
Redis 提供了两种持久化方式:RDB(快照)和 AOF(追加文件)。
-
BGSAVE:异步保存快照
BGSAVE
-
SAVE:同步保存快照
SAVE
-
BGREWRITEAOF:异步重写 AOF 文件
BGREWRITEAOF
4. Redis 高级特性
4.1 发布/订阅(Pub/Sub)
Redis 支持发布/订阅模式,可以通过频道进行消息传递。
-
PUBLISH channel message:向频道发送消息
PUBLISH mychannel "Hello Redis"
-
SUBSCRIBE channel:订阅频道
SUBSCRIBE mychannel
-
UNSUBSCRIBE channel:取消订阅频道
UNSUBSCRIBE mychannel
4.2 脚本(Lua)
Redis 支持通过 Lua 脚本执行多条命令,可以实现原子化操作。
-
EVAL script numkeys key [key …] arg [arg …]:执行 Lua 脚本
EVAL "return redis.call('GET', KEYS[1])" 1 mykey
5. Redis 性能调优
- 内存管理:合理设置最大内存,启用合适的内存淘汰策略。
- 持久化优化:根据应用需求选择合适的持久化方式(RDB、AOF),并设置合理的保存频率。
- 集群模式:使用 Redis 集群来分散负载,提供更好的可扩展性。
6. 结语
Redis 是一个非常高效的内存数据库,广泛应用于缓存、消息队列等场景。掌握 Redis 的基本操作和高级特性,有助于提升应用性能和扩展性。