微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将简单的 SET 与 StackExchangeRedis 一起使用?

如何解决将简单的 SET 与 StackExchangeRedis 一起使用?

我将 .Net 核心与 StackExchangeRedis 一起使用:

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

    }

稍后我注入服务并通过 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 查看它在原始代码中发出的命令。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。