## Redis安装
1. 下载Redis,这里我们使用Redis-2.8.24,文件名为:`redis-2.8.24.tar.gz`,放到Linux目录`/usr/local/src`下。2. 安装Redis之前我们需要先安装Redis的依赖程序tcl和gcc,如果不安装在执行make编译的时候就会报错,命令:`yum install -y tcl gcc`3. 下面就开始编译安装Redis:```$ cd /usr/local/src$ tar zxvf redis-2.8.24.tar.gz -C /usr/local$ cd /usr/local/$ mv redis-2.8.24 redis$ cd redis$ make$ make test$ make install$ mkdir /etc/redis$ cp redis.conf /etc/redis/```4. 执行初始化脚本s
```cd redis/utils./install_server.sh```执行以后会让你确认几个配置,直接回车即可,成功以后提示信息如下:```Selected config:Port : 6379Config file : /etc/redis/6379.confLog file : /var/log/redis_6379.logData dir : /var/lib/redis/6379Executable : /usr/local/bin/redis-serverCli Executable : /usr/local/bin/redis-cliIs this ok? Then press ENTER to go on or Ctrl-C to abort.Copied /tmp/6379.conf => /etc/init.d/redis_6379Installing service...Successfully added to chkconfig!Successfully added to runlevels 345!/var/run/redis_6379.pid exists, process is already running or crashedInstallation successful!```5. 初始化脚本以后,redis会自动启动,如果没有启动,可以手动启动redis:
```启动:/etc/init.d/redis_6379 start关闭:/etc/init.d/redis_6379 stop或者启动:systemctl start redis_6379关闭:systemctl stop redis_6379查看状态:systemctl status redis_6379```6. 使用客户端操作一下redis吧。
```redis-cli>set name helloOK>get name"hello"```7. 这时我们在本机上可以直接连接,但是如果需要远程连接的话,必须要在防火墙上开通redis的监听端口,这里是6379端口,下面编辑防火墙配置文件,开放6379端口。
```vim /etc/sysconfig/iptablessystemctl restart iptables```## Redis主从配置
### 配置主从Redis主从配置只需要修改Redis的配置文件,下面我们来看一下主和从的配置:1. 主配置```masterauth hokai #主库认证密码requirepass hokai #客户端连接密码注释bind 127.0.0.1```2. 从配置
其他与主配置一样,只不过是将slaveof指定主服务器的IP地址和端口```slaveof 192.168.99.111 6379```3. 重启主和从的redis服务,测试redis主从配置
因为我们设置了密码,所以在对redis操作的时候,需要验证一下密码。 另外,从服务器对主服务器是只读的,所有从服务器是不能修改信息的。- 主服务器
```[root@redis01 ~]# redis-cli127.0.0.1:6379> AUTH hokaiOK127.0.0.1:6379> set test 111OK```- 从服务器
```[root@redis02 ~]# redis-cli127.0.0.1:6379> AUTH hokaiOK127.0.0.1:6379> get test"111"127.0.0.1:6379> set test 222(error) READONLY You can't write against a read only slave.```### 注意事项
#### 主从复制原理当 Master 与 Slave 均运作正常时, Master负责服务,Slave负责Standby;当 Master 挂掉,Slave 正时, Slave接管服务,同时关闭主从复制功能;当 Master 恢复正常,则从Slave同步数据,同步数据之后关闭主从复制功能,恢复Master身份,于此同时Slave等待Master同步数据完成之后,恢复Slave身份。然后依次循环。需要注意的是,这样做需要在Master与Slave上都开启本地化策略,否则在互相自动切换的过程中,未开启本地化的一方会将另一方的数据清空,造成数据完全丢失。Redis的复制功能是非常简单易用的,配置为主从复制功能之后允许Redis的slave服务器复制出与master完全一致的服务器。#### 在master节点关闭持久化功能时,复制的安全性当在设置中开启Redis复制功能时,强烈建议的做法是在master节点中开启持久化功能,或者绝对不可能发生的是:因为延迟问题,将Redis实例被配置为避免自动重启。为了更好的理解为什么将关闭持久化功能的master节点配置为自动重启是非常危险的,我们看看下面在数据从master节点与其对应的所有slave节点移除时发生的失败类型:假设A节点是master节点,B,C节点是其对应的副本。
A发生崩溃时,(配置为自动重启),重新启动了进程。然而因为持久化功能是关闭的,所以重启之后,该节点内的数据为空。节点B,C将会从A进行复制,这时A中的数据集是空的,因此,这时,B,C将会彻底删除他们之前备份的数据。为了高可用性,引入了Redis的哨兵(sentinel),关闭了master节点上的持久化,并且两者都配置为自动重启,这种做法也是非常危险的。举个例子:master节点可能非常快的就完成了重启,以至于sentienl都没有感知到失败的发生,接下来就会发生和上面例子一样的结果。
在任何时间,数据的安全都是非常重要的,因此,在使用复制功能时,master节点如果没有持久化功能,自动重启的功能是必须被禁止的。## 安装报错信息解决
#### 1、不能编译,没有GCC 编译工具cc -c -std=c99 -pedantic -O2 -Wall -W -g -rdynamic -ggdb adlist.cmake: cc:命令未找到make: *** [adlist.o] 错误 127**解决方法:安装gcc**
命令如下:yum install gcc#### 2、make时可能会报如下错误:
collect2: ld returned 1 exit statusmake[1]: [redis-server] Error 1make[1]: Leaving directory `/usr/local/redis/src'make: [all] Error 2解决办法:
编辑src/.make-settings里的OPT,改为OPT=-O2 -march=i686#### 3、make时还可能会报如下错误:
cc: error: ../deps/hiredis/libhiredis.a: No such file or directorycc: error: ../deps/lua/src/liblua.a: No such file or directorycc: error: ../deps/jemalloc/lib/libjemalloc.a: No such file or directorymake: [redis-server] Error 1分别进入redis下的deps下的hiredis、lua 运行make
注意:jemalloc下可能要先运行./configure,然后make回到src目录运行 make结果还是报cc: error: ../deps/lua/src/liblua.a: No such file or directory
这下子我把redis的解压包 删除掉 rm -rf redis
重新解压,进入redis make 还真没报错了。
**院内HIP 的redis 初始化数据,在redis-cli 中执行下面命令:**
```
set hiip:empi:pageheader '[{"name":"empiId","chsName":"empiid","type":"String","order":1},{"name":"idNo","chsName":"身份证号","type":"String","order":1},{"name":"name","chsName":"居民姓名","type":"String","order":1},{"name":"genderName","chsName":"性别","type":"String","order":1},{"name":"birthDate","chsName":"出生日期","type":"String","order":1},{"name":"maritalStatusName","chsName":"婚姻状况","type":"String","order":1},{"name":"nationalityName","chsName":"民族","type":"String","order":1}]'```