redis 那些事儿
1 我的数据存入redis了但是怎么不见了?
redis的内存使用是有限的,一直向redis中写入数据(如果配置了allkeyLRU)就会触发内存淘汰机制,将最近没有访问过的的key,value删除掉。
2 数据设置了过期时间,到时间以后内存仍然看不到明显被释放呢?
redis如果key设置了过期时间,清除算法是 “随机淘汰机制”+“被动删除机制”;当redis有一批key到达了过期时间,则会随机抽样删除一部分key,但是很多key会在你访问的时候去校验,如果过期则直接删除给你返回空值。这样做大大提升了redis的性能,否则加入几十万个key同时国企,redis又要完全主动删除则会非常消耗cpu!!!
3 redis为什么性能这么好
1)基于内存的数据存储;
2)单线程内存模型,相比多线程会省去很多并发处理的内部逻辑,从而提高了效率‘
3)多路复用机制,数据插入时由带有Looper监控的异步队列处理机制控制,并发性极好
4)采用RESP协议,实现容易,解析速度快,而且可读性很高。
4 redis的主从复制原理
1)redis主从同步是基于RDB的快照进行的,当发生数据同步时,master节点会fork出子进程来进行dump.rdb的生成,如果配置了无磁盘化的操作时则将rdb直接发送给slave节点,并不会将dump.rdb放在本地一份;salve收到dump.rdb数据以后会落地磁盘然后将数据加载到内存。
2)那么redis2.8以后也支持断点续传,重启后任然可以根据offset继续发送数据。
5 reids“集群脑裂”和“异步复制”丢失数据问题:
(1)如果master写入数据后直接挂掉,slave还没来得及同步数据。
(2)脑裂:1个master,2个slave节点,如果master突然出现网络分区那么剩余的两个slave节点就会从中选举出一个节点作为master。这个时候集群中就会出现两个master,而这时有可能client还没有指向到新的master;而被分区的master恢复正常以后重新以slave身份加入集群会清除掉自己的数据,然后重新同步新的master数据,在这里会丢失数据。
解决办法:
配置参数min-slaves-to-write:1 master至少有1个slave节点挂接否则将拒绝客户端写入。
配置参数min-slaves-max-lag:10 如果master异步复制到slave的节点数据ack超过10秒,则master拒绝客户端写入
这样配合设置能够保证最多只丢失10秒的数据;当master拒绝后,客户端无法链接时jedis提供了mapcache机制,暂时保存数据,等到切换master成功后会将数据发送过去。
6 redis的savecheck检查点
- 5分钟 1个key变化就复制一份
- 1分钟100个key变化就复制一份
- 1秒钟1000key变化就复制一份
redis 那些事儿的更多相关文章
- 聊一聊Redis事务
没错,Redis也有事务管理,但是功能很简单,在正式开发中也并不推荐使用.但是面试中有可能会问到,所以本文简单谈一谈Redis的事务. 通过这篇文章,你会了解 Redis为什么要提供事务? Redis ...
- Redis可以做哪些事儿?
Redis可以作为数据库,提供高速缓存,消息队列等功能,这里介绍Redis可以做的其中两件事: 1.提供缓存功能,作为缓存服务器; 2.轻量级的消息队列(MQ)进行使用. /// <summar ...
- Redis缓存哪些事儿
一提到Redis缓存,我们不得不了解的三个问题就是:缓存雪崩.缓存击穿和缓存穿透.这三个问题一旦发生,会导致大量的请求直接请求到数据库层.如果并发压力大,就会导致数据库崩溃.那p0级的故障是没跑了. ...
- Redis 1:简介
导读:在今日开讲的项目中,用到了redis数据库.老听大家在说,我都不知道是个啥玩意儿.然后这两天在准备知识分享的事儿,我先大概了解了解,然后讲的时候,能有点共鸣.所以,本篇博客,是在自己跟读完MVA ...
- 【redis】06Redis的高级应用之事务处理、持久化操作、pub_sub、虚拟内存
上节课详细讲解了redis数据库的常用命令,以及redis数据库高级应用当中的, 安全性,跟咱们的主从复制, 这节课呢,咱们继续来讲咱们的高级应用, 首先来看一下咱们的事务处理, 事务处理 我前面说过 ...
- [转载] 十五分钟介绍 Redis数据结构
转载自http://blog.nosqlfan.com/html/3202.html?ref=rediszt Redis是一种面向“键/值”对类型数据的分布式NoSQL数据库系统,特点是高性能,持久存 ...
- 豌豆夹Redis解决方式Codis源代码剖析:Proxy代理
豌豆夹Redis解决方式Codis源代码剖析:Proxy代理 1.预备知识 1.1 Codis Codis就不详细说了,摘抄一下GitHub上的一些项目描写叙述: Codis is a proxy b ...
- Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十四)Redis缓存正确的使用姿势
作者:13 GitHub:https://github.com/ZHENFENG13 版权声明:本文为原创文章,未经允许不得转载. 简介 这是一篇关于Redis使用的总结类型文章,会先简单的谈一下缓存 ...
- 豌豆夹Redis解决方案Codis源码剖析:Proxy代理
豌豆夹Redis解决方案Codis源码剖析:Proxy代理 1.预备知识 1.1 Codis Codis就不详细说了,摘抄一下GitHub上的一些项目描述: Codis is a proxy base ...
随机推荐
- yii2.0简单使用elasticsearch
1.安装扩展 /c/phpStudy/PHPTutorial/php/php-5.5.38/php /c/ProgramData/ComposerSetup/bin/composer.phar req ...
- setitimer()函数
定时器时间函数 struct itimerval: struct itimerval *new_value,其定义如下: struct itimerval { struct timeval it_in ...
- C Primer Plus--C存储类、链接和内存管理之存储类(storage class)
目录 存储类 作用域 链接 存储时期 自动变量 寄存器变量 具有代码块作用域的静态变量 具有外部链接的静态变量 extern关键字 具有内部链接的静态变量 多文件 存储类 C为变量提供了5种不同的存储 ...
- 记一次vue+vuex+vue-router+axios+elementUI开发(二)
开发环境跟脚手架初始完毕后,我们开始配置axios请求后台接口 axios使用说明:https://www.kancloud.cn/yunye/axios/234845 1.本人是在脚手架中的sr ...
- js判断是不是在微信浏览器打开?
is_weixin:function(){ var ua = window.navigator.userAgent.toLowerCase(); if (ua.match(/Mic ...
- ICEM-点火器
原视频下载地址:https://pan.baidu.com/s/1hrU75So 密码: k6nc
- 【2019.10.17】十天Web前端程序员体验(软件工程实践第五次作业)
结对信息.具体分工 Github地址:https://github.com/MokouTyan/131700101-031702425 学号 昵称 主要负责内容 博客地址 131700101 莫多 代 ...
- 使用IDEA创建一个Maven Web工程:无法创建Java Class文件
今天用IDEA新建了一个maven web工程,项目目录是这样的: 在新创建一个Java class 文件时,却没有Java class功能,无法创建,如图: 解决方案: 选择 File——>P ...
- 【Python 代码】3D TIF 拆成若干张tif (ISBI细胞数据集)
from libtiff import * imgdir = TIFF3D.open("train-labels.tif") imgarr = imgdir.read_image( ...
- SpringMVC通过注解在数据库中自动生成表
在application-persistence.xml中的<property name="hibernate.hbm2ddl.auto" value="${hib ...