Redis总结大全

Redis简介
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
nginx: 3-5万/秒
redis: 读: 11.2万/秒 写: 8.6万/秒 平均10万/秒
吞吐量: 50万/秒
在这里插入图片描述

Linux中的操作命令
linux中redis的操作命令:
redis-cli -p 6379 进入客户端
ps -ef | grep redis 查看服务器有没有在启动

redis的api :
set的集合的作用是去重
jedis.setnx 判断是否有值,有值的话就不做更改,没有值则新增值

Redis的作用?

1.redis 可以当做数据库、中间件、缓存使用

2.支持5种数据类型string、list集合、hash哈希,set的集合

3.为什么不用单台redis? 分片 优点:为了实现扩容 缺点:容易数据缺失->哨兵机制 可以实现redis的高可用,但是哨兵本身没有高可用。 有宕机,首先要判断宕机ping pang机制,超过半票就确定宕机,选举超过半票 就可以当主机。 分区就是集群。

4.redis没有多线程安全,因为他是单进程 单线程。

1.Redis持久化策略

1.1 什么是持久化?

说明:redis运行环境在内存中,如果redis服务器关闭,则内存数据会丢失。
需求:如何保存内存数据呢?
解决方案:可以定期将 内存数据持久化到磁盘中
持久化策略规则
当redis正常运行时,定期将数据保存到磁盘中,当redis服务器重启时,则根据配置文件中指定的持久化的方式,实现数据的恢复。(读取数据,之后恢复数据)

1.2 RDB模式

1.2.1RDB模式特点的说明

1.RDB是redis默认的持久化策略
2.rdb模式定期(时间间隔)持久化 弊端:可能会导致数据的丢失
3.rdb模式记录的是内存数据的快照,持久化效率高,快照只保留最新的记录

1.2.2 RDB模式命令

1.save命令:将内存数据持久化到磁盘中 主动的操作 会造成线程的阻塞
2.bgsave命令:将内存数据采用后台运行的方式,持久化到文件中,不会造成阻塞
3.默认的持久化的机制
save 900 1 如果在900秒里,执行了一次更新操作,则持久化一次
save 300 10 如果在300秒里,执行了十次更新操作,则持久化一次
save 60 10000 如果在60秒里,执行了10000次更新操作,则持久化一次

1.2.3 AOF模式

1.2.4 AOF模式特点

1.aof模式默认条件下是关闭的,需要手动开启
2.aof模式记录的是用户操作的过程,所有可以实现实时持久化从操作
3.aof模式由于记录得是实时的操作过程,持久化文件较大,需要定期维护

1.2.5启动AOF模式

在这里插入图片描述

1.3 关于持久化操作总结

1.当内存允许数据少量丢失的时候,采用RDB模式(快)
2.当内存数据不允许丢失时,采用AOF模式(定期维护 持久化文件)
3.一般工作中采用AOF和RDB相结合的模式共同作用,保证数据的有效性

1.4面试题

问题:如果小浩在公司服务器中执行了flushAll命令,咋办?
答: 需要找到aof文件之后,删除flushAll命令,之后重启redis,执行save命令即可

2.内存优化策略

2.1 为什么要进行内存优化?

原因:由于redis在内存中保留数据,如果一直保存数据肯定会内存满,然后内存溢出啊,所以就要定期维护内存数据的大小

办法:删除旧的不经常用的数据,保留新的常用的数据

2.2LRU算法

LRU,最近最少使用,是一种常用的页面置换算法
计算维度: 时间T
注意事项: LRU算法是迄今为止内存中最好用的数据置换算法

2.3 LFU

算法维度: 使用次数

2.4 随机算法

2.5 TTL算法

根据剩余的存活时间,将马上要超时的数据提前删除.

3.关于缓存面试问题(重点啊啊啊)

问题出发点喔:
由于缓存失效导致大量的用户请求直接访问数据库服务器,导致负载过高,从而引发整体宕机的风险!!

3.1缓存穿透

说明:用户频繁访问数据库中不存在的数据,可能会导致缓存穿透的现象,如果该操作是高并发操作,则可能直接威胁数据库服务器

解决方案:
1.采用IP限流的方式 降低用户访问服务器的次数,IP动态代理(一分钟变一次)
2.微服务的处理方式,利用断路器返回执行的业务数据即可不执行数据库操作,从而保护了数据库(Hystrix 熔断 10秒20次请求,50%失败降级)
3.微服务处理方式:api网关,不允许非法操作

3.2缓存击穿

说明:当缓存和数据库某一数据由于超时/删除等操作造成数据失效的时候,高并发多用户访问这个数据的时候直接访问数据库,会造成数据库压力过高,会导致数据损坏,甚至宕机的风险!!!

解决方案:
1.采用多级缓存的方法,保护数据库
2.同时数据超时时间采用随机数的方式在这里插入图片描述

3.3缓存雪崩

说明:redis缓存中大部分数据失效,用户访问命中率太低,大量用户直接访问数据库,会导致整体数据库宕机风险!!
解决方案:
1.禁止使用flushall等敏感操作
2.采用多级缓存
3.设置不同的超时时间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java中的战斗机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值