前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ASP.NET Core 使用 Redis 实现分布式缓存:Docker、IDistributedCache、StackExchangeRedis

ASP.NET Core 使用 Redis 实现分布式缓存:Docker、IDistributedCache、StackExchangeRedis

作者头像
痴者工良
修改2023-09-25 15:10:39
2K0
修改2023-09-25 15:10:39
举报
文章被收录于专栏:痴者工良痴者工良

ASP.NET Core 使用 Redis 实现分布式缓存:Docker、IDistributedCache、StackExchangeRedis

前提:一台 Linux 服务器、已安装 Docker。

一,Docker 中运行 Redis

拉取 Redis 镜像

代码语言:javascript
复制
docker pull redis

查询镜像列表

代码语言:javascript
复制
docker imgaes

运行 Redis的几种方法

①运行并且设置 Redis 端口

代码语言:javascript
复制
docker run -p 6379:6379 -d redis:latest redis-server

代码语言:javascript
复制
docker run -p 6379:6379 -d {镜像id} redis-server

③持久化

将 Docker 里的 Redis 数据持久化到物理机

代码语言:javascript
复制
docker run -p 6379:6379 -v {物理机路径}:/data  -d redis:latest redis-server --appendonly yes

下载 Windows 版的 Redis 管理器

Windows 版本的 Redis Desktop Manager 64位 2019.1(中文版) 下载地址 https://www.7down.com/soft/233274.html

官方正版最新版本下载地址 https://redisdesktop.com/download

另附 Redis 学习教程:

Redis 中文网 https://www.redis.net.cn/

.NET 使用 Redis 学习 地址(貌似这个教程版本过时了) https://www.cnblogs.com/cang12138/p/8884362.html

搭建 Master/Slaver 模式的 Redis 集群 https://blog.csdn.net/lupengfei1009/article/details/88323561#_154

使用 Redis Desktop Manager 连接 Redis

1565870987(1)
1565870987(1)
二,ASP.NET Core 使用分布式缓存

ASP.NET Core 中,支持使用多种数据库进行缓存,ASP.NET Core 提供了统一的接口给开发者使用。

IDistributedCache

ASP.NET Core 中,使用 IDistributedCache 为开发者提供统一的缓存使用接口,而不必关注使用的是何种数据库。

IDistributedCache]接口提供了以下方法操作的分布式的缓存实现中的项:

  • GetAsync –接受字符串键和检索缓存的项作为byte[]数组如果在缓存中找到。
  • SetAsync –中添加项 (作为byte[]数组) 到使用字符串键的缓存。
  • RefreshAsync –刷新缓存基于其密钥,重置其滑动到期超时值 (如果有) 中的项。
  • RemoveAsync –移除缓存项根据其字符串键值。

IDistributedCache 提供的常用方法如下:

方法

说明

Get(String)

获取Key(键)的值

GetAsync(String, CancellationToken)

异步获取键的值

Refresh(String)

刷新缓存

RefreshAsync(String, CancellationToken)

Refreshes a value in the cache based on its key, resetting its sliding expiration timeout (if any).

Remove(String)

移除某个值

RemoveAsync(String, CancellationToken)

Removes the value with the given key.

[Set(String, Byte], DistributedCacheEntryOptions)

Sets a value with the given key.

[SetAsync(String, Byte], DistributedCacheEntryOptions, CancellationToken)

Sets the value with the given key.

官方文档很详细https://docs.microsoft.com/zh-cn/dotnet/api/microsoft.extensions.caching.distributed.idistributedcache?view=aspnetcore-2.2

ASP.NET Core 中配置缓存

新建一个 ASP.NET Core WebApi 项目

Nuget 管理器安装

代码语言:javascript
复制
Microsoft.Extensions.Caching.StackExchangeRedis

ConfigureServices 中使用服务

代码语言:javascript
复制
services.AddDistributedMemoryCache();

配置 Redis 服务器

代码语言:javascript
复制
            services.AddStackExchangeRedisCache(options =>
            {
                options.Configuration = "localhost:6379";
                options.InstanceName = "mvc";
            });

InstanceName 是你自定义的实例名称,创建缓存时会以此名称开头。

这样就配置好了。

使用缓存

修改默认生成的 ValuesController.cs。

注入缓存服务

代码语言:javascript
复制
        private readonly IDistributedCache _cache;
        public ValuesController(IDistributedCache cache)
        {
            _cache = cache;
        }

设置缓存和使用缓存:

代码语言:javascript
复制
await _cache.GetAsync("{键名}");
_cache.SetAsync("键名", {值}, {设置});

删除原来的方法,添加以下代码:

代码语言:javascript
复制
        [HttpGet("Set")]
        public async Task<JsonResult> SetCache(string setkey, string setvalue)
        {

            string key = "key1";
            if (!string.IsNullOrEmpty(setkey))
                key = setkey;
            string value = DateTime.Now.ToLongTimeString();
            if (!string.IsNullOrEmpty(setvalue))
                value = setvalue;
            await _cache.SetStringAsync(key, value);
            return new JsonResult(new { Code = 200, Message = "设置缓存成功", Data = "key=" + key + "    value=" + value });
        }

        [HttpGet("Get")]
        public async Task<JsonResult> GetCache(string setkey)
        {
            string key = "key1";
            if (!string.IsNullOrEmpty(setkey))
                key = setkey;
            var value = await _cache.GetStringAsync(key);
            return new JsonResult(new { Code = 200, Message = "设置缓存成功", Data = "key=" + key + "    value=" + value });
        }

在 URL 添加 QueryString 可以设置缓存内容,如果没有带参数的话,就使用默认的值。

打开 https://localhost:5001/api/values/set 可以看到设置了默认值。

或者访问 https://localhost:5001/api/values/set?setkey=key11111&setvalue=asafesfdsreg

自定义设置缓存值。

1565872816(1)
1565872816(1)

打开 https://localhost:5001/api/values/get?setkey=key11111

可以获取缓存值。

设置缓存过期时间

使用 DistributedCacheEntryOptions 可以设置缓存过期时间

DistributedCacheEntryOptions 有三个属性,表示相对时间、绝对时间。

使用方法

代码语言:javascript
复制
        [HttpGet("Set")]
        public async Task<JsonResult> SetCache(string setkey, string setvalue)
        {

            string key = "key1";
            if (!string.IsNullOrEmpty(setkey))
                key = setkey;
            string value = DateTime.Now.ToLongTimeString();
            if (!string.IsNullOrEmpty(setvalue))
                value = setvalue;

            var options = new DistributedCacheEntryOptions()
            .SetSlidingExpiration(TimeSpan.FromSeconds(20));

            await _cache.SetStringAsync(key, value, options);
            return new JsonResult(new { Code = 200, Message = "设置缓存成功", Data = "key=" + key + "    value=" + value });
        }

缓存 20 秒,20秒过后此缓存将被清除。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-08-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ASP.NET Core 使用 Redis 实现分布式缓存:Docker、IDistributedCache、StackExchangeRedis
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档