目前项目的热数据一直使用.net本身的cache类,但是随着业务增加,现在对ecs进行了负载均衡。

负载均衡后cache的弊端开始暴露,因为cache本身依赖应用池,多个节点间维护各自的应用池,负载均衡后各个节点可能造成热数据不统一,并且应用池回收后cache自动被回收的问题。所以开始使用成Redis。

1.官方下载Redis

https://github.com/MSOpenTech/redis/releases

Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择。

下载安装后,目录结构如下:

redisson和netty的兼容 .net redis_redisson和netty的兼容

其中,

redis.windows.conf:配置文件

redis-server.exe:服务端

redis-cli.exe:客户端。

 

1.首先修改redis.windows.conf

  • 定位到bind

redisson和netty的兼容 .net redis_ServiceStack_02

  • 这里绑定的是你的Redis安装的本机的访问IP。建议还是用局域网,端口默认Port是6379,也可以在此修改

redisson和netty的兼容 .net redis_Redis_03

  • 设置最大内存使用

redisson和netty的兼容 .net redis_ServiceStack_04

单位是byte

  • 设置最大head

redisson和netty的兼容 .net redis_redisson和netty的兼容_05

  • 设置日志目录

redisson和netty的兼容 .net redis_Redis_06

  • 然后点击redis-server.exe运行

redisson和netty的兼容 .net redis_ServiceStack_07

这样就配置完成了。但是这样每次服务器重启后,需要手动运行redis-server.exe,所以我们把redis-server.exe设置到window服务里面,

redis-server --service-install redis.windows-service.conf --loglevel verbose

redisson和netty的兼容 .net redis_ServiceStack_08

输入命令之后没有报错,表示成功了,刷新服务,会看到多了一个redis服务。

redisson和netty的兼容 .net redis_redis_09

设置自动启动即可,但是会发现怎么也无法启动,报错:

错误 1067 进程意外终止

研究后发现是logs目录未创建的缘故,我们只要在Redis目录下创建日志目录logs。即可。

 

2.在项目中引用ServiceStack.Redis

这个也是官方推荐.net使用的Redis库

redisson和netty的兼容 .net redis_redisson和netty的兼容_10

这个版本需要依赖于其他3个库。

redisson和netty的兼容 .net redis_ServiceStack_11

RedisClien是主要操作的类,目前只用到Get<T>,Set<T>。其他的小伙伴可以自行查看。

3.完成开发上线报错

本地测试无问题,但是上线后会报些奇怪的错误。

Unexpected reply 错误

redisson和netty的兼容 .net redis_redis_12

几次报的都不太一样,但是都和RedisClient.Get相关。

然后详细看了下ServiceStack.Redis的文档,然后发现ServiceStack.Redis不支持我们传统认为的线程安全。

每一个线程可以从连接池里获取一个连接供本线程使用,在使用完毕过后必须还回给连接池

查看了下RedisClient发现继承了IDisposable接口,于是using之后,错误消失。

The free-quota limit on '6000 Redis requests per hour' has been reached.

随后又出现了6000 Redis requests per hour的错误,发现原来ServiceStack.Redis V4以后版本开始商业化,每小时只能请求6000次,所以改成v3.9版本