客户端
pom依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>4.3.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.18.0</version>
</dependency>
数据类型与应用
- String
set
mset
strlen
append
getrange
incr
incrby
decr
incrbyfloat - Hash
hset
hmset
hget
hmget
hkeys
hvals
hgetall
hexists
hdel
hlen - List
lpush
rpush
lpop
rpop
lindex
lrange - Set
sadd
smembers
scard
srandmember
spop
srem
sismember
sdiff
sinter
sunion - ZSet
zadd
zrange
zrevrange
zrangebyscore
zrem
zcard
zincrby
zrank
zcount - geo
geoadd
geopos
geodist
georadius
发布订阅
subscribe channel-1 channel-2 channel-3
publist channel-1 message
unsubscribe channel-1
Redis事务
multi 开启事务
exec 执行事务
discard 取消事务
watch 监控事务
unwatch 取消监控
Lua脚本
eval lua-script key-num [key1, key2, …] [val1, val2, …]
redis.call(command, key [param1, param2 …])
redis-cli --eval qs.lua 0
数据淘汰与内存回收
key过期与max memory
过期策略:定时过期、惰性过期、定期过期
淘汰策略:LRU(最近最少使用) / LFU(最不常用数据)
持久化机制
- RDB,默认机制
- 配置规则触发 / shutdown触发 / flushall触发
- 手动触发 save / bgsave
- AOF
redis.conf: appendonly yes, appendfsync everysec / always / no
pipeline
管道机制,建立连接,批量写入
Redis集群与主从复制
slaveof masterIp master端口
info replication
- 主从复制原理
连接、数据同步、命令传播 - 哨兵Sentinel
./redis-sentinel …/sentinel.conf
./redis-server …/sentinel.conf --sentinel - Sentinel原理
主观下线与客观下线
选举 Raft算法
三主三从