zoukankan      html  css  js  c++  java
  • ASP.NET Core 使用 Redis 实现分布式缓存:Docker、IDistributedCache、StackExchangeRedis

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

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

    一,Docker 中运行 Redis

    拉取 Redis 镜像

    docker pull redis
    

    查询镜像列表

    docker imgaes
    

    运行 Redis的几种方法

    ①运行并且设置 Redis 端口

    docker run -p 6379:6379 -d redis:latest redis-server
    

    docker run -p 6379:6379 -d {镜像id} redis-server
    

    ③持久化

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

    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)

    二,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 管理器安装

    Microsoft.Extensions.Caching.StackExchangeRedis
    

    ConfigureServices 中使用服务

    services.AddDistributedMemoryCache();
    

    配置 Redis 服务器

                services.AddStackExchangeRedisCache(options =>
                {
                    options.Configuration = "localhost:6379";
                    options.InstanceName = "mvc";
                });
    

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

    这样就配置好了。

    使用缓存

    修改默认生成的 ValuesController.cs。

    注入缓存服务

            private readonly IDistributedCache _cache;
            public ValuesController(IDistributedCache cache)
            {
                _cache = cache;
            }
    

    设置缓存和使用缓存:

    await _cache.GetAsync("{键名}");
    _cache.SetAsync("键名", {值}, {设置});
    

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

            [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)

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

    可以获取缓存值。

    设置缓存过期时间

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

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

    使用方法

            [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秒过后此缓存将被清除。

  • 相关阅读:
    哪种写法更好?<script></script> vs/or <script type=”text/javasript”></script>
    JS 脚本应该放在页面哪个位置 head body foot
    List<T> ForEach break
    嵌套JSON 取出name与value
    C# 改变图片尺寸(压缩),Image Resize
    tornado
    appachebench网站压力测试
    mysql分区分表
    redis的持久化存储,RDB与AOF
    MEMCACHE的内存管理和删除策略
  • 原文地址:https://www.cnblogs.com/whuanle/p/11360468.html
Copyright © 2011-2022 走看看