了解redis以及使用规则
文章目录
- redis详解
- 一:Redis介绍
- 1.1redis是一个key-value存储系统
- 1.2.redis原子性说明
- 二.redis的持久化说明
- 1.RDB模式:
- 2.AOF模式:
- 三:redis的内存优化策略
- 1:尽量给数据添加超时时间
- 2:利用算法优化一些陈旧的数据
- 四.redis的内存的配置
- 五redis缓存
- 1.缓存穿透:
- 2.缓存击穿:
- 3.缓存雪崩:
- 六:redis分片
- 1.redis一致性hash算法:
- 2.分片的实际作用
- 七.redis哨兵
- 1:实现redis高可用机制
- 2:redis哨兵特点:
- 八.redis的集群:
redis详解
一:Redis介绍
1.1redis是一个key-value存储系统
支持存储的value类型繁多 包括 string-字符串 list-链表、set-集合zset(sorted set)--有序集合 hash-哈希类型
这些数据类型都支持push/pop、add/remove及取交集并集和差集及丰富的操作,
而且这些操作都是原子性的.redis支持各种不同方式的排序。
为了保证效率,数据都是缓存在内存中。
redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件
还实现了master-slave(主从)同步。
常见用法:可以当做缓存可以当做数据库使用 验证码消息中间件使用
1.2.redis原子性说明
redis的操作时单进程单线程操作,所以没有并发性的安全问题,采用队列的方式一个一个操作
二.redis的持久化说明
redis默认条件下支持数据的持久化操作,当redis中有数据时,会定时的保存到磁盘中,
当redis服务器重启时会根据配置文件读取指定的持久化文件,实现数据的恢复
1.RDB模式:
特点:1:redis默认的持久化策略,2:RDB模式记录的是redis内存数据的快照,最新的快照会覆盖掉旧的快照 这种模式占用空间小,持久化效率高--但是定期持久化可能会造成数据丢失命令:save:立刻执行持久化 同步的操作,其他的redis操作会陷入阻塞状态bgsave: 开启后台运行 异步的操作,无法保证数据是最新的配置:dir ./ --持久化文件的位置 , 相对路径的写法RDB模式的持久化策略:save 900 1 900秒内更新一次持久化一次save 300 10 300秒内更新10次持久化一次save 60 10000 30秒内跟新10000次持久化一次
2.AOF模式:
特点:AOF默认条件下是关闭的手动开启:开启之后就以这种模式为主redis.conf 文件中大约699 行 appendonly yes --开启 no--关闭appendonly .aof--持久化文件的名称.后缀异步操作:记录的是用户操作的过程--可以防止用户的数据丢失 这种模式记录的程序运行的状态,持久化文件会相对较大,恢复时间稍微长,需要人为优化redis 效率稍微低了一点配置:appendfsync always --用户操作一次持久化一次appendfsync everysec--每秒持久化一次appendfsync no --不持久化如果数据重要不允许丢失--AOF
如果追求效率也稍微丢失文件使用--RDB
既要保证效率,又要保证数据不丢失--主机使用RDB--从机使用AOF
三:redis的内存优化策略
redis的数据存储都在内存中,如果一直存储必然会造成内存溢出
解决策略一般分为两大类
1:尽量给数据添加超时时间
2:利用算法优化一些陈旧的数据
LRU算法 最近最少使用特点:迄今为止最好用的优化算法,成功率接近100%维度:按照时间T删除数据LFU算法 最不经常使用的维度:按照使用次数删除数据RANDOM算法随机算法,随机到谁就是谁TTL算法: 将要即将超时的数据提前进行删除
四.redis的内存的配置
volatile-lru --设定了超时的时间的数据采用lru算法
allkeys-lru --所有的数据采用lru的算法noeviction --如果内存溢出,错误返回,不做任何操作配置文件中配置maxmemory-policy (具体算法)
五redis缓存
tomcat-服务器的运行速度在150~250之间(JVM调优之后)1000/秒
nginx–服务器的运行速度在3~5万/秒
redis–读11.2万/秒 写8.6万/秒 平均10万/秒
如果有海量的用户请求–但这时redis缓存出现问题 -可能导致整个系统奔溃
1.缓存穿透:
由于某些用户高并发环境下访问数据库不存在的数据时容易导致缓存穿透
解决策略--设定ip限流的操作nginx中或者微服务机制 API网关
2.缓存击穿:
由于用户高并发的环境下,由于某个数据之前存在于内存中,由于特殊原因(数据超时,数据意外删除)
导致redis缓存失效,从而使大量的请求访问数据库--趁他病要他命
解决策略-- 设置超时时间,不设置相同的时间设定多级缓存
3.缓存雪崩:
由于高并发条件下有大量的数据失效然后导致redis的命中率太低,从而使用户直接访问服务器
或者数据库 导致崩溃
解决策略--多级缓存 提高redis缓存的命中率--调整内存优化算法--lru
六:redis分片
如果需要存储海量的数据,只使用一台redis无法保证工作的效率,时间会浪费在寻找数据的时间中
redis的服务需要依赖redis.conf 多台就需要进行多个配置
1.redis一致性hash算法:
常识说明--一般的hash是8位16进制数如果对相同的数据进行hash运算,其结果相同一个数据1M和一个数据1G的hash运算的速度一致一致性hash算法目的解决分布式缓存的问题特性--均衡性:hash结果应该尽可能的平均分配到各个节点上,形成负载均衡由于节点都是通过hash方式进行计算,从而导致不能平均引入虚拟节点,从而进行平衡性单调性:指在新增节点或者在删减节点是不会影响系统的运行分散性:节点数据尽可能分散保存
2.分片的实际作用
好处:Redis分片的主要的作用是实现内存数据的扩容,Redis分片如果宕机不能实现高可用!!!Redis的分片的计算发生在业务服务器中 将需要保存的数据存储到redis中.Redis分片的执行的效率是最高的.影响:分片:实现内存的扩容如果有一个redis节点出现问题,可能导致整个redis宕机从而影响用户访问直接影响用户的体验
七.redis哨兵
1:实现redis高可用机制
配置redis主从的结构:检查redis分片的主从信息命令 info replication
哨兵启动时会监控当期主机,获取主机的详情信息(主从结构)
哨兵利用心跳检测机制,连续三次没有得到主机的反馈信息,则主机宕机
当哨兵发现主机宕机之后,开启选举机制,在当前的从机中选择一台当做新主机,
其他的redis节点设置成新主机的从
2:redis哨兵特点:
Redis哨兵可以实现Redis节点的高可用.但是哨兵本身没有实现高可用机制.
Redis哨兵有主从的结构 实现了内存数据的备份. 但是没有实现内存扩容的效果.
八.redis的集群:
redis分片--可以实现内存数据的扩容,没有高可用的效果,如果宕机将直接影响用户使用
redis哨兵--可以试想redis节点的高可用,但是哨兵本身没有实现高可用机制
需求--需要内存扩容并且实现高可用
使用redis集群
一台主机占用一个槽道 最多有16384个
redis集群进行选举时,连续三次进行选举时出现脑裂的现象–增加主节点的数量有效的降低脑裂的现象(当集群进行选举时,如果连续3次都出现了平票的结果的则可能出现脑裂的现象)
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
