c# - 将简单的 SET 与 StackExchangeRedis 结合使用?

标签 c# .net-core redis stackexchange.redis

我正在使用 .Net core 和 StackExchangeRedis:

public void ConfigureServices(IServiceCollection services)
    {
        services.AddStackExchangeRedisCache(options =>
           {
               options.Configuration = "127.0.0.1:6379";
           });
        services.AddControllers();

    }

后来我注入(inject)服务并通过 set/get 测试它:

private readonly IDistributedCache _cache;

        public MyRedisController(IDistributedCache cache)
        {
            _cache = cache;
        }

        [HttpGet]
        public async Task<string> Get()
        { 
             _cache.SetString("dd", "5");
            var a = await _cache.GetStringAsync("dd"); //5
            return a;


        }

问题是,当我尝试获取 redis-cli 中的值时,我看到:

127.0.0.1:6379> get "dd"
(error) WRONGTYPE Operation against a key holding the wrong kind of value

经过调查,我发现它存储为哈希:

enter image description here

问题:

如何使用 StackExchangeRedis 存储没有哈希类型的简单字符串类型?我想要一个简单的字符串。 (获取/设置)

ps
我知道我可以通过以下方式获取该值:hget "dd"data。但我想要存储简单的字符串类型。

最佳答案

需要明确的是:问题中显示的代码都没有(直接)接触 StackExchange.Redis; AddStackExchangeRedisCache是 Microsoft 的 ASP.NET 层包装器,并且不是 StackExchange.Redis 的一部分 - 看起来它还做了其他事情来封装其他功能,例如绝对/滑动过期,但坦率地说(作为观察):

  1. 如果 -1表示“未设置”,它们可能只是未存储哈希字段
  2. redis 直接支持绝对过期 EXPIRE

我很高兴添加一个答案,但是关于 StackExchange.Redis 的:

// note: the multiplexer is disposable, but you usually keep this around
//  and reuse it between lots of operations - don't Connect each time
var muxer = ConnectionMultiplexer.Connect("127.0.0.1:6379");

// actually do things
var db = muxer.GetDatabase();
db.StringSet("dd", 5);
var value = db.StringGet("dd");
Console.WriteLine((int)value);

如果你想看什么AddStackExchangeRedisCache是在幕后做的,你可以使用redis-cli MONITOR查看它在您的原始代码中发出的命令。

关于c# - 将简单的 SET 与 StackExchangeRedis 结合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67020251/

相关文章:

c# - 如何从http header 获取文件大小

c# - 如何从 dotnet 核心 Entity Framework 中的多个表中分组数据

c# - 是否有更简单的方法使用 Microsoft.Extensions.Configuration 将数组作为命令行参数传递?

c# - 如何使用多线程 C# 应用程序在 Redis 中插入数百万个键/值

scala - Spark/Scala 并行写入 redis

c# - 加载某些网站时出现 SSL 错误 "A call to SSPI failed"c#

c# - 静态终结器

c# - 为什么以下不编译? (涉及到c#中的泛型和继承)

c# - 如何解决 .NET.CORE 中的代理服务器 407 错误

scala - 来自 Redis 客户端 Jedis 的破管道异常