rdb

Redis最全详解

牧云@^-^@ 提交于 2020-07-27 06:57:42
1.Redis核心数据结构与核心原理 Redis安装 下载地址:http://redis.io/download 安装步骤: # 安装gcc yum install gcc # 把下载好的redis-5.0.3.tar.gz放在/usr/local文件夹下,并解压 wget http://download.redis.io/releases/redis-5.0.3.tar.gz tar xzf redis-5.0.3.tar.gz cd redis-5.0.3 # 进入到解压好的redis-5.0.3目录下,进行编译与安装 make # 启动并指定配置文件 src/redis-server redis.conf(注意要使用后台启动,所以修改redis.conf里的daemonize改为yes) # 验证启动是否成功 ps -ef | grep redis # 进入redis客户端 src/redis-cli # 退出客户端 quit # 退出redis服务: (1)pkill redis-server (2)kill 进程号 (3)src/redis-cli shutdown Redis的单线程和高性能 Redis 单线程为什么还能这么快? 因为它所有的数据都在内存中,所有的运算都是内存级别的运算,而且单线程避免了多线程的切换性能损耗问题。正因为 Redis 是单线程

centos7搭建redis集群

陌路散爱 提交于 2020-07-27 05:16:40
搭建环境 系统: centos 7.4 服务器金山云 安装ruby环境 [root@jsy-bj-test00 ~]# yum install -y ruby rubygems 复制6份redis服务 [work@jsy-bj-test00 ~]$ cp -rp redis redis1 [work@jsy-bj-test00 ~]$ cp -rp redis redis2 [work@jsy-bj-test00 ~]$ cp -rp redis redis3 redis配置文件修改 #六个节点需做如下更改 [work@jsy-bj-test00 ~]$ vim redis1/etc/redis.conf [work@jsy-bj-test00 ~]$ sed -i 's/port 6379/port 6380/g' redis5/etc/redis.conf #修改端口 port 6380 #打开注释,开启集群模式 cluster-enabled yes #集群的配置文件 cluster-config-file nodes-6380.conf [work@jsy-bj-test00 ~]$ sed -i 's/cluster-config-file nodes-6379.conf/cluster-config-file nodes-6380.conf/g' redis5/etc

Redis持久化

被刻印的时光 ゝ 提交于 2020-07-26 23:50:02
AOF(日志文件) 1、三种追加日志的方式: always:每次执行命令的时候,都把执行的命令做一次持久化。 【安全性更高,效率相对于Every seconds要低】 Every seconds:每隔1秒执行一次持久化,在这一秒钟执行的命令持久化到文件中。【效率比always要高,但安全性较低】 no:不开启AOF AOF的相关配置 appendonly 是否开启AOF appendfsync AOF持久化的方式 appendfilename AOF文件的名字 RDB(内存快照) RDB配置 格式: save 时间(单位s) 操作次数 如: save 60 10000 (60秒内有10000次操作做持久化) 为什么要配置多个? 配置不同的规则为了保证数据的安全 保证redis在高并发的情况下不会丢失很多数据 AOF和RDB对比,如何选择? 如果对数据的安全性要求比较高的话,选择AOF保持数据的安全 如果对数据的安全性要求不高,选择RDB保证Redis的效率 Redis不做持久化比做持久化效率高很多 来源: oschina 链接: https://my.oschina.net/u/4265788/blog/4329544

org.springframework.data.redis.RedisSystemException报错

耗尽温柔 提交于 2020-07-26 23:40:40
重启服务器在连接redis数据库时报错:org.springframework.data.redis.RedisSystemException: Error in execution; nested exception is io.lettuce.core.RedisCommandExecutionException: MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. 究其原因是因为强制把redis快照关闭了导致不能持久化的问题,通过stop-writes-on-bgsave-error值设置为no即可避免这种问题。 有两种修改方法

redis持久化存储

不打扰是莪最后的温柔 提交于 2020-07-26 21:57:19
redis持久化存储 redis多被用于缓存和消息中间件,当被用作缓存时,数据的读写都是在内存中进行的,而内存一旦在主机断电或者主机重启时里面的数据将被清空,为保证数据不被丢失,redis为我们提供两种数据持久化存储方式:RDB,AOF。 RDB持久化存储 RDB持久化是按配置文件中指定的时间间隔,每隔一段时间将当前进程生成数据保存到硬盘名为xx.rdb的二进制文件中。我们也可以手动使用save或者bgsave命令,将新生成的数据手动保存到硬盘的xx.rdb二进制文件中。 save命令:使用save命令要注意,它会阻塞当前redis服务器,直到RDB将数据全部保存到xx.rdb文件中为止,如果是线上环境不建议使用该命令。 使用save命令RDB存储过程如下: 1、用户执行save命令触发RDB存储。 2、redis主进程执行RDB存储,程序当前处于阻塞状态。 3、拷贝xx.rdb到一个临时文件中。 4、将新增的数据写入到xx.rdb的临时文件中。 5、将xx.rdb的临时文件覆盖原来的xx.rdb文件。 6、RDB存储结束,响应其它用户请求。 bgsave命令:redis进程会创建一个子进程,RDB的存储过程是由子进程来负责完成的,完成后自动退出子进程,阻塞只发生在创建子进程这个阶段,因此时间很短,不会影响主进程。 使用save命令RDB存储过程如下: 1

报表为什么会没完没了?怎么解决这个问题?

