安装
下载地址:https://github.com/MSOpenTech/redis/releases。
Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我们下载 Redis-x64-xxx.zip压缩包到 C 盘,解压后,将文件夹重新命名为 redis。
解压后文件:
redis-benchmark.exe 基准测试
redis-check-aof.exe aof
redischeck-dump.exe dump
redis-cli.exe 客户端
redis-server.exe 服务器
redis.windows.conf 配置文件
注意:《Redis-x64-3.2.100.msi》同样是redis服务端,可以代替redis-server.exe,安装后以服务形式启动,然后用自带客户端工具检测。
1、服务端:
打开一个 cmd 窗口 使用cd命令切换目录到 C: edis 运行 redis-server.exe redis.windows.conf 。
如果想方便的话,可以把 redis 的路径加到系统的环境变量里,这样就省得再输路径了,后面的那个 redis.windows.conf 可以省略,如果省略,会启用默认的。输入之后,会显示如下界面:
默认端口为6379,出现这个界面说明启动成功。
如果要以服务形式启动,则
redis-server --service-install redis.windows.conf --loglevel verbose --service-name 服务名称
卸载服务命令:redis-server.exe --service-uninstall
2、客户端:
用自带客户端redis-cli.exe检测。双击,连接成功。
运行 redis-cli.exe -h 127.0.0.1 -p 6379 。
设置键值对 set myKey abc
取出键值对 get myKey
3、redis服务密码:
设置redis的密码:找到# requirepass foobared 改为 requirepass 我的密码 ,本机测试可不设置。
默认情况下 requirepass 参数是空的,这就意味着你无需通过密码验证就可以连接到 redis 服务。
设置密码后,客户端连接 redis 服务就需要密码验证,否则无法执行命令。
127.0.0.1:6379>auth xxx
Redis可视化工具
RedisDesktopManager一款好用的Redis桌面管理工具,支持命令控制台操作,以及常用,查询key,rename,delete等操作。
下载软件,请点击下面链接,进入下载页,选择对应版本:https://redisdesktop.com/download
操作使用如下图:
一、新建连接
输入redis主机host,端口号port,再起个生动形象,简明达意的别名。
二、该工具支持根据筛选条件查询key,add new key,reload等。
三、支持常用redis操作
针对目标key执行rename,delete,addrow,reload value操作。
四、命令控制台操作
该工具提供命令控制台:
Redis的主从复制
Redis跟MySQL一样,拥有非常强大的主从复制功能,而且还支持一个master可以拥有多个slave,而一个slave又可以拥有多个slave,从而形成强大的多级服务器集群架构。
redis的主从复制是异步进行的,它不会影响master的运行,所以不会降低redis的处理性能。主从架构中,可以考虑关闭Master的数据持久化功能,只让Slave进行持久化,这样可以提高主服务器的处理性能。同时Slave为只读模式,这样可以避免Slave缓存的数据被误修改。
1、配置
实际生产中,主从架构是在几个不同服务器上安装相应的Redis服务。为了测试方便,我这边的主从备份的配置,都是在我Windows 本机上测试。
在本机window下安装三个redis实例,其中主服务端口6379,从服务slave1为6380,从服务slave2为6381.
1.当前已安装并启动了主服务器,复制两份主服务的解压目录分别命名为Redis-salve1和Redis-salve2.如下图:
2.配置从服务器
分别配置两个配置文件(两个文件需要配置的内容相同,以redis.windows.conf为例):
改端口port为 6380和6381
在Slave 实例 ,# slaveof <masterip> <masterport> 修改为:slaveof 127.0.0.1 6379 配置。
3、分别启动主从服务 redis-server.exe redis.windows.conf
【这里指演示 一个从服务器6380】
注意,如果设置了密码的话,从服务器中需要在requirepass xxxx 后加一行: masterauth xxxx
masterauth 是主从认证密码,否则主从不能同步
4、安转为服务启动:
切换到各自目录下,输入命令:redis-server --service-install redis.windows.conf --loglevel verbose --service-name 服务名称
5、打开服务,启动两个从服务并设置为自动启动
2、测试
在主服务下,用server-cli输入设置值,
redis-cli.exe -h 127.0.0.1 -p 6379
在从服务下,获取。
redis-cli.exe -h 127.0.0.1 -p 6380
3、C#中调用
主从架构的Redis的读写其实和单台Redis 的读写差不多,只是部分配置和读取区分了主从。
需要注意的是:ServiceStack.Redis 中GetClient()方法,只能拿到Master redis中获取连接,而拿不到slave 的readonly连接。这样 slave起到了冗余备份的作用,读的功能没有发挥出来,如果并发请求太多的话,则Redis的性能会有影响。
所以,我们需要的写入和读取的时候做一个区分,写入的时候,调用client.GetClient() 来获取writeHosts的Master的redis 链接。读取,则调用client.GetReadOnlyClient()来获取的readonlyHost的 Slave的redis链接。
或者可以直接使用client.GetCacheClient() 来获取一个连接,他会在写的时候调用GetClient获取连接,读的时候调用GetReadOnlyClient获取连接,这样可以做到读写分离,从而利用redis的主从复制功能。
遇到的问题
1、Redis 服务无法启动,错误 1067 进程意外终止
可以看下服务属性,如果是网络服务,修改为本地系统服务即可启动!
【有可能的情况是 其他应用安装了此服务导致,eg,docker】
2、**System.TimeoutException:** 'Redis Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use.
翻译:Redis超时已过期。 从池中获取连接之前已经过超时时间, 这可能是因为所有池化连接都在使用中。
可能的原因:
连接没有及时释放。
eg:var r = pool.GetClient(); 改为
using (var r = pool.GetClient())
{
}