定时器取数据时实时进来的数据_Redis-数据淘汰策略amp;持久化方式(RDB/AOF)amp;Redis与Memcached区别...

Redis与Memcached区别:

两者都是非关系型数据库。主要有以下不同:

数据类型:
  • Memcached仅支持字符串类型。
  • redis支持:String,List,set,zset,hash 可以灵活的解决问题。
数据持久化:
  • Memcached不支持持久化。
  • Redis采用两种持久化策略:RDB快照和AOF日志。
分布式:
  • Mencached不支持分布式,只能在客户端使用一致性hash来实现分布式存储,这种方式在存储和查询时都需要在客户端先计算一次数据所在的节点。
  • redis cluster实现了分布式的支持。
内存管理机制:
  • redis中,并不是所有数据都一直存储在内存中,可以将一些很久没用的value交换到磁盘,而memcached数据则候会一直在内存中。
  • memcached将内存分割成特定的块进行存储,以完全解决内存碎片化的问题,但是这种方式使得内存利用率不高,如块大小128bytes,只存储了100bytes的数据,那么剩下的28bytes就浪费掉了。

键的过期时间:

redis可以为每个键设置过期时间,当键过期时,自动删除该键。对于散列表这种容器,只能为整个键设置过期时间(整个散列表),而不是为键里面的单个元素设置过期时间。

设置键的生存时间:
  • expire: 指定秒
  • pexpire: 指定毫秒
127.0.0.1:6379> set key hello
OK
127.0.0.1:6379> expire key 1
(integer) 1
127.0.0.1:6379> get key
(nil)
127.0.0.1:6379> hset hashkey key1 1
(integer) 0
127.0.0.1:6379> hget hashkey key1
"1"
127.0.0.1:6379> expire hashkey 1
(integer) 1
127.0.0.1:6379> hget hashkey key1
(nil)
127.0.0.1:6379> zadd zset 0 key1 1 key2
(integer) 0
127.0.0.1:6379> zrange zset 0 -1
1) "key1"
2) "key3"
3) "key2"
127.0.0.1:6379> expire zset 1
(integer) 1
127.0.0.1:6379> zrange zset 0 -1
(empty list or set)
设置过期时间:过期时间是一个unix时间戳
  • expireat:秒精度
  • pexpireat:毫秒精度

过期键的删除策略:

定时删除:

在设置键的过期时间的同时,创建一个定时器,让定时器在键过期时间来临时,立即执行对键的删除操作。

  • [ ] 优点:对内存是友好的,可以保证过期键会尽可能快被删除,并释放过期键所占用的内存。
  • [ ] 缺点:对CPU不友好,在过期键较多的情况下,删除键的操作会占用相当一部分的CPU时间,在内存不紧张但CPU紧张的情况下,将cpu时间用在删除与当前任务无关的过期键上,无疑会对服务器的响应时间和吞吐量造成影响。
    此外,定时器需要使用redis服务器的时间事件,时间事件的实现方式为无序链表,查找一个事件的事件复杂度为O(N),因此创建大量的定时器不现实。
惰性删除:

仅在程序取出键时才进行过期检查

  • [ ] 优点: CPU友好,不会花费额外的时间。
  • [ ] 缺点:对内存不友好,会造成内存泄漏。
定期删除:

每隔一段时间执行一次删除过期键操作,并通过限制删除操作执行的时长和频率来减少对CPU时间的影响。

数据淘汰策略:6种

可以设置内存最大使用量,当内存使用超出时,施行数据淘汰策略。

4a6db4b674f73352b4ca3c83deaf4080.png作为内存数据库,出于对性能和内存消耗的考虑,redis的淘汰算法实际上并未针对所有key,而是
抽样一小部分并且从中选出被淘汰的key。使用reids缓存数据时,为提高缓存命中率,需要保证缓存都是热点数据。可以将内存最大使用量设置为热点数据占用的内存量,然后启用allkeys-lru淘汰策略,将最近最少未使用的数据进行淘汰。redis4.0 版本后引入了volatile-lfu和allkeys-lfu淘汰策略LFU策略通过统计访问频率,将访问频率最小的键值进行淘汰。

持久化:

redis是内存型数据库,为了保证数据在断电后不会丢失,需要将内存中的数据持久化到硬盘上。

RDB持久化:

  • 将某个时间点的所有数据都存放到硬盘上。
  • 可以将快照复制到其他服务器从而创建具有相同数据的服务器副本。
  • 如果系统方法故障,将会丢失最后一次快照后的数据。
  • 如果数据量很大,保存快照时间会很长。
手动触发:
  • [ ] redis命令
  • save:生成RDB文件,会阻塞服务器进程,知直到RDB文件创建完毕。
  • bgsave: 派生(fork)一个子进程,然后由子进程负责创建RDB文件,父进程继续处理命令请求。
