<i id="nlljl"></i>
<var id="nlljl"><span id="nlljl"></span></var><cite id="nlljl"><span id="nlljl"></span></cite>
<var id="nlljl"><video id="nlljl"></video></var><cite id="nlljl"><noframes id="nlljl">
<cite id="nlljl"><noframes id="nlljl">
<ins id="nlljl"></ins>
<var id="nlljl"></var><ins id="nlljl"></ins>
<ins id="nlljl"></ins>
<ins id="nlljl"></ins>
<ins id="nlljl"></ins>
<ins id="nlljl"></ins>
<cite id="nlljl"><span id="nlljl"><var id="nlljl"></var></span></cite>
联系方式 Contact

聊城科达信息技术有限公司

地址:山东省聊城市东昌府区威尼斯购物公园南首6路

电话:0635-8185888

传真:0635-8314011

邮箱:lckeda2006@163.com

网址:www.gslacrosse.com

搜索 Search
你的位置:首页 > 知识库 > 技术手册

redis常见问题解决方案

2019/12/11 8:08:19点击:

1. 强制关闭Redis快照导致不能持久化

MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.

Redis被配置为保存数据库快照,但它目前不能持久化到硬盘。用来修改集合数据的命令不能用。请查看Redis日志的详细错误信息。

原因:

强制关闭Redis快照导致不能持久化。

解决方案:

运行config set stop-writes-on-bgsave-error no 命令后,关闭配置项stop-writes-on-bgsave-error解决该问题。

root@centos:/usr/local/redis/bin# ./redis-cli
127.0.0.1:6379> config set stop-writes-on-bgsave-error no
OK
127.0.0.1:6379> lpush myColour "red"

(integer) 1

 

 

 

2. 内存使用率

因内存交换引起的性能问题

内存使用率是Redis服务最关键的一部分。如果一个Redis实例的内存使用率超过可用最大内存 (used_memory > 可用最大内存),那么操作系统开始进行内存与swap空间交换,把内存中旧的或不再使用的内容写入硬盘上(硬盘上的这块空间叫Swap分区),以便腾出新的物理内存给新页或活动页(page)使用。 
在硬盘上进行读写操作要比在内存上进行读写操作,时间上慢了近5个数量级,内存是0.1μs单位、而硬盘是10ms。如果Redis进程上发生内存交换,那么Redis和依赖Redis上数据的应用会受到严重的性能影响。 通过查看used_memory指标可知道Redis正在使用的内存情况,如果used_memory>可用最大内存,那就说明Redis实例正在进行内存交换或者已经内存交换完毕。管理员根据这个情况,执行相对应的应急措施。

解决方案:
跟踪内存使用率

若是在使用Redis期间没有开启rdb快照或aof持久化策略,那么缓存数据在Redis崩溃时就有丢失的危险。因为当Redis内存使用率超过可用内存的95%时,部分数据开始在内存与swap空间来回交换,这时就可能有丢失数据的危险。
当开启并触发快照功能时,Redisfork一个子进程把当前内存中的数据完全复制一份写入到硬盘上。因此若是当前使用内存超过可用内存的45%时触发快照功能,那么此时进行的内存交换会变的非常危险(可能会丢失数据)。 倘若在这个时候实例上有大量频繁的更新操作,问题会变得更加严重。

通过减少Redis的内存占用率,来避免这样的问题,或者使用下面的技巧来避免内存交换发生:

    1.假如缓存数据小于4GB,就使用32位的Redis实例。因为32位实例上的指针大小只有64位的一半,它的内存空间占用空间会更少些。 这有一个坏处就是,假设物理内存超过4GB,那么32位实例能使用的内存仍然会被限制在4GB以下。 要是实例同时也共享给其他一些应用使用的话,那可能需要更高效的64Redis实例,这种情况下切换到32位是不可取的。 不管使用哪种方式,Redisdump文件在32位和64位之间是互相兼容的, 因此倘若有减少占用内存空间的需求,可以尝试先使用32位,后面再切换到64位上。

     2.尽可能的使用Hash数据结构。因为Redis在储存小于100个字段的Hash结构上,其存储效率是非常高的。所以在不需要集合(set)操作或listpush/pop操作的时候,尽可能的使用Hash结构。比如,在一个web应用程序中,需要存储一个对象表示用户信息,使用单个key表示一个用户,其每个属性存储在Hash的字段里,这样要比给每个属性单独设置一个key-value要高效的多。 通常情况下倘若有数据使用string结构,用多个key存储时,那么应该转换成单key多字段的Hash结构。 如上述例子中介绍的Hash结构应包含,单个对象的属性或者单个用户各种各样的资料。Hash结构的操作命令是HSET(key, fields, value)HGET(key, field),使用它可以存储或从Hash中取出指定的字段。

