下面由redis教程栏目给大家介绍分析redis原理及实现,希望对需要的朋友有所帮助!
redis是nosql(也是个巨大的map) 单线程,但是可处理1秒10w的并发(数据都在内存中)
使用j*a对redis进行操作类似jdbc接口标准对mysql,有各类实现他的实现类,我们常用的是druid
其中对redis,我们通常用Jedis(也为我们提供了连接池JedisPool)
在redis中,key就是byte[](string)
redis的数据结构(value):
String,list,set,orderset,hash
先安装好redis,然后运行,在pom文件中引入依赖,在要使用redis缓存的类的mapper.xml文件配置redis的全限定名。引入redis的redis.properties文件(如果要更改配置就可以使用)
应用场景:
String :
1存储json类型对象,2计数器,3优酷视频点赞等
list(双向链表)
1可以使用redis的list模拟队列,堆,栈
2朋友圈点赞(一条朋友圈内容语句,若干点赞语句)
规定:朋友圈内容的格式:
1,内容: user:x:post:x content来存储;
2,点赞: post:x:good list来存储;(把相应头像取出来显示)
hash(hashmap)
1保存对象
2分组
3 string与hash的数据差别
在网路传输时候,必须要进行进行序列化,才可以进行网路传输,那么在使用string类型的类型的时候需要进行相关序列化,hash也是要进行相关的系列化,所以会存在很多序列化,在存储的时候hash是可以存储的更加丰富,但是在反序列化的时候,string的反序列化相对较低,而hash的序列化和返序列化是相对hash类更加复杂,所以看业务场景,如果是数据经常修改的那种,为了性能可以使用string,如果是数据不是经常改的那种就可以使用hash,由于hash,存储数据时比较丰富,可以存储多种数据类型
4 redis的持久化方式:
能,将内存中的数据异步写入硬盘中,两种方式:RDB(默认)和AOF
RDB持久化原理:通过bgs*e命令触发,然后父进程执行fork操作创建子进程,子进程创建RDB文件,根据父进程内存生成临时快照文件,完成后对原有文件进行原子替换(定时一次性将所有数据进行快照生成一份副本存储在硬盘中)
优点:是一个紧凑压缩的二进制文件,Redis加载RDB恢复数据远远快于AOF的方式。
缺点:由于每次生成RDB开销较大,非实时持久化,
AOF持久化原理:开启后,Redis每执行一个修改数据的命令,都会把这个命令添加到AOF文件中。
优点:实时持久化。
缺点:所以AOF文件体积逐渐变大,需要定期执行重写操作来降低文件体积,加载慢
5 redis单线程为什么这么快
redis是单线程的,但是为什么还是这么快呢,
原因1: 单线程,避免线程之间的竞争
这是一套电子商城购物系统的模版,功能类似于8848网站,可以实现商品的两级分类管理,管理功能包括用户注册,商品大类小类添加,商品管理,管理员管理及用户定单管理等,是一套完整的购物系统,可随意修改成不同的模式
2
查看详情
原因2 :是内存中的,使用内存的,可以减少磁盘的io
原因3:多路复用模型,用了缓冲区的概念,selector模型来进行的
redis提供了哨兵模式,当主挂了,可以选举其他的进行代替,哨兵模式的实现原理,就是三个定时任务监控,
6.1 每隔10s,每个S节点(哨兵节点)会向主节点和从节点发送info命令获取最新的拓扑结构
6.2 每隔2s,每个S节点会向某频道上发送该S节点对于主节点的判断以及当前Sl节点的信息,
同时每个Sentinel节点也会订阅该频道,来了解其他S节点以及它们对主节点的判断(做客观下线依据)
6.3 每隔1s,每个S节点会向主节点、从节点、其余S节点发送一条ping命令做一次心跳检测(心跳检测机制),来确认这些节点当前是否可达
当三次心跳检测之后,就会进行投票,当超过半数以上的时候就会将该节点当做主
redis集群在3.0以后提供了ruby脚本进行搭建,引入了糙的概念,
Redis集群内节点通过ping/pong消息实现节点通信,消息不但可以传播节点槽信息,还可以传播其他状态如:主从状态、节点故障等。因此故障发现也是通过消息传播机制实现的,主要环节包括:主观下线(pfail)和客观下线(fail)
主客观下线:
主观下线:集群中每个节点都会定期向其他节点发送ping消息,接收节点回复pong消息作为响应。如果通信一直失败,则发送节点会把接收节点标记为主观下线(pfail)状态。
客观下线:超过半数,对该主节点做客观下线
主节点选举出某一主节点作为领导者,来进行故障转移。
故障转移(选举从节点作为新主节点)
Redis的内存淘汰策略是指在Redis的用于缓存的内存不足时,怎么处理需要新写入且需要申请额外空间的数据。
noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。
allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key。
allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key。
volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key。
volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key。
volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除。
原因:就是别人请求数据的时候,很多数据在缓存中无法查询到,直接进入数据查询,
解决方法,对相关数据进行查询的数据只查询缓存,如果是一些特殊的可以进行数据库查询,
也可以采用布隆过滤器进行查询
缓存雪崩的原因:一次性加入缓存的数据过多,导致内存过高,从而影响内存的使用导致服务宕机
解决方法:
1 redis集群,通过集群方式将数据放置
2 后端服务降级和限流:当一个接口请求次数过多,那么就会添加过多数据,可以对服务进行限流,限制访问的数量,这样就可以减少问题的出现
以上就是分析redis原理及实现的详细内容,更多请关注其它相关文章!
# 盘中
# 潍坊网站建设单位
# 重庆seo关键词排名
# 锦州推广网站建设企业
# 淘宝营销宣传推广方式
# 安溪人工营销推广
# 泰安网站建设优化
# 网络优化seo考核
# soho公寓营销推广
# 西安营销推广找哪家
# 长治网站推广营销公司
# redis
# 挂了
# 会把
# 可以使用
# 会向
# 每隔
# 单线程
# 就会
# 移除
# 序列化
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
晨报|开发商暗示《空洞骑士:丝之歌》DLC开发中 《合金装备4》有望重制
Flexbox布局实践:实现底部页脚与顶部粘性导航条的完美结合
铁路12306买票怎么选双人铺 铁路12306卧铺分配规则说明
《虎扑》关闭社区内容推荐方法
mysql中如何分析索引使用情况_mysql索引使用分析方法
酷狗音乐多音轨设置教程
Leaflet地图弹出窗口图片动态显示:避免缺失图标的专业指南
如何在Python中安全地将环境变量转换为整数并满足Mypy类型检查
《密马》发布账号方法
抖音如何进行蓝V认证 抖音企业号申请所需资料与流程
微信朋友圈怎么设置三天可见 微信朋友圈设置指定天数可见步骤【教程】
RxJS中如何高效地在一个函数内处理和合并多个数据集合
J*aScript:从子元素中批量移除特定CSS类
OpenWeatherMap API:通过城市名称获取天气预报数据指南
FullCalendar自定义按钮样式定制指南
小红书网页版怎么进 小红书网页版通用入口
抖音号升级成企业资质怎么弄?有什么好处?
如何查询个人病历记录
C++怎么实现一个红黑树_C++高级数据结构与平衡二叉搜索树
Golang如何测试结构体方法_Golang reflect方法测试与调用技巧
Go反射进阶:访问内嵌结构体中的被遮蔽方法
如何查找哪个composer包引入了特定的依赖?
纯CSS实现自适应宽度与响应式布局的水平按钮组
《全民k歌》网页版最新登录入口一览
微信客户端怎么查看二维码_微信客户端个人二维码查看方法
AO3中文版手机快速通道_AO3最新稳定链接更新
《跳跳舞蹈》循环播放方法
嘴唇干裂起皮怎么办 唇部护理与预防干裂的方法【详解】
批改网官网首页登录 批改网学生用户登录入口
基于键值条件高效映射 Pandas DataFrame 多列数据
如何测试您的网站全球打开速度-网站海外测速工
高效调试PHP大型嵌套数组:JSON序列化与可视化工具实践
J*aScript深度克隆:实现高效、健壮与安全的复杂对象复制
邮编号码查询app有哪些_邮编号码查询推荐app及使用体验
J*aScript与HTML元素交互:图片点击事件与链接处理教程
Go Goroutine调度与并发执行深度解析
Word如何将文字快速转成表格 Word文本转换成表格功能使用技巧【效率】
Google Drive API 认证:服务账户与OAuth 2.0的选择与实践
J*aScript模拟悬停与点击:自动化网页动态元素交互指南
Flask 应用中图片动态更新与上传:实现客户端定时刷新与服务器端文件管理
MySQL多重JOIN技巧:高效关联同一表获取多角色信息
解决 Vue 3 组件未定义错误:理解 createApp 与根组件的正确使用
《爱笔思画x》魔棒工具抠图教程
Django模型动态关联检查:高效管理复杂关系
教育查询官方网站入口 教育个人档案查询免费官网
iCloud官方网站 iCloud网页版在线登录入口
解决CSS background 属性中 cover 关键字的常见误用
如何在Podman容器中运行Composer_Docker替代品Podman的PHP与Composer容器化实践
Linux如何自动分析系统异常日志_Linux日志智能检测
《tt语音》超级玩家开通方法
2020-10-22
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。