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