Redis数据全盘硬盘持久化实践
Redis是一款高性能的内存数据库,然而如果没有进行持久化操作,一旦Redis进程意外崩溃,所有数据都将会丢失。而Redis提供的两种持久化方式(RDB和AOF)都不能完全解决这个问题。于是,全盘硬盘持久化成为了一种必备的解决方案。
全盘硬盘持久化的实现方式是将Redis的所有数据写入硬盘,形成一个快照。当Redis出现重启或崩溃时,便可以通过读取这个快照文件来恢复数据。本文将介绍如何实现Redis的全盘硬盘持久化。
实现步骤如下:
1. 执行SAVE命令
在启动Redis时,首先需要执行一次SAVE命令,将所有数据写入快照文件中。以下是示例代码:
redis-cli save
执行SAVE命令后,Redis会立即将所有数据写入到硬盘中,并在当前目录下生成一个名为“dump.rdb”的快照文件。
2. 配置redis.conf文件

打开redis.conf文件,找到以下两行配置:
#save 900 1#save 300 10
这是Redis默认的RDB持久化配置,其中每900秒如果至少有1个键被修改,则将数据写入到硬盘中;每300秒如果至少有10个键被修改,则将数据写入到硬盘中。为了实现全盘硬盘持久化,需要将这两行配置注释掉,并添加以下一行配置:
save ""
这样,每次有键值更新时,Redis会将所有更新数据都写入到硬盘中。但是,这种做法的缺点是会严重影响Redis的性能。因此,需要通过no-appendfsync-on-rewrite选项来优化性能。
在redis.conf文件中添加以下一行配置:
no-appendfsync-on-rewrite yes
这样,每次进行RDB持久化时,Redis就不会再执行fsync操作,减少磁盘IO写入操作和磁盘损耗率。
3. 配置Linux VM参数
为了确保Redis能够顺利地运行,需要配置Linux的VM参数。通过以下命令配置:
echo 'vm.overcommit_memory = 1' >> /etc/sysctl.confecho 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local
第一个命令将vm.overcommit_memory参数设置为1,表示允许Linux系统不检查是否有足够的内存可用于分配新的内存页。这是因为Redis的内存分配策略是使用malloc函数,而malloc函数并不会预先分配内存,而是动态分配内存。
第二个命令是为了关闭透明大页面机制,避免出现缺页错误,并确保Redis能够顺利运行。
4. 重启Redis
完成以上配置后,需要重启Redis以使配置生效。以下是示例代码:
service redis restart
通过以上配置,Redis数据的全盘硬盘持久化就完成了。如果Redis进程意外崩溃,可以通过读取快照文件来恢复数据。当然,这种方式可能会影响Redis的性能,因此需要根据实际情况来选择是否使用。
香港服务器首选树叶云,2H2G首月10元开通。树叶云(www.IDC.Net)提供简单好用,价格厚道的香港/美国云 服务器 和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。
redis中的zadd是啥意思
redis是一个key-value存储系统。 和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。 这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。 在此基础上,redis支持各种不同方式的排序。 与memcached一样,为了保证效率,数据都是缓存在内存中。 区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
数据写入redis并返回怎么处理
1、 快照的方式持久化到磁盘自动持久化规则配置save 900 1save 300 10save 60 上面的配置规则意思如下:# In the example below the behaviour will be to save:# after 900 sec (15 min) if at least 1 key changed# after 300 sec (5 min) if at least 10 keys changed# after 60 sec if at least keys changedredis也可以关闭自动持久化,注释掉这些save配置,或者save “”如果后台保存到磁盘发生错误,将停止写操作-writes-on-bgsave-error yes使用LZF压缩rdb文件,这会耗CPU, 但是可以减少磁盘占用 yes保存rdb和加载rdb文件的时候检验,可以防止错误,但是要付出约10%的性能,可以关闭他,提高性能。 rdbchecksum yes导出的rdb文件名dbfilename 设置工作目录, rdb文件会写到该目录, append only file也会存储在该目录下 ./Redis自动快照保存到磁盘或者调用bgsave,是后台进程完成的,其他客户端仍然和可以读写redis服务器,后台保存快照到磁盘会占用大量内存。 调用save保存内存中的数据到磁盘,将阻塞客户端请求,直到保存完毕。 调用shutdown命令,Redis服务器会先调用save,所有数据持久化到磁盘之后才会真正退出。 对于数据丢失的问题:如果服务器crash,从上一次快照之后的数据将全部丢失。 所以在设置保存规则的时候,要根据实际业务设置允许的范围。 如果对于数据敏感的业务,在程序中要使用恰当的日志,在服务器crash之后,通过日志恢复数据。 2、 Append-only file 的方式持久化另外一种方式为递增的方式,将会引起数据变化的操作, 持久化到文件中, 重启redis的时候,通过操作命令,恢复数据.每次执行写操作命令之后,都会将数据写到中。 # appendfsync alwaysappendfsync everysec# appendfsync no当配置为always的时候,每次中的数据写入到文件之后,才会返回给客户端,这样可以保证数据不丢,但是频繁的IO操作,会降低性能。 everysec每秒写一次,这可能会丢失一秒内的操作。 aof最大的问题就是随着时间append file会变的很大,所以我们需要bgrewriteaof命令重新整理文件,只保留最新的kv数据。
为什么瑞星杀毒时卡?
所谓杀毒,原理在于杀毒软件检索硬盘内,内存内的所有文件与病毒特征库相对照,以判断病毒.过程中进行的运算,存储,提取,隔离,分析,都是需要内存与CPU参与的,所以如果CPU慢,则运算分析效率低,若内存小,则会很影响同时运行的软件的内存进程请求,所以也会影响速度.开久了也会卡,是不是你的机器散热不好,建议检查另外杀毒的时候卡,很有可能是硬盘有坏道,导致全盘检索的时候磁盘效率低下,建议查一下硬盘.也有可能是磁盘碎片过多,建议清理磁盘碎片
发表评论