自动触发:
  • 使用save相关配置,如“save m n”。表示m秒中对数据集进行n次修改,就触发bgsave。
  • 如果从节点执行全量复制操作,主节点自动执行bgsave生成RDB文件发送给从文件。
  • 执行debug reload 命令重新加载redis时,自动触发save操作。
  • 默认情况下执行shutdown命令时,若没有开启AOF持久化功能则自动执行bgsave。
优缺点:
  • [ ] 优点: 适用于备份,全量复制等场景。恢复数据远快于AOF方法。
  • [ ] 缺点:没办法做到实时持久化/秒级持久化。 RDB使用特定二进制格式,redis演化中有多个RDB版本,存在版本不兼容情况。

AOF 持久化:

将写命令添加到AOF文件的末尾(append Only File)使用AOF持久化需要设置同步选项,从而保证写命令什么时候会被同步到磁盘文件上。这时因为对文件进行写入并不会,马上将内容同步到磁盘上,而是先存储到缓冲区,然后由操作系统决定什么时候同步到磁盘。有以下同步方式:

eb38f57252bd62d4c7eff8e917b4d80f.png
  • always:每个写命令都同步。严重影响服务器性能
  • everysec:每秒同步一次。可以保证系统崩溃时只丢失一秒左右的数据,每秒执行一次对性能几乎没影响。
  • no:让操作系统决定,最长30秒。不能带来太多的性能提升,但是会增加系统崩溃时数据丢失的数量。
    随着服务器写请求的增多,AOF文件会越来越大。redis提供了一种将AOF重写的特性,能够去除AOF文件中冗余的写命令。
为什么会变小:
  1. 进程中已经超时数据不再写入文件。
  2. 旧的AOF文件含有无效命令。
  3. 多条命令合并(对同一键值的更新)。

==感觉文章不错的同学麻烦动动小手点点关注订阅呗,您的肯定是对我持续更新最大的支持!==

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427162.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 下建立多个tomcat

第一步:复制,解压 将准备好的tomcat压缩包复制到你准备安装的目录,我的tomcat压缩包名字是tomcat.tar.gz,我的安 装目录是 /usr/java/tomcat 第二步:解压tomcat [rootaliServer tomcat]# tar -xvf tomcat.tar.gz 第三步&#xff…

java apply 函数_Js(Javascript)中的apply方法的使用