3.设置key的过期时间。一个减少内存使用率的简单方法就是,每当存储对象时确保设置key的过期时间。倘若key在明确的时间周期内使用或者旧key不大可能被使用时,就可以用Redis过期时间命令(expire,expireat, pexpire, pexpireat)去设置过期时间,这样Redis会在key过期时自动删除key。 假如你知道每秒钟有多少个新key-value被创建,那可以调整key的存活时间,并指定阀值去限制Redis使用的最大内存。

4.回收key。在Redis配置文件中(一般叫Redis.conf),通过设置“maxmemory”属性的值可以限制Redis最大使用的内存,修改后重启实例生效。 也可以使用客户端命令config set maxmemory 去修改值,这个命令是立即生效的,但会在重启后会失效,需要使用config rewrite命令去刷新配置文件。 若是启用了Redis快照功能,应该设置“maxmemory”值为系统可使用内存的45%,因为快照时需要一倍的内存来复制整个数据集,也就是说如果当前已使用45%,在快照期间会变成95%(45%+45%+5%),其中5%是预留给其他的开销。 如果没开启快照功能,maxmemory最高能设置为系统可用内存的95%。

    当内存使用达到设置的最大阀值时,需要选择一种key的回收策略,可在Redis.conf配置文件中修改“maxmemory-policy”属性值。 若是Redis数据集中的key都设置了过期时间,那么“volatile-ttl”策略是比较好的选择。但如果key在达到最大内存限制时没能够迅速过期,或者根本没有设置过期时间。那么设置为“allkeys-lru”值比较合适,它允许Redis从整个数据集中挑选最近最少使用的key进行删除(LRU淘汰算法)。Redis还提供了一些其他淘汰策略,如下:

  • volatile-lru:使用LRU算法从已设置过期时间的数据集合中淘汰数据。

  • volatile-ttl:从已设置过期时间的数据集合中挑选即将过期的数据淘汰。

  • volatile-random:从已设置过期时间的数据集合中随机挑选数据淘汰。

  • allkeys-lru:使用LRU算法从所有数据集合中淘汰数据。

  • allkeys-random:从数据集合中任意选择数据淘汰

  • no-enviction:禁止淘汰数据。

通过设置maxmemory为系统可用内存的45%95%(取决于持久化策略)和设置“maxmemory-policy”“volatile-ttl”“allkeys-lru”(取决于过期设置),可以比较准确的限制Redis最大内存使用率,在绝大多数场景下使用这2种方式可确保Redis不会进行内存交换。倘若你担心由于限制了内存使用率导致丢失数据的话,可以设置noneviction值禁止淘汰数据。

3、虚拟内存方式无法启动
启动redis服务失败,提示如下信息:

ARE YOU SURE YOU WANT TO USE VM?

Redis Virtual Memory is going to be deprecated soon,

we think you should NOT use it, but use Redis only if

your data is suitable for an in-memory database.

If you *really* want VM add this in the config file:

    really-use-vm yes

解决方案:

此时需在配置文件中增加 really-use-vm yes,重启。



4、redis启动时报警错误 
1)The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128

2WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add ‘vm.overcommit_memory = 1‘ to /etc/sysctl.conf and then reboot or run the command ‘sysctl vm.overcommit_memory=1‘ for this to take effect.

解决:

针对这两个问题,都要修改/etc/sysctl.conf文件,在文件末尾加入以下两句:

net.core.somaxconn= 1024
vm.overcommit_memory = 1

3WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command ‘echo never > /sys/kernel/mm/transparent_hugepage/enabled‘ as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.

临时解决:root用户执行echo never > /sys/kernel/mm/transparent_hugepage/enabled

永久解决:将上面这句话写入到/etc/rc.local文件中。

修改完成后重启redis。

数据库连接上,和一些中文乱码问题。 

亚洲最大中文字幕无码网站,和女儿弄了好多年了,宝宝快点我坚持不住了视频,俄罗斯人zozo与牲交