.net使用Redis,遇到的问题及解决

本文详细介绍了从使用.NET内置缓存类到迁移到Redis的过程,解决了负载均衡下热数据不统一的问题。包括Redis的安装配置、ServiceStack.Redis的使用及常见错误解决,如Unexpected reply和6000请求限制。

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

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

1.官方下载Redis

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

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

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

其中,

redis.windows.conf:配置文件

redis-server.exe:服务端

redis-cli.exe:客户端。

 

1.首先修改redis.windows.conf

  • 定位到bind

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

  • 设置最大内存使用

单位是byte

  • 设置最大head

  • 设置日志目录

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

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

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

image

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

image

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

错误 1067 进程意外终止

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

 

2.在项目中引用ServiceStack.Redis

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

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

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

3.完成开发上线报错

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

Unexpected reply 错误

几次报的都不太一样,但是都和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版本

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值