将简单的 SET 与 StackExchangeRedis 一起使用?
Using simple SET with 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
经过调查,我发现它存储为散列:
问题:
如何使用 StackExchangeRedis 来存储 简单 字符串类型而不使用散列类型?我想要一个简单的字符串。 (get/set)
ps
我知道我可以通过以下方式获得价值:hget "dd" data
。但是我在存储简单的字符串类型之后。
需要说明的是:问题中显示的代码 none 是(直接)触及 StackExchange.Redis; AddStackExchangeRedisCache
是 Microsoft 的 ASP.NET 层包装器,而不是 StackExchange.Redis 的一部分 - 它看起来像做其他事情来封装其他功能,例如 absolute/sliding 过期,尽管坦率地说(作为观察):
- 如果
-1
表示“未设置”,他们可能只是 未存储哈希字段
- 通过
EXPIRE
在 redis 中直接支持绝对过期
我很乐意添加一个答案,但仅 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
查看它在您的原始代码中发出的命令。
我正在使用 .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
经过调查,我发现它存储为散列:
问题:
如何使用 StackExchangeRedis 来存储 简单 字符串类型而不使用散列类型?我想要一个简单的字符串。 (get/set)
ps
我知道我可以通过以下方式获得价值:hget "dd" data
。但是我在存储简单的字符串类型之后。
需要说明的是:问题中显示的代码 none 是(直接)触及 StackExchange.Redis; AddStackExchangeRedisCache
是 Microsoft 的 ASP.NET 层包装器,而不是 StackExchange.Redis 的一部分 - 它看起来像做其他事情来封装其他功能,例如 absolute/sliding 过期,尽管坦率地说(作为观察):
- 如果
-1
表示“未设置”,他们可能只是 未存储哈希字段 - 通过
EXPIRE
在 redis 中直接支持绝对过期
我很乐意添加一个答案,但仅 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
查看它在您的原始代码中发出的命令。