php7.0升级php7.1后,php -m看不到redis模块,加载redis会报以下问题,
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20160303/redis.so' - /usr/lib/php/20160303/redis.so: undefined symbol: igbinary_serialize in Unknown on line 0
php7.0升级php7.1后,php -m看不到redis模块,加载redis会报以下问题,
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20160303/redis.so' - /usr/lib/php/20160303/redis.so: undefined symbol: igbinary_serialize in Unknown on line 0
redis突然挂掉后,无法启动,查看log日志,发现报Short read or OOM loading DB. Unrecoverable error, aborting now
一,什么是overcommit or oom问题
Linux对大部分申请内存的请求都回复"yes",以便能跑更多更大的程序。因为申请内存后,并不会马上使用内存。这种技术叫做Overcommit。当linux发现内存不足时,会发生OOM killer(OOM=out-of-memory)。它会选择杀死一些进程(用户态进程,不是内核线程),以便释放内存。
当oom-killer发生时,linux会选择杀死哪些进程?选择进程的函数是oom_badness函数(在mm/oom_kill.c中),该函数会计算每个进程的点数(0~1000)。点数越高,这个进程越有可能被杀死。每个进程的点数跟oom_score_adj有关,而且oom_score_adj可以被设置(-1000最低,1000最高)。
找遍了redis cluster官方文档,没发现有关集群重启和关闭的方法。为啥会没有呢,猜测redis cluster至少要三个节点才能运行,三台同时挂掉的可能性比较小,只要不同时挂掉,挂掉的机器修复后在加入集群,集群都能良好的运作,万一同时挂掉,数据又没有备份的话,就有大麻烦了。
redis cluster集群中的节点基本上都对等的,没有管理节点。如果要让所有节点都关闭,只能关闭进程了# pkill -9 redis
有人问我,redis的多数据库,是不是启动多个redis进程,监听不同的端口。从某种层面上来说,这样可以算是,但是不推荐。
php有redis的扩展,目前来说,还不支持redis cluster,推荐一下predis,功能比较全,从单个,到主从,到cluster都是支持的。效率怎么样,要靠自己去测试一下。
Redis 集群是一个提供在多个Redis间节点间共享数据的程序集.redis3.0以前,只支持主从同步的,如果主的挂了,写入就成问题了。3.0出来后就可以很好帮我们解决这个问题。
目前redis 3.0还不稳定,如果要用在生产环境中,要慎重。
redis配置参数,非常的多,下面罗列了一些redis 常用参数配置,以及中文注释。
以前考虑过这个问题,今天实现了一下,挺快的,从研究到开发完成差不多4个小时。有点类似QQ,二台电脑登录,一台会把另一台挤掉线,并提示其他地点登录信息。