Function.apply(obj,args)方法能接收两个参数,简单说apply方法作用就是给类或方法中的this赋值。所以学会这个方法首先要知道this的作用。(this的用法可以看一下这个链接:http://www.cjavapy.com/article/8/ )obj:这个对象将代替Function类里…

linux iptables配置

1 iptables默认系统自带 setup 2重启防火墙 /etc/init.d/iptables restart 3接受端口 Vi /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT 4 #配置,禁止进,允许出,允许回环网卡 iptables -P I…

memcpy函数_[PART][BUG][MSVCRT][C][CCF NOI1097] 关于memcpy的坑

[Incompleted]CCF NOI1097 试题,本人的源码:Ubuntu Pastebin​paste.ubuntu.comUbuntu PastebinUbuntu Pastebin: SourceCodebyJulianDroid​paste.ubuntu.com满分代码:https://blog.csdn.net/tigerisland45/article/details/71038551​blog.…

Bugku杂项-convert

一进去就发现一堆二进制数,然后考虑怎么才能把这个和隐写扯上关系。首先,二进制我们肉眼就是看不懂再说什么的,这里就想到了转换,再联想上hex将原始数据转化为16进制。我们可以先把2进制转化为16进制,然后再放到hex上看…

tomcat:Cannot find /usr/local/tomcat1/bin/setclasspath.sh

首先看下报错代码: Cannot find /usr/local/tomcat1/bin/setclasspath.sh This file is needed to run this program这个可能是没有在 /etc/profile 中配置环境,这是第一种可能;如果是这种情况的话,可以这样做:vi /etc/profile 并…

在java中柱状图代码_我在java中编写了个柱状图,可运行了,我想让柱状图在JSP页面中显示,请问有什么方法么?谢谢。...

h1,h2 代表了柱形图的高度你可以这样试一试function createImgItem(count){var divdocument.createElement("");var imgdocument.createElement("");img.src"getCertReviewInfoImg.jspx?perCertId${perCertId}&reviewIndex"count;div.appen…

图解cacti简单使用

1登录 admin admin 2点击devices localhost 3进入配置保存 4保存 http服务要启动哦 5一步步做 6graph tree 7执行/usr/bin/php /var/www/html/cacti/poller.php 8如果时间设置错误去php.ini里面修改时间 YSTEM STATS: Time:0.4759 Method:cmd.php Processes:1 Threads:N/…

AFNetworking 3.0源码阅读 - AFURLResponseSerialization

这次来说一下AFURLResponseSerialization这个HTTP响应类。 定义了一个协议,该协议返回序列化后的结果。后续的AFHTTPResponseSerializer以及他的子类都遵循了该协议 该类内有很多子类定义,这里借用一张图来展示,之后一个一个来说。 我们先来看…

python3纵向输出字符串_Python 3.x 格式化输出字符串 % format 笔记

python格式化字符串有%和{}两种 字符串格式控制符.字符串输入数据格式类型(%格式操作符号)%%百分号标记%c字符及其ASCII码%s字符串%d有符号整数(十进制)%u无符号整数(十进制)%o无符号整数(八进制)%x无符号整数(十六进制)%X无符号整数(十六进制大写字符)%e浮点数字(科学计数法)%…

linux 下tomcat服务每天定时启动

1l先准备一个脚本 #!/bin/sh #./etc/profile export JAVA_HOME/usr/java/jdk1.6.0_45 sh /home/tomcat-bingchuang/bin/shutdown.sh sleep 60s sh /home/tomcat-bingchuang/bin/startup.sh 2放置到如上/home/ tomcat-bingchuang/bin/目录下 赋予777权限 并在linux里面设置…

Swordsman

ps&#xff1a;比赛的时候想到了做法&#xff0c;k次排序&#xff0c;然后每次消去能消的。。。然而这种做法是错误的&#xff0c;神奇的是测试案例中排在奇数的案例会WA&#xff0c;排在偶数的案例都过了&#xff0c;被注释的代码会T. #include<bits/stdc.h> #define UL…

java socket编程聊天室_Java Socket通信之聊天室功能

Java Socket通信之聊天室功能发布时间&#xff1a;2020-10-17 14:36:00来源&#xff1a;脚本之家阅读&#xff1a;73作者&#xff1a;LY_624本文实例为大家分享了Java Socket聊天室功能的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下Client.javaimport java.io.*;i…

python计算数组元素的和_python中数组的运算

Python中进行数组的运算需要调用NumPy包。其官网是&#xff1a;http://www.numpy.org/​www.numpy.orgNumPy是Python语言的一个扩充程序库。它支持高级大量的维度数组与矩阵运算&#xff0c;此外也针对数组运算提供大量的数学函数库。Numpy内部解除了CPython的GIL(全局解释器锁…

linux mysql数据库定时备份

1在linux上面创建一个文件夹&#xff0c;并且进行备份 cd /home mkdir backup cd backup 2创建一个脚本 Vi imaginebase.sh #!/bin/bash mysqldump -uroot -ppassword01! imaginebase > /home/backup/imaginebase_KaTeX parse error: Expected group after _ at position 1…

[NOI2014] 起床困难综合症

水题的题解也水...... 原题链接&#xff1a;洛谷 P2114 [NOI2014]起床困难综合症 位运算每一位之间互不干扰。 经过所有门之后每一位不外乎四种结果&#xff1a;一定是0&#xff0c;一定是1&#xff0c;不变或取反。 按位枚举&#xff0c;贪心即可。 对于不变的&#xff0c;我们…

java调用webroot下的文件_JAVA 访问WebRoot下的目录文件

/*** 获取到webroot里面的数据*/java.net.URL url2 classLoader.getResource("");String ROOT_CLASS_PATH url2.getPath() "/";File rootFile new File(ROOT_CLASS_PATH);String WEB_INFO_DIRECTORY_PATH rootFile.getParent() "/";File w…

统计一行文本的单词个数_word操作技巧:不同情况的文字统计方法

最近有朋友询问&#xff0c;如何快速统计出Word文档的字数&#xff1f;这个问题其实非常简单&#xff0c;但往往是这种最简单的知识容易被大家忽视&#xff0c;因此造成困扰。所以&#xff0c;今天我们将为大家详细介绍几种Word统计文档字数的方法&#xff0c;希望能帮助到你&a…

linux mysql5.6.27源码安装和错误解决

centos mysql5.6.27 1编译安装 先进入到文件放置的路径下 创建一个个文件 #mkdir–p /data/mysql/mysql #mkdir–p /data/mysql/mysqldat 2创建用户和用户组 groupadd mysql useradd -r -g mysql mysql 3赋予数据存放目录权限 chown mysql:mysql -R /data/mysql/mysqldata/ 4解…

java 接口数据类型_Java 数据类型(中): 抽象类与接口

抽象类和接口都是java对事物对象抽象的机制&#xff0c;是多态性的表现。在某些时候它们还可以互换&#xff0c;其实它们还是有区别的。1&#xff0c;抽象类(abstract class):对某些对象的抽象描述的类(对事物对象行为方法的声明&#xff0c;但是却不实现具体的方法内容&#x…