rdb

redis的缓存穿透,缓存雪崩,持久化方式

被刻印的时光 ゝ 提交于 2021-02-02 03:59:55
Redis redis是一个可进行持久化的内存数据库,可以支持string,list,hsh,set,zet这五种数据类型。 redis的性能很高(redis的读取速度可以达到11万次每秒,写的速度达到8万次每秒) redis【缓存穿透】 缓存穿透是指去查询一个一定不存在的数据,比如说我一共有100个商品,然后你偏偏去查询第101,102个这些不存在的商品,这个时候我们通常情况下就先回去redis里面去查询,但是redis里面就存在,所以就会去数据库中查询,如果大量的这种请求过来,那么就都落在了数据库上面,而数据库也不存在这样的数据,那么缓存就如同虚设,增加了数据库的压力。 解决方法: 为了解决这个问题,我们可以缓存空值,也就是说即便数据库中查询出来的数据不存在,也会缓存空值在reids的缓存中,这样下一次就可以走我们的缓存而不是数据库啦,但是太多的空值会占用我们的缓存的内存空间,导致内存的浪费,我们就通过给它设置一个过期时间比如3分钟,这样过了3分钟后存入的空值就会清空,释放空间,但是这样又出现另外一个问题,就是说如果有人在三分钟内加了一条数据,这个时候就有了第101条数据啦,但是当我们用户去查的时候,走的缓存而缓存中却还是空值,导致缓存中的数据和数据库中的数据不一致,为了解决这个问题我们可以在后台增加数据的时候,同时主动更新缓存中存在的数据,或者去删除缓存中的数据

redis的缓存穿透,缓存雪崩,持久化方式

假装没事ソ 提交于 2021-02-01 11:14:09
Redis redis是一个可进行持久化的内存数据库,可以支持string,list,hsh,set,zet这五种数据类型。 redis的性能很高(redis的读取速度可以达到11万次每秒,写的速度达到8万次每秒) redis【缓存穿透】 缓存穿透是指去查询一个一定不存在的数据,比如说我一共有100个商品,然后你偏偏去查询第101,102个这些不存在的商品,这个时候我们通常情况下就先回去redis里面去查询,但是redis里面就存在,所以就会去数据库中查询,如果大量的这种请求过来,那么就都落在了数据库上面,而数据库也不存在这样的数据,那么缓存就如同虚设,增加了数据库的压力。 解决方法: 为了解决这个问题,我们可以缓存空值,也就是说即便数据库中查询出来的数据不存在,也会缓存空值在reids的缓存中,这样下一次就可以走我们的缓存而不是数据库啦,但是太多的空值会占用我们的缓存的内存空间,导致内存的浪费,我们就通过给它设置一个过期时间比如3分钟,这样过了3分钟后存入的空值就会清空,释放空间,但是这样又出现另外一个问题,就是说如果有人在三分钟内加了一条数据,这个时候就有了第101条数据啦,但是当我们用户去查的时候,走的缓存而缓存中却还是空值,导致缓存中的数据和数据库中的数据不一致,为了解决这个问题我们可以在后台增加数据的时候,同时主动更新缓存中存在的数据,或者去删除缓存中的数据

Redis和SpringDataRedis

断了今生、忘了曾经 提交于 2021-01-24 02:48:30
一.Redis简介 ​    Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,运行在内存中,由ANSI C编写。企业开发通常采用Redis来实现缓存。同类的产品还有memcache 、memcached 、MongoDB等。 1.Redis数据结构 ​ 字符串类型 string ​ 散列类型 hash ​ 列表类型 list 有序可重复 ​ 集合类型 set 无序不可重复 有序集合类型 sortedset 有序不可重复 2.Redis应用场景 做缓存: 缓存的是使用频次较高,但不是特别重要的数据,请求来时,优先查询非关系型数据库,如果没有查到则查询关系型数据库,从关系型数据库中查询到结果后,将结果存放到非关系型数据库中,并将结果返回给浏览器.如果查询到了,直接将查询结果返回给浏览器即可。 当用户执行 增 删 改操作时,优先操作关系型数据库, ( 会造成Redis数据丢失 ) 操作完毕后,删除非关系型数据库中的相关数据. ( 需要Redis数据同步 ) 二.Redis持久化: 注意: 要想使用redis的持久化操作,启动redis时必须采用配置文件 使用指定配置文件开启服务 (会持久化) ★★★★★ ​ 启动服务器: 在dos命令中输入 redis-server.exe redis.windows.conf ​ 启动客户端: 在dos命令中输入

