(Redis).Net中使用Redis
阅读原文时间:2021年04月20日阅读:1

1.官方下载Redis

https://github.com/MSOpenTech/redis/releases目前微软已经暂停了Redis在windows上的移植。所以版本最新到3.2。
实际的Redis在V4.0后已开始收费,目前到V5.0,只支持Linux系统部署。
https://redis.io/
Redis
Redis命令参考即文档
下面接着讲安装,Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择。
下载安装后,目录结构如下:

其中,
redis.windows.conf:配置文件
redis-server.exe:服务端
redis-cli.exe:客户端。
1.首先修改redis.windows.conf

  • 定位到bind
    -

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

  • 设置最大内存使用 - 1G,单位是byte

  • 设置最大head

  • 设置日志目录

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

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

cd进Redis目录,执行以下命令
redis-server --service-install redis.windows-service.conf --loglevel verbose

输入命令之后没有报错,表示成功了,刷新服务(通过右击计算机,选择管理,打开服务和应用程序下的服务可看到。也能从任务管理器-服务-点击服务按钮 看到),会看到多了一个redis服务。

设置自动启动即可,但是会发现怎么也无法启动,报错:
错误 1067 进程意外终止
研究后发现是logs目录未创建的缘故,我们只要在Redis目录下创建日志目录logs。即可。

2.在项目中引用ServiceStack.Redis

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

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

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

3.或者在项目中引用另一个Redis驱动StackExchange.Redis

https://github.com/StackExchange/StackExchange.Redis
用Redis做小型Asp.net网站的性能优化 - 中使用了StackExchange.Redis
参考https://yq.aliyun.com/ziliao/89080可对StackExchange.Redis做了简单的封装。

4.完成开发上线报错

本地测试无问题,但是上线后会报些奇怪的错误。
Unexpected reply 错误
几次报的都不太一样,但是都和RedisClient.Get相关。
然后详细看了下ServiceStack.Redis的文档,然后发现ServiceStack.Redis不支持我们传统认为的线程安全。
每一个线程可以从连接池里获取一个连接供本线程使用,在使用完毕过后必须还回给连接池
查看了下RedisClient发现继承了IDisposable接口,于是using之后,错误消失。

using (var redisConsumer = new RedisClient(RedisConfig.Host, RedisConfig.Port, RedisConfig.Password))
        using (var subscription = redisConsumer.CreateSubscription())
        {
        }

The free-quota limit on ‘6000 Redis requests per hour’ has been reached.
随后又出现了6000 Redis requests per hour的错误,发现原来ServiceStack.Redis V4以后版本开始商业化,每小时只能请求6000次,所以改成v3.9版本
解决办法

=================================================
其他链接
.net 使用Redis发布订阅

.NET 中使用redis(四) - 讲了如何使用订阅发布,该文章的系列(一),(二),(三)也可看下

ServiceStack.Redis订阅发布服务的调用

如何保证redis中存放的都是热点数据

冷数据、温数据、热数据,难道数据也是有温度的?

Redis和MongoDB的区别(面试受用)