最近对华为云分布式缓存产品Redis做了一些研究,于是整理了一些基本的知识拿出来与大家分享,首先跟大家分享的是,如何从不同的角度来详细使用Redis。

小编将从以下9个角度来进行详细分析,希望可以帮到大家。

一、网络模型:

Redis使用单线程的IO复用模型,自己封装了一个简单的AeEvent事件处理框架,主要实现了epoll、kqueue和select,对于单纯只有IO操作来说,单线程可以将速度优势发挥到最大,但是Redis也提供了一些简单的计算功能,比如排序、聚合等,对于这些操作,单线程模型实际会严重影响整体吞吐量,CPU计算过程中,整个IO调度都是被阻塞住的。

二、内存管理:

Redis使用现场申请内存的方式来存储数据,并且很少使用free-list等方式来优化内存分配,会在一定程度上存在内存碎片,Redis跟据存储命令参数,会把带过期时间的数据单独存放在一起,并把它们称为临时数据,非临时数据是永远不会被剔除的,即便物理内存不够,导致swap也不会剔除任何非临时数据(但会尝试剔除部分临时数据),这点上Redis更适合作为存储而不是cache。

三、数据一致性问题:

在一致性问题上,个人感觉Redis没有memcached实现的好,Memcached提供了cas命令,可以保证多个并发访问操作同一份数据的一致性问题。 Redis没有提供cas 命令,并不能保证这点,不过Redis提供了事务的功能,可以保证一串命令的原子性,中间不会被任何操作打断。

四、支持的KEY类型:

Redis除key/value之外,还支持list,set,sorted set,hash等众多数据结构,提供了KEYS进行枚举操作,但不能在线上使用,如果需要枚举线上数据,Redis提供了工具可以直接扫描其dump文件,枚举出所有数据,Redis还同时提供了持久化和复制等功能。

五、客户端支持:

Redis官方提供了丰富的客户端支持,包括了绝大多数编程语言的客户端,比如我此次测试就选择了官方推荐了Java客户端Jedis.里面提供了丰富的接口、方法使得开发人员无需关系内部的数据分片、读取数据的路由等,只需简单的调用即可,非常方便。

六、数据复制:

从2.8开始,Slave会周期性(每秒一次)发起一个Ack确认复制流(replication stream)被处理进度, Redis复制工作原理详细过程如下:

1. 如果设置了一个Slave,无论是第一次连接还是重连到Master,它都会发出一个SYNC命令;

2. 当Master收到SYNC命令之后,会做两件事:

a) Master执行BGSAVE:后台写数据到磁盘(rdb快照);

b) Master同时将新收到的写入和修改数据集的命令存入缓冲区(非查询类);

3. 当Master在后台把数据保存到快照文件完成之后,Master会把这个快照文件传送给Slave,而Slave则把内存清空后,加载该文件到内存中;

4. 而Master也会把此前收集到缓冲区中的命令,通过Reids命令协议形式转发给Slave,Slave执行这些命令,实现和Master的同步;

5. Master/Slave此后会不断通过异步方式进行命令的同步,达到最终数据的同步一致;

6. 需要注意的是Master和Slave之间一旦发生重连都会引发全量同步操作。但在2.8之后,也可能是部分同步操作。

2.8开始,当Master和Slave之间的连接断开之后,他们之间可以采用持续复制处理方式代替采用全量同步。

Master端为复制流维护一个内存缓冲区(in-memory backlog),记录最近发送的复制流命令;同时,Master和Slave之间都维护一个复制偏移量(replication offset)和当前Master服务器ID(Masterrun id)。

当网络断开,Slave尝试重连时:

a. 如果MasterID相同(即仍是断网前的Master服务器),并且从断开时到当前时刻的历史命令依然在Master的内存缓冲区中存在,则Master会将缺失的这段时间的所有命令发送给Slave执行,然后复制工作就可以继续执行了;

b. 否则,依然需要全量复制操作。

七、读写分离:

Redis支持读写分离,而且使用简单,只需在配置文件中把Redis读服务器和写服务器进行配置,多个服务器使用逗号分开如下:

八、水平动态扩展:

历时三年之久,终于等来了期待已由的Redis 3.0。新版本主要是实现了Cluster的功能,增删集群节点后会自动的进行数据迁移。实现 Redis 集群在线重配置的核心就是将槽从一个节点移动到另一个节点的能力。因为一个哈希槽实际上就是一些键的集合, 所以 Redis 集群在重哈希(rehash)时真正要做的,就是将一些键从一个节点移动到另一个节点。

九、数据淘汰策略:

Redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。Redis 提供 6种数据淘汰策略:

volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰

volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰

volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰

allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰

allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰

