Redis学习
2021-03-10 00:18:35 39 举报
AI智能生成
Redis知识点
作者其他创作
大纲/内容
压测工具
redis-banchmark, 单机支持10w并发
持久化
RDB
save 60 5
fork子进程进行持久化
创建一个临时文件,待持久化完成后替换上次持久化文件
优点:速度快
缺点:最后一次持久化数据可能丢失
快照方式
AOF
appendonly yes
默认不重写,保重数据安全
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
日志方式
如果aof中有错误,redis是启动不起来的
使用工具 redis-check-aof --fix appendonly.aof
优点:数据完整性更好,everysec 最多丢一秒的数据
缺点:相对于rdb修复慢,文件也较大
主从复制(主写,从读),集群
作用
数据冗余:实现数据热备份,是持久化的另一种方式
故障恢复:当主节点出问题时,可以由从节点提供服务
负载均衡:读写分离,一主多从,从节点分担读的压力,提高并发量
高可用的基石(集群)
一般步骤
复制配置文件
修改端口号
修改pid文件名字
修改日志文件名字
修改rdb文件名字
配置主从复制(一般情况下只要配置从机就好了,认老大)
命令方式:slaveof <masterip> <masterport>
真实环境用配置文件配置
slaveof <masterip> <masterport>
有密码要配置密码:masterauth <master-password>
info replication 查看主从信息
哨兵模式,集群
通过发送命令,等待Redis响应,从而监控Redis
sentinel monitor 主机名称 host port 1
1代表主机挂了投票,看那个slave票数多就让他做主机
redis-sentinel 哨兵的配置文件
优点
故障转移,可用性更高
主从模式升级,手动到主动,更加健壮
缺点
不好扩容
配置麻烦
子主题
获取范围值: zrange myset 0 -1
事务
不保证原子性
没有隔离级别概念
开始事务
multi
命令入队
执行事务
exec
放弃事务
discard
队列中命令错误,执行事务报错,所有命令都不会执行
队列中语法错误,执行事务成功,正确命令会执行
监控
watch
Redis-Cluster集群
Redis的分布式存储,也就是说每台redis节点上存储不同的内容
子主题
子主题
子主题
数据类型
String
设置值: set key value
获取值:get key
判断某一个key是否存在:exists key
追加一个字符串:append key "11"
获取字符串的长度:strlen key
自增1(针对数字):incr key
自减1(针对数字):decr key
设置步长,指定减量:decrby key 8
字符串范围:getrange key 0 -1
替换指定位置字符串: setrange key 1 xx
key存在则创建key(1),不存在则创建失败(0):setnx key
设置key过期时间:setex key
批量设置值: mset k1 v1 k2 v2
获取多个值:mget k1 k2
msetnx是一个原子操作,要么都成功,要么都失败
hash
设置值:hset key k v
获取值: hget key k
批量设置值:hmset myhash k1 v1 k2 v2
批量获取:hmget myhash k1
获取所有:hgetall myhash
删除某个值:hdel myhash k
获取大小:hlen
判断hash中key是否存在:hexists myhash
获取所有hash的key:hkeys myhash
获取所有hash的value: hvals myhash
存在则失败,不存在则设置:hsentnx myhash k v
list
将一个值或者多个值插入到列表头部:lpush key a b c
一个值或者多个值插入到队列尾部:rpush key a b c
通过区间获取到值: lrange key 0 -1
移除第一个元素: lpop key
移除最后一个元素:rpop key
通过下标获取list中某个位置的值:lindex key 2
获取list长度: llen key
移除指定元素:lrem key 元素数量 元素
通过下标截取元素, 这个list被改变了只剩下截取的元素: ltrim key 0 1
将列表中指定下标的值替换: lset key 0 v
set
设置值:sadd k v
获取值: smemebers k
判断某个值是否存在:sismemebers k v
获取元素数量: scard k
随即删除集合中元素: spop k
zset
设置值:zadd myset 0 one 1 two
降序排序 ,(输入最小值到最大值):zrangebyscore myset -inf +inf
升序排序,(输入最大值到最小值):zrevrangbyscore myset +inf -inf
移除元素: zrem key member
查看元素个数: zscard key
查看指定区间的成员变量: zcount key 0 -1
子主题
bitmap
Geospatial
Hyperloglog
缓存穿透
缓存和数据库中都没有的数据
1、接口存加校验
2、布隆过滤器:是一种数据结构,对所有可能查询的值以hash形式存储,然后在控制层判断你这个key是否存在,不存在直接return
3、空值也加入缓存,不建议
缓存雪崩
同一时间缓存大面积失效,全部访问数据库
1、批量存数据的时候,把每个key的失效时间几个随机值,让缓存的过期时间不要集中到某一刻
2、如果是集群部署,可以将热点数据均匀分布到不同的Redis
3、如果是Redis服务器宕机导致
高可用:redis集群
4、限流降级
缓存击穿
redisTemplate
手写一个redisTemplate
和雪崩有点像,只是某个热点key失效, 大量请求对这个数据访问,直接落在数据库中
1、设置永久有效
2、互斥锁
jredis
官方推荐的java链接redis的开发工具
lettuce
采用netty,实例可以在多个实例中共享,不存在线程不安全问题
springboot2.X版本默认
配置文件
大小写不敏感
包含其他文件 include .\path\to\local.conf
网络
保护模式 protected-mode yes
bind 127.0.0.1
端口 port 6379
通用配置
daemonize no 以守护进程进程运行后台运行,默认是no
pidfile /var/run/redis.pid 如果以后台方式运行就需要指定一个配置文件
loglevel notice 日志级别 debug verbose notice warning
logfile "server_log.txt" 日志文件地址
databases 16 默认16个数据库
rdb
save 60 10000
stop-writes-on-bgsave-error yes 持久化出错是否继续
stop-writes-on-bgsave-error yes 是否压缩rdb文件
rdbchecksum yes 保存rab文件时候是否进行错误检查
dir ./ rdb文件的保存目录
Replication 主从复制相关的
SECURITY 安全
设置密码 requirepass foobared
maxclients 10000 最大连接数
maxmemory <bytes> 配置最大内存容量
maxmemory-policy noeviction 移除策略
volatile-lru 只对设置了过期时间的key进行LRU(默认值)
allkeys-lru 删除lru算法的key
volatile-random 随机删除即将过期key
allkeys-random 随机删除
volatile-ttl 删除即将过期的
noeviction 永不过期,返回错误
aof
appendonly no 是否开启aof,默认不开启
appendfilename "appendonly.aof" aof持久化的文件
同步方式
appendfsync always 每次都同步
appendfsync everysec 每秒同步一次
appendfsync no 不执行同步,这个时候操作系统自己同步数据
子主题
0 条评论
下一页