redis
  • 数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
  • 数据类型
    • string:最基本的数据类型,二进制安全的字符串,最大512M。
    • list:按照添加顺序保持顺序的字符串列表。
    • set:无序的字符串集合,不存在重复的元素。
    • sorted set:已排序的字符串集合。
    • hash:key-value对的一种集合。
    • bitmap:更细化的一种操作,以bit为单位。
    • hyperloglog:基于概率的数据结构
  • Redis与Memcached的区别与比较
    • 1. Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。memcache支持简单的数据类型,String。
    • 2 、Redis支持数据的备份,即master-slave模式的数据备份。
    • 3 、Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用,而Memecache把数据全部存在内存之中
    • 4、 redis的速度比memcached快很多
    • 5、Memcached是多线程,非阻塞IO复用的网络模型;Redis使用单线程的IO复用模型。
    • Memcached追求的高性能的内存服务;而Redis追求的不仅仅是内存运行,还有数据持久化的需
    • Memcached与Redis都是C语言实现,但是不约而同的都抛弃了传统C语言中的malloc/free函数,而选择了自主实现内存模型。
    • Memcached使用预分配的内存池的方式,使用slab和大小不同的chunk来管理内存,Redis使用现场申请内存的方式来存储数据,会在一定程度上存在内存碎片。
  • Redis优点
    • (1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
    • (2)支持丰富数据类型,支持string,list,set,sorted set,hash
    • (3) 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
    • (4) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
  • Redis list的实现为一个双向链表
  • string类型是Redis最基本的数据类型,一个键最大能存储512MB。
  • sorted set增加了一个权重参数score,使得集合中的元素能够按score进行有序排列。
  • redis有哪些数据淘汰策略
    • 1. volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
    • 2. volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
    • 3. volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
    • 4. allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
    • 5. allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
    • 6. no-enviction(驱逐):禁止驱逐数据
  • Redis为单进程单线程模式,采用队列模式将并发访问变为串行访问。Redis本身没有锁的概念。
  • Redis 大量数据插入
    • 从Redis 2.6开始redis-cli支持一种新的被称之为pipe mode的新模式用于执行大量数据插入工作。

      • cat data.txt | redis-cli --pipe

        • 读取数据的同时,解析它。在分析回复的时候,我们会采用计数器的方法计数.
  • 持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。
  • RESP 是redis客户端和服务端之前使用的一种通讯协议
  • Redis 提供了两种持久化方式:RDB(默认) 和AOF 
    • AOF(append-only file)

      • 以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。
      • 3种同步策略
        • 每秒同步
        • 每修改同步
        • 不同步
      • 如果日志过大,Redis可以自动启用rewrite机制。即Redis以append模式不断的将修改数据写入到老的磁盘文件中,同时Redis还会创建一个新的文件用于记录此期间有哪些修改命令被执行。
    • RDB(Redis DataBase)
      • 将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化
      • 实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。
      • 数据高可用性存在问题,因为系统一旦在定时持久化之前出现宕机现象,此前没有来得及写入磁盘的数据都将丢失。
      • (fork 子进程)当数据集较大时,可能会导致整个服务器停止服务几百毫秒,甚至是1秒钟。
    • 二者选择的标准,就是看系统是愿意牺牲一些性能,换取更高的缓存一致性(aof),还是愿意写操作频繁的时候,不启用备份来换取更高的性能,待手动运行save的时候,再做备份(rdb)
  • 集群解决
    • 1. 增加中间层,隔离具体依赖

      • 缺点:需要维护proxy的高可用,twermproxy会成为一个单点

    • 2. 让redis服务器知道彼此的存在
      • 通过重定向的机制来引导客户端来完成自己所需要的操作,比如客户端链接到了某一个redis服务器,说我要执行这个操作,redis服务器发现自己无法完成这个操作,那么就把能完成这个操作的服务器的信息给到客户端,让客户端去请求另外的一个服务器,这时候你就会发现每一个redis服务器都需要保持一份完整的分布式服务器信息的一份资料,不然它怎么知道让客户端去找其他的哪个服务器来执行客户端想要的操作呢。
  • 而redis官方给出的cluster方案则是把分布式的这部分事情做到了每一个redis服务器中,使其不再需要其他的组件就可以独立的完成分布式的要求。
  • redis的持久化指的是redis会把内存的中的数据写入到硬盘中,在redis重新启动的时候加载这些数据,从而最大限度的降低缓存丢失带来的影响,解决缓存雪崩。
  • Redis Cluster的具体实现细节则是采用了Hash槽的概念,即预先分配出来16384个槽:在客户端通过对Key进行CRC16(key)% 16384运算得到对应的槽是哪一个;在redis服务端则是每个服务器负责一部分槽 https://mp.weixin.qq.com/s/HUmByMp__slWxoOFdbQCOg
  • redis保证lua脚本的原子性,一定的场景下,是可以代替redis提供的事务相关的命令的。 https://segmentfault.com/a/1190000012919740?utm_source=tag-newest
  • 管道
    • 因为redis的客户端和服务器的连接时基于TCP的, 默认每次连接都时只能执行一个命令。管道则是允许利用一次连接来处理多条命令,从而可以节省一些tcp连接的开销。管道和事务的差异在于管道是为了节省通信的开销,但是并不会保证原子性。
  • 分布式锁 https://mp.weixin.qq.com/s/ZmMx6qICoquvuxw1LKNz3w
    • value中存入过期时间,重设过期时间,使用getSet()。释放锁时,还需判断key是否过期,不能直接删除。

面霸之路--Redis相关推荐

  1. 『王霸之路』从0.1到2.0一文看尽TensorFlow奋斗史

    补充推荐阅读: 1.『带你学AI』带你学AI与TensorFlow2实战之入门初探:如何速成深度学习开发 2.[深度应用]·首届中国心电智能大赛初赛开源Baseline(基于Keras val_acc ...

  2. 王霸之路:从0.1到2.0,一文看尽TensorFlow“奋斗史”

    0 序篇 2015年11月,Google正式发布了Tensorflow的白皮书并开源TensorFlow 0.1 版本. 2017年02月,Tensorflow正式发布了1.0.0版本,同时也标志着稳 ...

  3. 程序员修神之路--redis做分布式锁可能不那么简单

    点击上方"蓝字"带你去看小星星 菜菜哥,复联四上映了,要不要一起去看看? 又想骗我电影票,对不对? 呵呵,想去看了叫我呀 看来你工作不饱和呀 哪有,这两天我刚基于redis写了一个 ...

  4. 架构师之路-redis学习

    redis概述 Redis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库. Redis 可以存储键和五 ...

  5. 重学之路--Redis(1)

    基于狂神视频的笔记 Nosql概述 为什么Nosql 原来的架构–单机Mysql Memcached(缓存)+mysql+垂直拆分(读写分离) 减轻数据的压力 使用缓存来保证效率 分库分表 +水平拆分 ...

  6. 重学之路-Redis(2)

    基于狂神视频做的笔记 事务 Redis 事务本质:一组命令的集合!事务中的所有命令都会被序列化,在事务执行过程中,会按照顺序执行! 一次性,顺序性,排他性!执行一系列命令! Redis事务没有隔离级别 ...

  7. 超神之路-Redis

    一.基础 1.简单介绍下Redis C写的开源高性能非关系型键值对数据库.底层采取epoll读写速度非常快,大多用于缓存,也提供了事务.持久化.集群以及多种数据类型的功能. 2.你认为Redis有哪些 ...

  8. 十二张图详解Redis的数据结构和对象系统

    回顾:大数据平台技术栈 (ps:可点击查看),今天就来说说其中的Redis! 本文来自:张狗蛋的技术之路 Redis是一个开源的 key-value 存储系统,它使用六种底层数据结构构建了包含字符串对 ...

  9. redis的持久化方式RDB和AOF的区别

    https://blog.csdn.net/m0_38110132/article/details/76906422 博客 学院 下载 图文课 论坛 APP 问答 商城 VIP会员 活动 招聘 ITe ...

最新文章

  1. ffmpeg 播放器原理
  2. Nginx服务测试时的一些配置:wireshark、常用搜索URL格式、关闭防火墙、siege
  3. DL之IDE:深度学习之计算机视觉开发环境搭建的详细流程(Ubuntu16.04+cuda9.0+cuDNN7.4.2+tensorflow_gpu)
  4. 程序员远程办公需要面临哪些挑战?
  5. 【渝粤题库】国家开放大学2021春2724市场营销原理与实务题目
  6. leetcode165. 比较版本号 超级重要的细节
  7. CloudIDE插件开发实战:教你如何调试代码
  8. 一用户使用LTC以168万美元的价格购入收藏界“圣杯“卡片
  9. CentOS7下Telegraf+InfluxDB+Grafana 搭建服务器监控平台
  10. poj 1657 Distance on Chessboard
  11. StanfordDB class自学笔记 (16) 心得体会
  12. protues打不开问题
  13. 静态代码分析工具大全
  14. 安卓 基于百度LBS的定位
  15. 为何中国移动的上网速度最慢,无阻它成为最大运营商?
  16. php现在编辑pdf,用PHP编辑PDF?
  17. docker安装UnlockMusic(音乐格式转换工具 )
  18. 北大计算机专硕学费,北京大学专业硕士学费被曝高达2.2万元/年
  19. 代码写成这样,老夫无可奈何!
  20. 显示前半内容后半内容用省略号_德语 OCR

热门文章

  1. HDFS中namenode故障处理
  2. 压测ES-cpu高解决方案
  3. mysql最左匹配原则遇到like_MySQL最左匹配原则
  4. blackberry起步-图片滚动
  5. 设置Windows账号出错,该组不存在client
  6. object转map,object转jsonArray
  7. protobuf gzip压缩 解压缩的使用方法
  8. 便民查询简介-markdown
  9. 嘟嘟连忙上前非常有礼貌的说
  10. 亚里士多德的现代意义