我正在使用StackExchange.Redis客户端和Azure Redis缓存服务。这是我的班级
public class RedisCacheService : ICacheService
{
private readonly ISettings _settings;
private readonly IDatabase _cache;
public RedisCacheService(ISettings settings)
{
_settings = settings;
var connectionMultiplexer = ConnectionMultiplexer.Connect(settings.RedisConnection);
_cache = connectionMultiplexer.GetDatabase();
}
public bool Exists(string key)
{
return _cache.KeyExists(key);
}
public void Save(string key, string value)
{
var ts = TimeSpan.FromMinutes(_settings.CacheTimeout);
_cache.StringSet(key, value, ts);
}
public string Get(string key)
{
return _cache.StringGet(key);
}
public void Remove(string key)
{
// How to remove one
}
public void Clear()
{
// How to remove all
}
}
更新:在Marc的帮助下,这是我的最后一堂课
public class RedisCacheService : ICacheService
{
private readonly ISettings _settings;
private readonly IDatabase _cache;
private static ConnectionMultiplexer _connectionMultiplexer;
static RedisCacheService()
{
var connection = ConfigurationManager.AppSettings["RedisConnection"];
_connectionMultiplexer = ConnectionMultiplexer.Connect(connection);
}
public RedisCacheService(ISettings settings)
{
_settings = settings;
_cache = _connectionMultiplexer.GetDatabase();
}
public bool Exists(string key)
{
return _cache.KeyExists(key);
}
public void Save(string key, string value)
{
var ts = TimeSpan.FromMinutes(_settings.CacheTimeout);
_cache.StringSet(key, value, ts);
}
public string Get(string key)
{
return _cache.StringGet(key);
}
public void Remove(string key)
{
_cache.KeyDelete(key);
}
public void Clear()
{
var endpoints = _connectionMultiplexer.GetEndPoints(true);
foreach (var endpoint in endpoints)
{
var server = _connectionMultiplexer.GetServer(endpoint);
server.FlushAllDatabases();
}
}
}
现在我不知道如何从redis缓存中删除所有项目或单个项目。
5条答案
按热度按时间lyr7nygr1#
要删除单个项目,请执行以下操作:
删除 all 需要使用
FLUSHDB
或FLUSHALL
redis命令;这两个都可以在StackExchange中找到。但是,for reasons discussed here,它们不在IDatabase
API上(因为:它们影响服务器,而不是逻辑数据库)。“那我该怎么使用它们?””在那一页上:
(很可能在多路复用器上使用
GetEndpoints()
之后)9gm1akwq2#
我无法刷新Azure Redis缓存中的数据库,遇到此错误:
除非启用管理模式,否则此操作不可用:FLUSHDB
而是遍历所有键来删除:
siv3szwd3#
@Rasi和@Marc Gravell的两个答案都包含所需的代码片段。基于上述,这里是假设只有1台服务器的工作片段:
你需要使用
allowAdmin=true
连接到redis,获得这样的选项的一种方法是将AllowAdmin分配给已经解析过的字符串:然后到flush all数据库:
以上将适用于任何redis部署,而不仅仅是Azure。
vc9ivgsu4#
你也可以删除哈希,如果你想从任何缓存列表中清除特定的值。例如,我们有一个emp列表,里面缓存了不同的部门。
因此也可以传递Key名称和缓存子键。
xkrw2x1b5#
在分布式缓存中删除List中的项目,使用分布式缓存库支持的ListRemoveAsync()函数,可通过IDistributedCache接口访问
注意-确保要删除的Redis值应该是该高速缓存中现有列表中的项。