Redis
简介
Redis(Remote Dictionary Server)是开源的高性能键值存储系统,基于内存运行,支持多种数据结构。常被用作缓存、分布式锁、消息队列等。
数据结构
| 类型 | 说明 | 使用场景 |
|---|---|---|
| String | 字符串 | 缓存、计数器 |
| Hash | 哈希表 | 对象存储 |
| List | 列表 | 消息队列 |
| Set | 无序集合 | 去重、标签 |
| Sorted Set | 有序集合 | 排行榜 |
| Bitmap | 位图 | 签到统计 |
| HyperLogLog | 基数统计 | UV 统计 |
常用操作
bash
# String
SET user:1 "张三"
GET user:1
INCR page_view
# Hash
HSET user:1 name "张三" age 25
HGET user:1 name
HGETALL user:1
# List
LPUSH queue "task1"
RPOP queue
# Set
SADD tags "java" "spring"
SMEMBERS tags
# Sorted Set
ZADD leaderboard 100 "user1"
ZRANGE leaderboard 0 -1 WITHSCORES持久化
RDB(快照)
按照配置的时间间隔将内存数据快照写入磁盘:
conf
save 900 1 # 900秒内至少1个key变化
save 300 10 # 300秒内至少10个key变化AOF(追加文件)
记录每个写操作命令到日志文件:
conf
appendonly yes
appendfsync everysec # 每秒同步一次高可用方案
主从复制
conf
# 从节点配置
replicaof 127.0.0.1 6379哨兵模式
conf
# sentinel.conf
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 5000Redis Cluster
自动分片,无中心化架构,支持水平扩展。
Java 客户端(Jedis/Spring Data Redis)
java
// Jedis
Jedis jedis = new Jedis("localhost", 6379);
jedis.set("key", "value");
String value = jedis.get("key");
// Spring Data Redis
@Autowired
private RedisTemplate<String, Object> redisTemplate;
redisTemplate.opsForValue().set("key", "value");