小编写的都是一些偏新手向的东西,希望各位大咖见了不要笑话我,作为一个菜鸟也希望能够帮到其他人,毕竟入这一行着实需要不断学习和总结,如果想进行深入的探讨欢迎来华为云社区论坛发帖,这里大咖云集,也可以上华为云帮助中心,里面的资料也是精心编写的干货。感谢!

转载于:https://www.cnblogs.com/husterindg/p/10615963.html

新手向:从不同的角度来详细分析Redis相关推荐

  1. 新手如何使用腾讯云云服务器详细教程

    新手如何使用腾讯云云服务器详细教程 腾讯云提供如下方式进行云服务器的配置和管理: 控制台:腾讯云提供的 Web 服务界面,用于配置和管理云服务器. API:腾讯云也提供了 API 接口方便您管理云服务 ...

  2. LinkedHashMap 源码详细分析(JDK1.8)

    1. 概述 LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题.除此之外,Linke ...

  3. linux 对象管理器,Linux多安全策略和动态安全策略框架模块详细分析之函数实现机制中文件对象管理器分析(3)...

    3.决策的实施 当主体对客体进行访问时,客体管理器会收集主体和客体的SID,并根据此SID对在AVC中进行查找:如果找到,则根据相应的安全决策进行处理:反之客体管理器会将主体的SID.客体的SID以及 ...

  4. linkedhashmap 顺序_LinkedHashMap 源码详细分析(JDK1.8)

    1. 概述 LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题.除此之外,Linke ...

  5. 文件压缩算法详细分析(ZIP)及解压实例解释

    原文地址:https://www.cnblogs.com/esingchan/p/3958962.html 最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据 ...

  6. ZIP压缩算法详细分析及解压实例解释

    最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...

  7. 【渗透实战】web渗透实战,相对高安全级别下,详细分析整个渗透过程以及介绍社工的巧妙性,拿一站得数十站,(漏洞已交)

    ''' 版权tanee 转发交流请备注 漏洞已经提交管理员 关键过程的截图和脚本代码已经略去.希望大家学习技术和思路就好,切勿进行违法犯罪的活动.本实战案例仅作为技术分享,切勿在未经许可的任何公网站点 ...

  8. ZIP压缩算法详细分析及解压实例

    最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...

  9. MOSFET导通、关断过程详细分析、损耗分析、米勒效应、datasheet解释

    一,MOSFET导通.关断过程详细分析(转)详见下 MOSFET导通.关断过程详细分析(转) - 知乎 二,弄懂mosfet的导通过程和损耗分析  详见下 弄懂MOS管的导通过程和损耗分析 三.MOS ...

最新文章

  1. 希捷银河声音大_【推仔说新闻】那款硬盘它终于来了 希捷推出首款双磁臂硬盘...
  2. 调用远程摄像头进行人脸识别_工地安全:AI如何实现安全帽检测与人脸识别?...
  3. 1.11 双向神经网络
  4. 数据结构 python堆_Python中的堆栈数据结构是什么?
  5. Unity3D自定义资源配置文件
  6. 轻松搭建Redis缓存高可用集群
  7. 分布式存储系统学习笔记(二)—分布式文件系统(1)—Google文件系统GFS
  8. 你得真心喜欢些什么,才能过好漫长的冬天
  9. hping 详解_hping3命令
  10. Linux内核崩溃转存,Ubuntu 12.04 配置内核崩溃自动重启及转存
  11. TDSQL TCA 分布式实例特点初探--分布表和SQL透传
  12. nacos 消息机制
  13. 秒速五厘米(为情怀而补的题)
  14. 修改计算机ip地址cmd,win7系统通过命令提示符将系统修改为静态IP地址的方法【图文】...
  15. java正则包含特殊字符_java – 捕获由特殊字符嵌套/包含的正则表达式组
  16. 帕累托改进和帕累托最优、卡尔多-希克斯改进
  17. 基于C++的坦克动荡游戏
  18. 小学用计算机画画 说课,体验电脑画画小学信息技术说课稿.docx
  19. cocos2dx 编译android-studio nkd报错的解决方法
  20. 【DBC专题】-7-在DBC中创建一个Signal Group信号组

热门文章

  1. shutdown函数和FIN_WAIT2状态
  2. python三十四:json模块
  3. 专访阿里云MVP王俊杰:开发者的超能力是用技术让世界更美好
  4. 统一认证服务CAS 5安装
  5. Android 系统镜像: boot.img kernel.img ramdisk.img system.img userdata.img cache.img recovery.img
  6. 一次向svn中增加所有新增文件 svn add all new files【转】
  7. AMD加载器实现笔记(四)
  8. SOA:A note on RPC
  9. 使用JFreeChart绘制散点图
  10. Python print函数不换行操作