windows 3.2版本免安装
直接执行redis-server命令的时候,是没有读取目录下的配置文件的,因此不论怎么改配置文件都不生效,目录下的redis.windows.conf和redis.windows-service.conf是两个相同的配置文件,在启动redis的时候需要指定配置文件才会使redis配置文件生效,命令如下
redis-server redis.windows.conf
即可使用此配置文件中的信息。
默认情况redis是不允许其他IP访问的,需要修改配置文件:
bind 127.0.0.1注释掉
requirepass 123456配置密码
然后启动即可
注意redis启动时黑窗口最上面是否有warning,一般就是没有指定配置文件导致的。
redis-cli.exe -h 127.0.0.1 -p 6379
连接上去后,执行命令auth 123456即可连接上服务端
取消RDB模式持久化:将save ""取消注释
踩坑:当你程序所在服务器和redis不在一台服务器时,服务器时间相差非常大,也会报错!!!
相关命令参考:http://doc.redisfans.com/index.html
该链接有命令详细信息,以及算法复杂度
主从配置命令:
搞两个redis实例配置好,然后在从库的配置文件中配置主库的密码配置,即添加一行配置
masterauth 123456
然后启动从库,执行命令
slaveof 192.168.1.1 6379
让从库的黑窗口会有success的字样,表示主从成功了。
持久化方式见解:
rdb持久化就不解释了,AOF持久化,每秒持久化性能还行,但是开启always模式,性能急剧下降,还不如存数据库的性能。所以不要抱什么希望让redis的持久化来保证绝对的数据高可用性了。
主从切换实践(sentinel):
我用的是windows版本下的redis 3.2,下载下来后,复制一份,命名为redis-sentinel,这里解释下,一个sentinel实例和redis实例是一样的,只是启动命令不一样而已,然后需要在这个文件夹下添加一个sentinel.conf文件,如下图
文件内容就是sentinel的配置信息,网上都有,但是我也拷贝一份吧,
port 26379
#master
sentinel monitor master 127.0.0.1 6379 1
sentinel down-after-milliseconds master 5000
sentinel failover-timeout master 180000
sentinel parallel-syncs master 1
sentinel auth-pass master 123456
protected-mode no
参数相关解释
1. port :当前Sentinel服务运行的端口
2.sentinel monitor mymaster 127.0.0.1 6379 2:Sentinel去监视一个名为mymaster的主redis实例,这个主实例的IP地址为本机地址127.0.0.1,端口号为6379,而将这个主实例判断为失效至少需要2个 Sentinel进程的同意,只要同意Sentinel的数量不达标,自动failover就不会执行
3.sentinel down-after-milliseconds mymaster 5000:指定了Sentinel认为Redis实例已经失效所需的毫秒数。当 实例超过该时间没有返回PING,或者直接返回错误,那么Sentinel将这个实例标记为主观下线。只有一个 Sentinel进程将实例标记为主观下线并不一定会引起实例的自动故障迁移:只有在足够数量的Sentinel都将一个实例标记为主观下线之后,实例才会被标记为客观下线,这时自动故障迁移才会执行
4.sentinel failover-timeout mymaster 18000:如果在该时间(ms)内未能完成failover操作,则认为该failover失败
5.sentinel parallel-syncs mymaster 1:指定了在执行故障转移时,最多可以有多少个从Redis实例在同步新的主实例,在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长
6.reids配置账号密码,在做哨兵的时候,这个黑窗口会出现 i will not start a failover before.....说不能启动故障转移,需要在sentinel.conf中添加密码配置,注意这个master名字和sentinel monitor后面名字相同
7.然后远程连接哨兵,你会发现各种报错,比如远程主机强迫关闭一个连接或者一堆英文什么的,还要加个配置:protected-mode no,保护模式,加上就可以。
再给两个参考地址:
https://segmentfault.com/a/1190000002680804
http://blog.csdn.net/captain_harlock/article/details/51519379
然后就可以愉快的启动sentinel实例了,切换至刚才实例文件夹下,启动命令:
redis-server sentinel.conf --sentinel
这样就成功启动监控实例了。我先去试验一把。
- SENTINEL masters :列出所有被监视的主服务器,以及这些主服务器的当前状态。
- SENTINEL slaves :列出给定主服务器的所有从服务器,以及这些从服务器的当前状态。
- SENTINEL get-master-addr-by-name : 返回给定名字的主服务器的 IP 地址和端口号。 如果这个主服务器正在执行故障转移操作, 或者针对这个主服务器的故障转移操作已经完成, 那么这个命令返回新的主服务器的 IP 地址和端口号。
- SENTINEL reset : 重置所有名字和给定模式 pattern 相匹配的主服务器。 pattern 参数是一个 Glob 风格的模式。 重置操作清楚主服务器目前的所有状态, 包括正在执行中的故障转移, 并移除目前已经发现和关联的, 主服务器的所有从服务器和 Sentinel 。
- SENTINEL failover : 当主服务器失效时, 在不询问其他 Sentinel 意见的情况下, 强制开始一次自动故障迁移 (不过发起故障转移的 Sentinel 会向其他 Sentinel 发送一个新的配置,其他 Sentinel 会根据这个配置进行相应的更新)。
打完收工...
redis配置成服务形式:
redis-server.exe --service-install redis.windows.conf --loglevel verbose
补充C#连接redis的相关东西。使用StackExchange.Redis连接多个库可以自动识别主库,不用担心。参考官方文档
https://stackexchange.github.io/StackExchange.Redis/
如有错误,或者意见欢迎来电:awith@qq.com