本次使用linux版本是centos7:
1、下载压缩包到本地:
比如:curl http://download.redis.io/releases/redis-3.0.4.tar.gz -o redis-3.0.4.tar.gz
或者:# wget http://download.redis.io/releases/redis-3.0.4.tar.gz
如果没有安装过 GCC 和 Make,那么就使用 yum 安装:
# yum install gcc make
2、解压,,进入解压后的目录,依次:
# tar zxvf redis-3.0.4.tar.gz
# cd redis-3.0.4
# make
# make install
3、启动:
在/redis-3.0.4/src目录中,直接输出以下命令即可:
# redis-server /redis-3.0.4/redis.conf
但当前配置文件为在前台启动,即你退出或关闭当前窗口,redis就会关闭服务,所以修改配置文件:
# vi redis.conf
将daemonize no改为daemonize yes即可在后台启动。
4、客户端连接,进入操作:
# redis-cli 或 # redis-cli -h 127.0.0.1 -p 6379
从客户端连接中退出:
# exit
5、关闭,使用客户端命令即可:
# redis-cli shutdown
6、设置开机自启动:如果要将redis开启关闭等做成service服务,可参考此文章,或这一篇
配置各项参数:
- daemonize:是否以后台daemon方式运行
- pidfile:pid文件位置
- port:监听的端口号
- timeout:请求超时时间
- loglevel:log信息级别
- logfile:log文件位置
- databases:开启数据库的数量
- save * *:保存快照的频率,第一个*表示多长时间,第三个*表示执行多少次写操作。在一定时间内执行一定数量的写操作时,自动保存快照。可设置多个条件。
- rdbcompression:是否使用压缩
- dbfilename:数据快照文件名(只是文件名)
- dir:数据快照的保存目录(仅目录)
- appendonly:是否开启appendonlylog,开启的话每次写操作会记一条log,这会提高数据抗风险能力,但影响效率。
- appendfsync:appendonlylog如何同步到磁盘。三个选项,分别是每次写都强制调用fsync、每秒启用一次fsync、不调用fsync等待系统自己同步
6、redis的两种持久化模式:可参考博文
RDB(快照) 和 AOF (记录执行日志),通常,Redis将数据存储于内存中,或被配置为使用虚拟内存。通过两种方式可以实现数据持久化:使用快照的方式,将内存中的数据不断写入磁盘;或使用类似MySQL的日志方式,记录每次更新的日志。前者性能较高,但是可能会引起一定程度的数据丢失;后者相反。
redis集群:
1、修改配置文件:
port 6379
pidfile /var/run/redis_6379.pid #pid文件记录对应进程的pid,防止进程启动多个副本,启动时,同一进程的多余进程会退出。
daemonize yes # redis默认不是后台启动,这里修改成后台启动
cluster-enabled yes # 允许redis支持集群模式
cluster-config-file nodes_6379.conf #集群的配置 配置文件首次启动自动生成 7000,7001,7002
cluster-node-timeout 15000 # 节点超时毫秒
appendonly yes //aof日志开启
类似这种,复制几份redis.conf到不同路径,改一下端口等,
2、使用不同配置文件分别启动
3、安装ruby环境:
# yum install -y ruby rubygems
# gem install redis
4、创建集群(在redis/src):
# redis-trib.rb create --replicas 1 192.168.1.1:6379 192.168.1.1:6380 192.168.1.1:6381 192.168.1.2:6379 192.168.1.2:6380 192.168.1.2:6381
如果执行报错,那是ruby安装有问题:
/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file
整合到spring遇到的问题:
1、centos安装redis,其他服务器互相ping的通,但访问对方的redis就会出现Could not connect to Redis at 192.168.1.195:6379: No route to host:
解决:输入命令:# iptables -F
知识点:
1、生成快照的SAVE和 BGSAVE区别:
都是调用rdbSave函数持久化生成快照,SAVE会阻塞主进程到结束,BGSAVE则会fork一个子进程,而主进程继续处理请求。
所以一般用SAVE,缓存文件特别大,达到几十G时,就要考虑写脚本手动持久化。
2、只追加文件(AOF)持久化:每次更新都做记录,用于数据安全性高的地方。但每秒可处理大约200个命令。
3、一般主用来处理请求,从用来做备份。主从保持一致是通过复制:主发送快照给从进行更新。
4、redis不支持主主复制,而很多公司会用到mysql的主主复制。