vlambda博客
学习文章列表

如何在 .NET 中使用 Redis缓存

译文链接:https://www.infoworld.com/article/3187905/how-to-work-with-redis-cache-in-net.html

缓存是一种状态管理机制,通常用于提升你的应用程序性能,它很大程度上能够减少一个请求对你系统资源的消耗。

Redis是一个开源的,高性能的,NoSql数据库,它的速度非常快,而且所有的数据都是灌入到内存中,从内存中读写数据的性能开销真的是微乎其微,值得一提的是 Redis 采用的是BSD  license,说明你可以将它用于商业和非商业的用途。

Redis是什么,我为什么要用它?

Redis 是最流行的开源,NoSQL,基于内存的数据存储,而且非常🐂的是:它的数据存储支持多个数据结构,eg:strings,hashes,sets,lists 等等,Redis内部也提供了对 复制分发 和 事务 的支持,同时在数据持久化方面也做的非常好。

如果你的应用程序需要读取大量的数据,并且你的机器有很多的空闲内存,在这样的场景下如果你有提升性能的需求,采用 Redis 是一个非常好的选择,将Redis应用到你的程序中操作步骤也是非常简单的,接下来我们会一起讨论下如何去安装,配置和使用。

安装Redis

本篇讨论下如何在 Windows 平台上安装 Redis,安装包可以到 GitHub:https://github.com/MSOpenTech/redis/releases  去下载,在安装的过程中,记得勾选一下 add Redis to the PATH environmental variable,将 Redis的路径添加到环境变量中,等到安装程序执行完毕之后,可以通过 Run -> service.msc 到 windows 的服务面板去看下 redis service 是否已经安装成功。

使用 Redis Client Sdk

现在 redis 已经成功安装到你的系统中了,接下来你需要一个 client sdk  去连接 redis server 来读取数据,在下面的例子中,我会使用开源的 ServiceStack 这个sdk,接下来在 Visual Studio 中创建一个 Console 应用程序,然后通过 NuGet packkage manager 来安装 ServiceStack.Redis

假定现在 ServiceStack.Redis 已经通过 NuGet 成功安装,下面的两个方法展示了连接 Redis server 来发送和读取数据。


        private static bool Save(string host, string key, string value)
        {
            bool isSuccess = false;
            using (RedisClient redisClient = new RedisClient(host))
            {
                if (redisClient.Get<string>(key) == null)
                {
                    isSuccess = redisClient.Set(key, value);
                }
            }
            return isSuccess;
        }

        private static string Get(string host, string key)
        {
            using (RedisClient redisClient = new RedisClient(host))
            {
                return redisClient.Get<string>(key);
            }
        }

注意 RedisClient 的 Set 和 Get 方法是如何从 Redis 中发送和读取数据的,我准备留给你一件事情,你可以试着修改一下这两个方法让其支持泛型,这样的话你的两个方法就可以支持任何类型了,对吧。

接下来看一下如何在 Main 方法中调用,代码如下:


        static void Main(string[] args)
        {
            string host = "localhost";
            string key = "IDG";
            // Store data in the cache
            bool success = Save(host, key, "Hello World!");
            // Retrieve data from the cache using the key
            Console.WriteLine("Data retrieved from Redis Cache: " + Get(host,key));
            Console.Read();
        }   

正如我之前所说,Redis的功能特别多,在后续的文章中,我会和大家一起讨论Redis的高级特性,比如说:持久化,发布订阅,失败转移 等等,你也可以利用 RDB (单个压缩文件) 或者 AOF 的方式去持久化数据,那我应该选择哪一种持久化呢?你可以在 高性能,持久化,磁盘IO 这些方面综合权衡一下。

如果想了解 Redis 的更多知识,可以参考官方文档:https://redis.io/documentation