初步认识:
1、Redis是一个高性能key-value,它是基于内存操作的,它是一个key-value的非关系型数据库。
2、可以作为Nosql数据库,告诉缓存,消息队列的代理。
3、支持的数据类型:字符串,哈希,列表(list),集合,有序集合,位图。
对比:
Memcache是一个纯内存数据库,不能够持久化,只支持String数据类型
优点:
1、读写性能好,但是读的效率高于写的效率,但是可以使用Redis+ssdb+Lua脚本联合使用,因为Redis和ssdb共用一套客户端,即./Redis-cli,同样应用于ssdb中,所以启动Redis后就可以拿到ssdb中的数据,ssdb写的效率大于读的效率,即Redis作为读的,ssdb作为写的
2、支持数据的持久化
3、支持主从复制,主机回自动将数据同步到从机,可以进行读写分离
4、数据结构丰富
缺点:
1、Redis不具备自动容错和恢复功能(从机,主机宕机以后,会导致前端部分读写请求失败,需要等待机器的重启)
Redis的主从复制-->全量复制
1、复制过程中,主机或fork一个子进程对内存做一份快照,并将子进程的内存快照保存为文件,发送给从机,然而在该过程总需要确保主机有足够的空余内存,若快照文件比较大,对集群的服务能力会产生较大的影响
2、在主从复制的过程中有从机新加入集群或者从机和主机出现网络波动(断开连接),都会造成主机和从机之间的一次全量复制,这对实际的系统运营造成了不必要的麻烦
3、Redis较难支持在线扩容,在集群容量达到上限的时候,在线扩容会非常复杂,为解决这一问题,运维人员在系统上线的时候必须确保有足够的空间,否则会对资源造成很大的浪费
Redis的应用场景:
项目中的首页信息要存放在Redis中,因为访问频率高,允许有缓存的数据。
安装扩展:
如果需要使用redis,需要php安装redis的扩展
1,将需要的redis扩展包下载下来,这是一个压缩包:Wget http://pecl.php.net/get/redis-4.1.0.tgz
2,解压压缩包:tar zxvf redis-4.1.0.tgz
3,进入redis扩展包:cd redis-4.1.0/
4,通过phpize添加建立redis的扩展模块:/usr/local/php/bin/phpize
5,指定路径安装(php-config是一个简单的命令行脚本用户获取php上的所有配置信息)
./configure --with-php-config=/usr/local/php/bin/php-config
6,编译:Make
7,编译安装:make install
8,找到php.ini文件将redis的扩展写入:vim /usr/local/php/etc/php.ini
在php.ini中加入extendion = redis.so
9,杀死所有的php-fpm的进程,可不用(对php-fpm的理解:):killall php-fpm
10,重启php-fpm模块,并打印phpinfo:service php-fpm restart
结果:
链接php服务:
上一步是安装了redis的扩展,我们还需要用redis服务去链接php,可以随机开启redis服务或者是停止redis服务
1,将redis服务的压缩包进行下载:网址:http://download.redis.io/releases/
2,解压压缩文件并进入源码包
3,指定安装的目录:make PREFIX=/usr/local/redis install
4,安装:make
5,将源码包中的utils下的redis_init_script进行复制,复制到/etc/rc.d/init.d/redis(注意:最后的文件名为redis)
6,对/etc/rc.d/init.d/redis的文件进行编辑修改:
6(1),
检查此文件中的EXEC的服务器端与客户端的文件目录(源码包中)是否正确,这是我的路径:
EXEC=/usr/phpbag/redis/redis/bin/redis-server
CLIEXEC=/usr/phpbag/redis/redis/bin/redis-cli
(根据实际路径修改)
6(2),
开始命令加入&,后台运行,不然就会占用一个终端的端口
找到$EXEC $CONF,在命令的后面加& : $EXEC $CONF &
7,将源码包redis目录中的redis.conf文件拷贝到/etc/redis/6379.conf,对不存在的redis目录进行新建
8,将redis加入到环境变量中:vi /etc/profile
在最后一行中加入(根据自己的redis源码包实际路径填写):export PATH="$PATH:/usr/local/redis/bin"
9,
当我们修改了/etc/profile文件,并想让它立刻生效,而不用重新登录,就可以使用source命令,如source /etc/profile。
10,
注册redis服务
chkconfig --add redis
启动redis服务
service redis start
停止redis服务
Service redis stop
Redis服务器设置密码后,使用service redis stop 会出现以下信息:
service redis stop
Stopping ...
OK
(error) NOAUTH Authentication required.
Waiting for Redis to shutdown ...
Waiting for Redis to shutdown ...
Waiting for Redis to shutdown ...
Waiting for Redis to shutdown ...
Waiting for Redis to shutdown ...
Waiting for Redis to shutdown ...
Waiting for Redis to shutdown ...
Waiting for Redis to shutdown ...
出现这样的错误信息,redis 这时是没有停止服务的。
可以使用ps -ef | grep redis 查进程号 然后kill 掉,如果在deamon下还需要去删除pid文件,有点繁琐。
解决办法:
用redis-cli 密码登陆(redis-cli -a password)就OK了。
再用ps -ef | grep redis 可以看到redis进程已经正常退出。
修改redis服务脚本,加入如下所示的红色授权信息即可:
vi /etc/init.d/redis
$CLIEXEC -a "password" -p $REDISPORT shutdown