docker化canal与canal-adapter

纵饮孤独 提交于 2021-01-24 01:46:29
今日公司需求,需要将mysql更新实时同步到kafka中,后来又要将数据库中的一张表的变化实时同步到另一台mysql中,于是乎canal与canal-adapter紧急解决,其中踩了不少坑,下面为总结内容 官方文档: https://github.com/alibaba/canal/wiki 一、canal镜像的创建及canal的compose文件 1、Dockerfile文件内容 FROM openjdk: 8 -jre- alpine ADD [ " canal.tar.gz " , " /opt/ " ] WORKDIR /opt/ canal EXPOSE 11110 11112 COPY [ " entrypoint.sh " , " / " ] VOLUME [ " /opt/canal/logs " , " /opt/canal/conf " ] ENTRYPOINT /entrypoint. sh View Code 2、entrypoint.sh文件内容 #!/bin/ sh Base_dir =/opt/canal/ conf Log_dir =/opt/canal/ logs if [ -n ${canal_instance_master_address} ]; then sed -i " /^canal.instance.master.address=

【Redis学习之七】Redis持久化

两盒软妹~` 提交于 2021-01-23 08:16:39
环境   虚拟机:VMware 10   Linux版本:CentOS-6.5-x86_64   客户端:Xshell4   FTP:Xftp4   jdk8   redis-2.8.18 什么是持久化?   将数据从掉电易失的内存存放到能够永久存储的设备上 Redis持久化方式:   RDB(Redis DB) 类似 hdfs:fsimage 快照   AOF(AppendOnlyFile) 类似 hdfs :edit logs 关闭的 一、RDB 在默认情况下,Redis 将数据库快照保存在名字为dump.rdb的二进制文件中 方式:   (1)阻塞方式:客户端中执行save命令,无法响应客户端请求,创建新的dump.rdb替代旧文件   SAVE不用创建新的进程,速度略快;适合停机维护,服务低谷时段   (2)非阻塞方式:bgsave   非阻塞,Redis服务正常接收处理客户端请求;BGSAVE需要创建子进程,消耗额外的内存;适合线上执行   Redis会fork()一个新的子进程来创建RDB文件,子进程处理完后会向父进程发送一个信号,通知它处理完毕   父进程用新的dump.rdb替代旧文件 策略   手动:客户端发起SAVE、BGSAVE命令   自动:按照配置文件中的条件满足就执行BGSAVE   save 60 1000

一文读懂Redis持久化

只谈情不闲聊 提交于 2021-01-20 22:51:48
Redis 是一个开源( BSD 许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持的数据类型很丰富,如字符串、链表、集合、以及散列等,并且还支持多种排序功能。 什么叫持久化? 用一句话可以将持久化概括为:将数据(如内存中的对象)保存到可永久保存的存储设备中。 持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、 XML 数据文件中等等。 也可以从如下两个层面来理解持久化: 应用层:如果关闭( Close )你的应用,然后重新启动则先前的数据依然存在。 系统层:如果关闭( Shut Down )你的系统(电脑),然后重新启动则先前的数据依然存在。 Redis 为什么要持久化? Redis 中的数据类型都支持 Push/Pop、Add/Remove 及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。 在此基础上,Redis 支持各种不同方式的排序。与 Memcached 一样,为了保证效率,数据都是缓存在内存中。 因为数据都是缓存在内存中的,当你重启系统或者关闭系统后,缓存在内存中的数据都会消失殆尽,再也找不回来了。 所以,为了让数据能够长期保存,就要将 Redis 放在缓存中的数据做持久化存储。 Redis 怎么实现持久化? 在设计之初,Redis 就已经考虑到了这个问题。官方提供了多种不同级别的数据持久化的方式: RDB

redis不小心清空了数据库(flushall),只能跑路吗?

耗尽温柔 提交于 2021-01-18 02:45:04
前言 前段时间这个新闻在行业内闹的沸沸扬扬 一名程序员因为对公司不满,删除了公司的数据库,后来被判7年,这也给咱们程序员敲响了一记警钟,无论发生什么,这种做法都是非常不妥当的,不光是职业道德的问题,而且还会收到法律的制裁。但是我们都知道redis中有一个叫flushall的命令,如果不小心在线上执行了会怎么办呢? 「 tips:本文仅仅作为理论讲解,如果要尝试请在本地环境尝试,若在线上执行之后导致数据无法恢复,后果自负!!! 」 恢复数据思路 大家都知道redis和memcache都作为缓存使用,redis有一点最大的不同在于数据可以持久化,redis的持久化是基于aof和rdb日志来进行持久化的,所以在恢复数据的时候我们可以考虑用 「 日志 」 来恢复 rdb日志都是二进制文件,也是不可读的,在这方面可能做不了太多事情,但是aof文件都是可读性很好的文件,而且里面记录了每一条命令(当然也记录了那一条flushall命令),所以我们可以用aof日志来恢复整个redis数据 但是大家注意 aof日志是有重写机制的,而且有一定的触发条件(如下),万一输入了flushall之后触发了重写机制,那么所有数据都会丢失,而正式环境redis数据是一直在写入的,数据量是一直在变大的,随时都有触发重写条件的可能,所以得立即关机,如果正好在你执行flushall的下一秒 触发了aof重写机制

面试系列16 redis的持久化

爱⌒轻易说出口 提交于 2021-01-17 21:02:42
1、RDB和AOF两种持久化机制的介绍 RDB持久化机制,对redis中的数据执行周期性的持久化 AOF机制对每条写入命令作为日志,以append-only的模式写入一个日志文件中,在redis重启的时候,可以通过回放AOF日志中的写入指令来重新构建整个数据集 如果我们想要redis仅仅作为纯内存的缓存来用,那么可以禁止RDB和AOF所有的持久化机制 通过RDB或AOF,都可以将redis内存中的数据给持久化到磁盘上面来,然后可以将这些数据备份到别的地方去,比如说阿里云,云服务 如果redis挂了,服务器上的内存和磁盘上的数据都丢了,可以从云服务上拷贝回来之前的数据,放到指定的目录中,然后重新启动redis,redis就会自动根据持久化数据文件中的数据,去恢复内存中的数据,继续对外提供服务 如果同时使用RDB和AOF两种持久化机制,那么在redis重启的时候,会使用AOF来重新构建数据,因为AOF中的数据更加完整 ------------------------------------------------------------------------------------- 2、RDB持久化机制的优点 (1)RDB会生成多个数据文件,每个数据文件都代表了某一个时刻中redis的数据,这种多个数据文件的方式,非常适合做冷备,可以将这种完整的数据文件发送到一些远程的安全存储上去

爱奇艺全链路压测探索与实践

*爱你&永不变心* 提交于 2021-01-12 19:07:38
背 景 爱奇艺除了每天都为数以亿计的用户提供优质的视频服务,同时还有体育、直播、文学等业务服务于更多的圈层用户,海量的业务几乎每天都在进行营销活动,由此带来的流量随时可能会给我们的服务引入不确定性。爱奇艺支付团队为各业务线提供全面的收付款服务,保障用户的付费体验,团队除了保障服务的稳定性外,还要应对随时可能爆发的流量挑战。对于支付系统来说做好准确的容量评估和预案是非常重要的,全链路压测在这方面提供了有力保障。 全链路压测是基于生产环境,模拟业务高峰时的海量请求,对整个系统链路进行压力测试,继而进行有效的容量评估和系统调优。因为支付业务对数据敏感同时业务复杂,使得系统间调用链路难以准确全面评估,实施压测比较困难,在没有实施全链路压测前,我们经常会遇到以下问题: 生产环境流量构成复杂,单机压测结果难以有效评估生产环境容量; 流量转化评估与实际用户行为不匹配,导致预案不能达到预期效果; 公共资源/服务很难在局部压测中暴露瓶颈,需要真实的高峰流量来验证; 链路容量不能对齐导致整体受限于短板服务,同时也产生了严重的资源浪费。 以上问题归结原因主要是没有在生产环境使用真实场景的流量去压测系统,也就无法做出准确评估,为了解决以上问题,我们开始了全链路压测在以支付业务为核心场景的探索与实践。 问题探索与方法实践 开展全链路压测我们主要从几下方面进行了探索与实践: 核心链路梳理,

Redis Server installation FAQs

ε祈祈猫儿з 提交于 2021-01-12 04:20:35
OS: CentOS 7 Minimal (0) open files Q: Increased maximum number of open files to 10032 (it was originally set to 1024). A: $ulimit - a $ vi /etc/systemd/system/redis.service In the "[Service]" unit, add the following: LimitNOFILE= 10032 (1) somaxconn Q: WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. A: $vi /etc/sysctl.conf net.core.somaxconn= 1024 (2) overcommit_memory Q: WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1'