Redis在windows下的环境搭建

Redis在windows下的环境搭建

下载windows版本redis,,官方下载地址:http://redis.io/download,

不过官方没有Windows版本,官网只提供linux版本的下载,目前有个开源的托管在github上, 地址:https://github.com/MicrosoftArchive/redis/tags

Redis在windows下的环境搭建

Redis在windows下的环境搭建

上面提供了两种安装方式,一种是解压版,一种是安装版;

图简单省事可以选择安装版,选择解压版为了达到和安装板一样的效果,还得自己去加环境变量,去进行各种设置。

Redis在windows下的环境搭建

Redis在windows下的环境搭建

选择安装目录,打钩会帮你添加安装路径的环境变量

Redis在windows下的环境搭建

选择服务开启的端口号,打钩选择让防火墙放过对这个端口的限制;

Redis在windows下的环境搭建

指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。

Redis存在vm机制,如果打开后,在上面的情况下会把Key存放内存,Value会存放在swap区。

Redis在windows下的环境搭建

以上是安装好以后的目录

文件名

简要

redis-benchmark.exe

基准测试  redis-benchmark为redis性能测试工具

redis-check-aof.exe

aof AppendOnly File的缩写,是Redis系统提供的一种记录Redis操作的持久化方案

redischeck-dump.exe

dump redis的备份和还原,借助了第三方的工具,redis-dump

redis-cli.exe

客户端

redis-server.exe

服务器

redis.windows.conf

配置文件

在redis.windows.conf文件中设置redis密码,在这里:# requirepass foobared

比如设置密码 test

Redis在windows下的环境搭建

requirepass test

如果你需要其他机器连接这台机器的redis服务器的话,需要注释掉 #bind 127.0.0.1

双击redis-server.exe,弹出如下界面,可以启动redis。

Redis在windows下的环境搭建

但是关掉这个UI后,redis也会随之停止,可以采取以redis后台服务的这种方法运行:

Redis在windows下的环境搭建

选中redis服务,右键启动;

这里有个坑,如果你通过双击redis-server.exe方式访问,redis读取的是redis.windows.conf中的配置信息;

如果你以服务的方式启动,redis读取的是redis.windows-service.conf中的配置信息,你需要重新在redis.windows-service.conf中配置是否绑定ip,以及密码等,

否则就会出现127.0.0.1可以访问,但是通过本机ip却不能访问的现象;

安装redis数据库可视化工具,这里安装 RedisDesktopManager,软件地址:https://github.com/uglide/RedisDesktopManager/releases

Redis在windows下的环境搭建

Redis在windows下的环境搭建

下载下来以后,一路next安装,打开软件

Redis在windows下的环境搭建

测试一下:

双击redis-cli.exe打开redis客户端,存一个key 为name ,value为hello的值进redis,然后取一下,能获取到值,在图形化工具内部,打开连接的redis实例,也能看到刚才存放的值;说明环境搭建成功!

Redis在windows下的环境搭建

Redis的配置信息在redis.windows.conf文件中,可以根据自己的需要进行修改;

1. Redis默认不是以守护进程的方式运行,默认daemonize no,可以通过该配置项修改,使用yes启用守护进程,不过windows上不支持 daemonize no;

,作者在自己的一篇博文中解释了为什么选用6379作为默认端口,因为6379在手机按键上MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz的名字

port 6379

.绑定的主机地址

bind 127.0.0.1

绑定后只能该ip访问redis,不绑定可以注释掉;

,表示关闭该功能

timeout 0

5. 指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose,logfile为日志名字

loglevel verbose

logfile ""

,可以使用SELECT <dbid>命令在连接上指定数据库;

databases 16

7.指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合;

save <seconds> <changes>

Redis默认配置文件中提供了三个条件:

save 900 1

save 300 10

save 60 10000

秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。

8. 指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大

rdbcompression yes

9. 指定本地数据库文件名,默认值为dump.rdb

dbfilename dump.rdb

10. 指定本地数据库存放目录

dir ./

11. 设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步

slaveof <masterip> <masterport>

12. 当master服务设置了密码保护时,slav服务连接master的密码

masterauth <master-password>

13. 设置同一时间最大客户端连接数,默认无限制

# maxclients 10000

14. 指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区

maxmemory <bytes>

15. 如果Redis是只用于内存缓存,不做任何持久化,这时背后AOF/RDB的fork()机制就没必要了;作为一个优化,所有的持久化操作可以在redis的windows版本上被关掉;选择 no 后,不持久数据,数据在服务终止后将消失,此模式下也将不存在"数据恢复"的手段

# persistence-available [(yes)|no]

16. Redis中采取了AOF/RDB两种手段来直接或者间接的持久化数据;

在数据恢复时,如果开启了AOF,那么服务器端将优先使用AOF文件恢复数据,否则才会使用snapshot的RDB文件来恢复数据。

1.AOF

AOF保存了历史所有的操作过程,我们可以简单的认为AOF就是日志文件,此文件只会记录"变更操作"(例如:set/del等),如果server中持续的大量变更操作,将会导致AOF文件非常的庞大,意味着server失效后,数据恢复的过程将会很长;事实上,一条数据经过多次变更,将会产生多条AOF记录,其实只要保存当前的状态,历史的操作记录是可以抛弃的;因为AOF持久化模式还伴生了"AOF rewrite"。

