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

5 篇文章 0 订阅
1 篇文章 0 订阅

目前项目的热数据一直使用.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版本

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值