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 那些事儿的更多相关文章

  1. 聊一聊Redis事务

    没错,Redis也有事务管理,但是功能很简单,在正式开发中也并不推荐使用.但是面试中有可能会问到,所以本文简单谈一谈Redis的事务. 通过这篇文章,你会了解 Redis为什么要提供事务? Redis ...

  2. Redis可以做哪些事儿?

    Redis可以作为数据库,提供高速缓存,消息队列等功能,这里介绍Redis可以做的其中两件事: 1.提供缓存功能,作为缓存服务器; 2.轻量级的消息队列(MQ)进行使用. /// <summar ...

  3. Redis缓存哪些事儿

    一提到Redis缓存,我们不得不了解的三个问题就是:缓存雪崩.缓存击穿和缓存穿透.这三个问题一旦发生,会导致大量的请求直接请求到数据库层.如果并发压力大,就会导致数据库崩溃.那p0级的故障是没跑了. ...

  4. Redis 1:简介

    导读:在今日开讲的项目中,用到了redis数据库.老听大家在说,我都不知道是个啥玩意儿.然后这两天在准备知识分享的事儿,我先大概了解了解,然后讲的时候,能有点共鸣.所以,本篇博客,是在自己跟读完MVA ...

  5. 【redis】06Redis的高级应用之事务处理、持久化操作、pub_sub、虚拟内存

    上节课详细讲解了redis数据库的常用命令,以及redis数据库高级应用当中的, 安全性,跟咱们的主从复制, 这节课呢,咱们继续来讲咱们的高级应用, 首先来看一下咱们的事务处理, 事务处理 我前面说过 ...

  6. [转载] 十五分钟介绍 Redis数据结构

    转载自http://blog.nosqlfan.com/html/3202.html?ref=rediszt Redis是一种面向“键/值”对类型数据的分布式NoSQL数据库系统,特点是高性能,持久存 ...

  7. 豌豆夹Redis解决方式Codis源代码剖析:Proxy代理

    豌豆夹Redis解决方式Codis源代码剖析:Proxy代理 1.预备知识 1.1 Codis Codis就不详细说了,摘抄一下GitHub上的一些项目描写叙述: Codis is a proxy b ...

  8. Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十四)Redis缓存正确的使用姿势

    作者:13 GitHub:https://github.com/ZHENFENG13 版权声明:本文为原创文章,未经允许不得转载. 简介 这是一篇关于Redis使用的总结类型文章,会先简单的谈一下缓存 ...

  9. 豌豆夹Redis解决方案Codis源码剖析:Proxy代理

    豌豆夹Redis解决方案Codis源码剖析:Proxy代理 1.预备知识 1.1 Codis Codis就不详细说了,摘抄一下GitHub上的一些项目描述: Codis is a proxy base ...

随机推荐

  1. 《挑战30天C++入门极限》C++的iostream标准库介绍(1)

        C++的iostream标准库介绍(1) 我们从一开始就一直在利用C++的输入输出在做着各种练习,输入输出是由iostream库提供的,所以讨论此标准库是有必要的,它与C语言的stdio库不同 ...

  2. golang-flag - 命令行参数解析

    flag - 命令行参数解析 在写命令行程序(工具.server)时,对命令参数进行解析是常见的需求.各种语言一般都会提供解析命令行参数的方法或库,以方便程序员使用.如果命令行参数纯粹自己写代码解析, ...

  3. js逆向笔记

    1.nodejs运行js的时候 navigator如果找不到可以可设置为空对象 var navigator={}; 2.使用nodejs如果window对象找不到的时候 可以使用jsdom模块 3.顶 ...

  4. linux10.日志服务器建立和克隆机的网卡问题

    日志服务器建立       克隆虚拟机网卡混乱问题处理           vim /etc/udev/rules.d/70-perisistent-net.rules 调整mac地址与设备的对应关系 ...

  5. #C++初学记录(字符串与指针操作库函数)

    测试程序 #include<iostream> #include<cstring> using namespace std; int a[204],b[204],lena,n; ...

  6. Mysql 查看所有线程,被锁的表等

    ## 查看所有MYSQl相关的线程 > show full processlist; ## 杀死线程id为2的线程 > kill 2 ## 查看服务器状态 > show status ...

  7. arcpy SearchCursor sql_clause

    import arcpy fc = 'c:/data/base.gdb/well' fields = ['WELL_ID', 'WELL_TYPE'] # Use ORDER BY sql claus ...

  8. 夺灵者哈卡(Hakkar, the Soulflayer)

    Hakkar, the Soulflayer夺灵者哈卡Deathrattle: Shuffle a Corrupted Blood into each player's deck.亡语:将一张“堕落之 ...

  9. crontab 使用日期时间命名重定向文件

    使用月份命名 0 12 * * * sh /tmp/test.sh >> "/tmp/$(date +"\%Y-\%m").log" 2>&a ...

  10. git---主分支同步到子分支

    在进行git项目协同开发的时候,每个分支的代码会被合并到主分支 master 分支上,但是如何将master分支上的代码合并到子分支上呢? 第一步:切换到本地的仓库,更新为最新的代码. 第二步:切换到 ...