定时器取数据时实时进来的数据_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…

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上看…

图解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以及他的子类都遵循了该协议 该类内有很多子类定义,这里借用一张图来展示,之后一个一个来说。 我们先来看…

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…

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;我们…

统计一行文本的单词个数_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解…

mysql集群和主从区别_搭建MySQL主从集群,主从复制过程中同步延迟问题

上一节我们成功搭建了主从复制、读写分离&#xff0c;实际上并发量和数据量不大的情况下&#xff0c;使用起来也是非常的流畅&#xff0c;无任何问题&#xff0c;可以正常运行了。但是&#xff0c;要保证高可用&#xff0c;高并发的情况&#xff0c;可以写数据库master就有累了…

java I O类大全_Java I/O最简单的几个类

今天把I/O中最简单的几个类整理了一下&#xff0c;之所以整理最简单的&#xff0c;是因为这样会让我更加快速方便的理顺这里面的东西&#xff0c;以前每一次用的时候都要先百度一下&#xff0c;觉得很烦。首先需要先看一下Read,Write和Stream&#xff0c;那么看下面的图就明确多…

linux mysql数据库备份并删除前一分钟的数据

linux 中mysql数据库定时备份并删除前一分钟的所有数据 #!/bin/bash #mysqldump -uroot -ppassword01! imaginebase > /home/backup/imaginebase_KaTeX parse error: Expected EOF, got # at position 27: …%d_%H%M%S).sql #̲mysqldump -uroo…(date %Y%m%d_%H%M%S).sql.g…

打开 igv java_必备可视化Integrative Genomic Viewer(IGV)

你会用到的网站&#xff1a;写在前面&#xff1a;之前mac不小心升级了一下java&#xff0c;然后igv就不能用了&#xff0c;要写教程必须降级java首先&#xff0c;看官方说明&#xff0c;需要安装Java -8&#xff0c;9以上版本不支持。我的mac不知道什么时候更新到了java 10&…

机器学习项目笔记

项目清单: 1. 商业目标2. 划定问题               监督或非监督&#xff0c;还是强化学习。3. 选择什么算法             回归还是分类&#xff0c; 数据量小可使用单机内存的 批量计算&#xff0c; 数据量大使用分布式的MapReduce 线上计算。4. 评估模型…

linux mysql主从配置

1准备两台服务器 一台是192.168.118.128 一台是192.168.118.129 2主服务器配置 192.168.118.128 修改my.cnf文件 server-id1 log-binmysql-bin #启动MySQL二进制日志系统&#xff0c; binlog-do-dbourneeddb #需要同步的数据库 binlog-ignore-dbmysql #不同步mysql系统数据库&…

svn新建仓库

1昨天需要在服务器上新建一个仓库&#xff0c;解决方法是把已有的仓库拷贝出来&#xff0c;库删除在放进去 2然后今天想看看有没有命令的方法 find / -name project 首先查看一下项目的位置 3创建仓库 svnadmin create /mnt/raid1/huge/project/test 4cd test Ls 5vi authz…