拈花ヽ惹草 提交于 2020-07-26 06:30:20
可以先想一下自己的部门或项目组是否面临这些问题: 1. 投入很多技术力量做报表,却还是疲于应付 2. 用了高端报表工具和敏捷 BI,却还是不够用 3. 技术高手用来做报表,感觉很浪费 4. 对于频繁多变的报表需求,需要低成本应对方案 专门用于统计分析的报表业务有一个特点,就是业务稳定性非常差。在业务开展过程中会催生很多新的查询需求,而且已实现的查询需求还会经常变化,这就造成了没完没了的报表。所以经常会有这么一段对话 报表没完没了是需求使然,无法规避,只能适应,而目前主要的是问题是普遍缺少一种低成本的方案来适应没完没了的报表。 为什么报表开发成本一直居高不下? 我们知道,报表工具的主要作用是将报表呈现阶段的开发工具化,使用报表工具可以将原本需要硬编码的工作通过工具来提高生产效率;但报表开发的另一个阶段:数据准备,却仍然在使用原始的硬编码方式处理,有时我们要编写非常复杂的 SQL、存储过程和 JAVA 程序,这样的工作通常要依赖高水平的技术人员才能完成。 另外,采用过于原始手段会带来报表维护困难,复杂的代码无论从编写还是修改都比较困难,这样又会加剧报表开发成本居高不下! 除了技术原因外,还有应用结构和团队管理方面的因素也会造成报表开发的成本居高不下。在许多应用系统中,报表是耦合在其中的一些功能,而业务系统的技术环境很复杂,这就迫使报表开发人员也要熟悉这些东西

Redis持久化的四种方式(转)

会有一股神秘感。 提交于 2020-07-24 20:09:04
Redis 是一个支持持久化的内存 数据库 ,也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化。redis支持四种持久化方式,一是 Snapshotting(快照)也是默认方式;二是Append-only file(缩写aof)的方式;三是虚拟内存方式;四是diskstore方式。下面分别介绍之。 (一)Snapshotting 快照是默认的持久化方式。这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。可以通过配置设置自动做快照持久化的方式。我们可以配置redis在n秒内如果超过m个key被修改就自动做快照,下面是默认的快照保存配置: save 900 1 #900秒内如果超过1个key被修改,则发起快照保存 save 300 10 #300秒内容如超过10个key被修改,则发起快照保存 save 60 10000 快照保存过程: 1. redis调用fork,现在有了子进程和父进程。 2. 父进程继续处理client请求,子进程负责将内存内容写入到临时文件。由于os的写时复制机制(copy on write)父子进程会共享相同的物理页面,当父进程处理写请求时os会为父进程要修改的页面创建副本,而不是写共享的页面。所以子进程的地址空间内的数据是fork时刻整个数据库的一个快照。 3. 当子进程将快照写入临时文件完毕后

Redis持久化过程的监控及优化

∥☆過路亽.° 提交于 2020-07-24 10:45:48
Redis持久化过程一直是影响redis性能的常见因素,如何监控持久化以及如何优化持久化过程呢?下面我们就一起来看看吧。 fork的监控及优化 不管是使用哪种持久化,RDB持久化或AOF重写,主进程都会fork出一个子进程,在子进程里完成rdb文件的生成或aof的重写。fork操作对于操作系统来说属于比较重的操作。fork阶段,redis会阻塞一段时间。阻塞时间和redis数据占用的内存大小成正比关系,每1G内存fork耗时在20毫秒。 如想知道fork阶段的阻塞时间,可以使用info stats命令,查看latest_fork_usec选项的值,单位是微秒。记住是微秒,不是毫秒。 # redis-cli info stats | grep latest latest_fork_usec:323    优化fork的方法: 控制redis占用的内存大小。若占用内存过大的话,可以将应用拆分开,在多个服务器上部署,分摊redis的内存占用。 适当降低fork的操作频率。 内存的监控 RDB持久化的日志如下: …… 21692:C 15 May 2020 14:17:06.935 * DB saved on disk 21692:C 15 May 2020 14:17:06.936 * RDB: 2 MB of memory used by copy-on-write ……   

redis 系列16 持久化 RDB

非 Y 不嫁゛ 提交于 2020-05-09 07:10:26
一.概述   Redis是内存数据库,一旦服务器进程退出,服务器中的数据库内存数据状态也会消失。为了解决这个问题,Redis提供了RDB 持久化功能,这个功能可以将redis在内存中的数据库状态保存到磁盘中,避免数据意外丢失。   RDB持久化可以手动执行,也可以根据服务器配置选项定期执行,是在指定的时间间隔,对你的数据进行快照存储。该RDB文件快照是一个经过压缩的二进制文件。文件名为dump.rdb,该文件保存在redis目录下,当redis服务器停机后,只要RDB文件存在,下次重启Redis服务时就会自动还原数据库数据状态。   1.1 RDB文件的创建     通过Redis两个命令来生成RDB文件,一是SAVE,另一个是BGSAVE。SAVE命令是会阻塞Redis服务器进程,直到RDB文件创建完毕为止,在阻塞期间,服务器不能处理任何命令请求。 127.0 . 0.1 : 6379 > save -- 等待RDB文件创建完毕 OK     与SAVE不同,BGSAVE命令会派生出一个子进程,然后由子进程负责创建RDB文件,服务器进程(父进程)继续处理命令请求。当BGSAVE命令在执行期间,客户端再发送BGSAVE命令会被服务器拒绝,因为同时执行两个GBSAVE命令也会产生竞争条件。最后BGREWRITEAOF和GBSAVE两个命令也不能同时执行。 127.0 . 0.1 :

通过sudo的方式启动redis就能保存dump.rdb

落花浮王杯 提交于 2020-05-08 15:37:59
1.今天发现redis使用save命令后报ERR错误,原因是权限不够,所以使用sudo启动自然能解决。 sudo ./bin/redis-server ./etc/redis.conf redis-cli -h 192.168.2.194 -p 6379 2.或者使用redis的过程中全程都是在root权限下即可。 来源: oschina 链接: https://my.oschina.net/u/4305437/blog/4270347