
00:00:00
外卖卷:非常划算 扫码领劵 省点小钱钱
Redis(Remote Dictionary Server)是一个开源的、使用 C 语言编写的、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。
缓存
分布式 Session
分布式锁
SETNX (SET if Not eXists) 等原子命令来实现。其他
INCR 等原子操作,实现高并发下的实时计数,如点赞数、浏览量。SET key value:设置指定 key 的值。GET key:获取指定 key 的值。INCR key:将 key 中储存的数字值增一。DECR key:将 key 中储存的数字值减一。HSET key field value:将哈希表 key 中的字段 field 的值设为 value。HGET key field:获取存储在哈希表中指定字段的值。HGETALL key:获取在哈希表中指定 key 的所有字段和值。LPUSH key value1 [value2]:将一个或多个值插入到列表头部。RPUSH key value1 [value2]:将一个或多个值插入到列表尾部。LPOP key:移出并获取列表的第一个元素。RPOP key:移出并获取列表的最后一个元素。LRANGE key start stop:获取列表指定范围内的元素。SADD key member1 [member2]:向集合添加一个或多个成员。SMEMBERS key:返回集合中的所有成员。SISMEMBER key member:判断 member 元素是否是集合 key 的成员。ZADD key score1 member1 [score2 member2]:向有序集合添加一个或多个成员,或者更新已存在成员的分数。ZRANGE key start stop [WITHSCORES]:通过索引区间返回有序集合成指定区间内的成员。ZREVRANGE key start stop [WITHSCORES]:返回有序集中指定区间内的成员,通过索引,分数从高到低。在 Java 中操作 Redis 有多种客户端和框架可供选择,它们各有优缺点。
RedisTemplate 等高度封装的模板类,简化了 Redis 操作。Map, Set, List, Lock, Semaphore 等。@Cached 和 @CacheUpdate 等注解,可以非常方便地为方法添加缓存逻辑。良好的 Key 设计可以提高可读性、可管理性,并节省内存。
业务名:表名:唯一标识,如 user:info:1001。为 Key 设置过期时间是 Redis 作为缓存使用的核心机制之一。
DEL 命令)。maxmemory)时,会触发内存淘汰策略来删除一些 Key 以释放空间。如果此时一个永久 Key 被选中,它也可能被删除。如果淘汰策略设置为 noeviction(默认策略),则在内存满时,所有写操作都会报错,导致服务不可用。为了防止因服务器断电或宕机导致内存数据丢失,Redis 提供了两种持久化机制:
RDB (Redis Database Backup)
AOF (Append Only File)
企业级方案:通常采用 RDB + AOF 混合使用的策略,结合两者的优点,既保证了数据恢复的效率,又提高了数据的安全性。
采用主从架构(Master-Slave)进行读写分离和数据备份。
SET, DEL)和部分读操作。当数据发生变化时,主节点会将写命令异步复制给所有从节点。主从架构本身无法实现自动故障转移,需要哨兵(Sentinel)机制来监控和管理。
主从架构解决了高可用性问题,但所有数据仍然存储在一个主节点上,无法解决单机容量瓶颈。
当数据量大到单机内存无法容纳时,就需要使用 Redis 集群(Cluster)。
当单个 Redis 实例或集群面临过高的并发压力时,可以从架构层面进行优化:
引入多级缓存
本地缓存 → Redis 缓存 → 数据库 的访问顺序。缓存预热
| 面临问题 | 解决方案 | 核心技术 |
|---|---|---|
| 数据丢失 | 数据备份与恢复 | RDB + AOF |
| 服务宕机 | 主从备份,自动故障转移 | 主从复制 + 哨兵 |
| 容量瓶颈 | 数据分片,水平扩展 | Redis Cluster |
| 并发压力 | 读写分离,多级缓存 | 主从架构 |
评论