Redis小知识

Redis是啥

redis: Remote Dictionary Service远程字典服务

Redis的端口为什么是6379?

这个端口号也不 是随机选的,而是由手机键盘字母MERZ的位置决定的。MERZ在 Antirez(Redis的作者)的朋友圈语言中是《愚蠢》的代名词,它源于意大利 广告女郎Alessia Merz在电视节目上说了一 堆愚蠢的话.

Redis的过期清理?

redis使用hashtable存储数据的过期时间,但不会时刻去检测数据是否过期,清理过期数据主要分两个阶段完成,第一是在定时器(serverCron)去定时清理过期数据(每隔100毫秒),另一个阶段是在用户获取数据的时候去执行(get, hget)

Redis的内存不够如何处理?

  1. 使用VM虚拟内存
    • 为什么操作系统已经实现了虚拟内存的功能,redis还要重复造轮子: 操作系统的虚拟内存是基于页的概念,linux中每个页大小为4K, redis中大多数的对象远小于,而且redis中的list,set可能存在与多个页
  2. 使用内存淘汰
    • 随机淘汰
    • LRU淘汰算法: 删除一个最近最少访问的key
    • TTL淘汰算法: 删除一个最快过期的key

Redis的命令冲突

  1. get与del命令冲突: 当客户端获取一个比较大的key时(无法通过一个网络IO传输完毕), 这时候另一个客户端执行del命令删除这个key,可能会导致内存段错误

解决方法: 使用引用计数器,当有客户端或其他引用的时候,计数器加一,引用失效的时候减一.当计数器为零的时候就删除这个

Redis为什么是单线程

因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了(毕竟采用多线程会有很多麻烦!)。

Redis的主从同步原理

在这里插入图片描述

  • slave服务器连接到master,发送SYCN请求同步数据
  • master将数据备份到rdb文件,然后传输到slave服务器
  • slave服务器先清空数据库,然后再把rdb文件数据导入
  • 之后master服务器每次数据更新会通过命令形式转发到slave,slave去执行

如何设置主从同步: slave服务器配置文件中新增 slaveoff127.0.0.2 6379

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章