当server需要数据恢复时,可以直接replay此日志文件,即可还原所有的操作过程。AOF相对可靠,它和mysql中bin.log、apache.log、zookeeper中txn-log简直异曲同工。AOF文件内容是字符串,非常容易阅读和解析,它和redis-protocol具有一样的格式约束:

##此选项为aof功能的开关,默认为"no",可以通过"yes"来开启aof功能

##只有在"yes"下,aof重写/文件同步等特性才会生效

appendonly no

##指定aof文件名称

appendfilename appendonly.aof

##指定aof操作中文件同步策略,有三个合法值:always everysec no,默认为everysec

always:每一条aof记录都立即同步到文件,这是最安全的方式,也以为更多的磁盘操作和阻塞延迟,是IO开支较大。

everysec:每秒同步一次,性能和安全都比较中庸的方式,也是redis推荐的方式。如果遇到物理服务器故障,有可能导致最近一秒内aof记录丢失(可能为部分丢失)。

no:redis并不直接调用文件同步,而是交给操作系统来处理,操作系统可以根据buffer填充情况/通道空闲时间等择机触发appendfsync everysec

##在aof-rewrite期间,appendfsync是否暂缓文件同步,"no"表示"不暂缓","yes"表示"暂缓",默认为"no"

no-appendfsync-on-rewrite no

##aof文件rewrite触发的最小文件尺寸(mb,gb),只有大于此aof文件大于此尺寸是才会触发rewrite,默认"64mb",建议"512mb"

auto-aof-rewrite-min-size 64mb

##相对于"上一次"rewrite,本次rewrite触发时aof文件应该增长的百分比。

##每一次rewrite之后,redis都会记录下此时"新aof"文件的大小(例如A),那么当aof文件增长到A*(1 + p)之后

##触发下一次rewrite,每一次aof记录的添加,都会检测当前aof文件的尺寸。

auto-aof-rewrite-percentage 100

2. snapshots(RDB);

快照,这种思想被广泛的应用在多个技术领域,主要目的就是对当前数据的状态进行保存到文件中。redis中snapshot最终将内存数据序列化到dump.rdb文件中。

小时备份一次数据,并把snapshot生成的rdb文件保存起来,我们可以根据rdb文件将数据恢复到任意时间点上。此外rdb文件也是作为master-slave中数据同步的一种手段,一个slave加入集群,那么master(也可以是其他"领导者",--slaveof指定)将会立即执行一次"例外"的snapshot,并把snapshot期间的新变更操作收集起来(buffer),snapshot结束后,将rdb文件直接转发给slave,同时把收集的新变更操作依次同步给slave。(SYNC指令)

AOF和snapshot各有优缺点,这是有它们各自的特点所决定:

1) AOF更加安全,可以将数据更加及时的同步到文件中,但是AOF需要较多的磁盘IO开支,AOF文件尺寸较大,文件内容恢复数度相对较慢。

2) snapshot,安全性较差,它是"正常时期"数据备份以及master-slave数据同步的最佳手段,文件尺寸较小,恢复数度较快。

可以通过配置文件来指定它们中的一种,或者同时使用它们(不建议同时使用),或者全部禁用,在架构良好的环境中,master通常使用AOF,slave使用snapshot,主要原因是master需要首先确保数据完整性,它作为数据备份的第一选择;slave提供只读服务(目前slave只能提供读取服务),它的主要目的就是快速响应客户端read请求;但是如果你的redis运行在网络稳定性差/物理环境糟糕情况下,建议你master和slave均采取AOF,这个在master和slave角色切换时,可以减少"人工数据备份"/"人工引导数据恢复"的时间成本;如果你的环境一切非常良好,且服务需要接收密集性的write操作,那么建议master采取snapshot,而slave采用AOF。

1) 如果master失效,那么slave可以人工的方式"提升"为master:

Java代码收藏代码

redis 127.0.0.1:6379> config set appendonly yes

OK

redis 127.0.0.1:6379> BGREWRITEAOF

Background append only file rewriting started

redis 127.0.0.1:6379> SLAVEOF no one

OK

当然可以通过slaveof指令为当前server指定master。提升master的过程,首先开启slave的AOF功能,然后立即执行bgrewriteaof,然后将此slave提升为master。

如果此slave与master之间数据存在很大差异,那么需要把master中的aof文件copy一份到slave中,并重启slave:首先开启slave的appendonly,不执行bgrewriteaof,然后提升master,停止slave,将master的aof文件copy到slave中,然后重启slave。

2) 如果slave失效,这个非常好办,直接重启就行,slave重启后,会首先向master发送"SYNC"指令,那么master将会立即生成一份snapshot文件,并传输给slave,slave根据此snapshot文件恢复内存数据。

3) 在redis中master和slave的角色切换非常简单,可以通过指令将slaveof提升为master,反之亦然;事实上slave也可以接受write操作,只不过这些write操作,在和master进行"SYNC"之后,将会消失;建议将slave作为read-only模式。

4) 在redis中AOF和snapshot可以同时使用,但是在数据恢复时AOF会被优先采用,因为AOF比snapshot中数据更加完整。

参考:http://www.runoob.com/redis/redis-conf.html

http://blog.csdn.net/javahongxi/article/details/54578542

http://blog.csdn.net/erlian1992/article/details/54382443

上一篇:Lintcode227 Mock Hanoi Tower by Stacks solution 题解


下一篇:实验七:Xen环境下cirrOS的安装配置