Redis中的Azure缓存/ DataCache样式区域

时间:2014-11-23 22:06:53

标签: asp.net redis azure-caching stackexchange.redis

我正在计划将C#ASP.Net Web应用程序移动到Azure(目前托管在单个专用服务器上),并且正在查看缓存选项。目前,因为我们一次只运行一个应用程序实例,所以我们有一个正在进行的过程'内存缓存,以减轻SQL DB的一些相同请求。

此时的过程是当管理员/服务对数据库的那些部分进行更改时清除缓存的某些部分,例如,我们有一个用户表,我们会有像" User。{0}"返回单个用户记录/对象和" Users.ForeignKey。{0}"返回与外键相关的所有用户。如果我们更新单个用户记录,那么我们删除" User.1" key(如果userid = 1)并且可以轻松地更改所有列表集合。我们通过按模式删除键来完成此操作,这意味着只删除受影响的键,并保留所有其他键。

我们一直在计划将此迁移到Azure一段时间,当我们第一次开始查看Azure Redis缓存服务不可用的所有内容时,至少是受支持的,所以我们查看了Azure缓存服务,基于AppFabric。使用这个我们决定我们将使用DataCache区域来分隔不同的对象类型,然后只刷新受影响的区域,不像我们当前的方法那样精确但是没问题。现在,由于Redis已经出现在现场,我们一直在关注它,如果可能的话,我更愿意使用它。但是,为了达到同样的目的,我们必须为每个“区域”/部分提供单独的Redis缓存,根据我的理解,这意味着我们将支付许多Redis的小实例Azure的缓存服务会花费很多,因为我们需要10个以上可单独冲洗的部分到缓存中。

任何人都知道如何使用Redis实现与Azure DataCache区域类似的功能,或者您能否提出一些我可能遗漏的明显事实。

很抱歉这么长的问题/解释,但我发现很难解释我在没有背景/背景的情况下想要实现的目标。

谢谢, 加雷

更新:

我发现了一些bash命令,可以按模式删除键,包括使用' KEYS'命令here和lua脚本EVAL命令here

我计划使用StackExchange.Redis客户端进行交互,有没有人知道在使用StackExchange.Redis时如何使用这些类型的命令或替代方法(按模式删除键)?

感谢阅读,Gareth

2 个答案:

答案 0 :(得分:8)

您可以使用此方法利用async / await功能和redis pipelining使用stack exchange redis client按模式删除密钥

private static Task DeleteKeysByPatternAsync(string pattern)
{
    IDatabase cache1 = Connection.GetDatabase();
    var redisServer1 = Connection.GetServer(Connection.GetEndPoints().First());
    var deleteTasks = new List<Task>();
    var counter = 0;
    foreach (var key in redisServer1.Keys(pattern: pattern, database: 0, pageSize: 5000))
    {
        deleteTasks.Add(cache1.KeyDeleteAsync(key));
        counter++;
        if (counter % 1000 == 0)
            Console.WriteLine($"Delete key tasks created: {counter}");
    }
    return Task.WhenAll(deleteTasks);
}

然后你可以像这样使用它:

DeleteKeysByPatternAsync("*user:*").Wait(); //If you are calling from main method for example where you cant use await.

await DeleteKeysByPatternAsync("*user:*"); //If you run from async method

您可以调整pageSize或作为方法参数接收。

答案 1 :(得分:0)

根据您的问题我理解您需要根据某些条件(您的情况下是用户)对数据进行分组,以便每当与该条件相关的记录发生更改时,与该记录相关的所有数据也会在缓存中失效使用单个缓存api调用。

您可以使用NCache for Azure在Azure中实现此目标,Alachisoft是一种针对azure NCache的分布式缓存解决方案,具有丰富的功能以及多种缓存拓扑。

{{3}}允许多种方式执行此类操作。一个适合您的用例的是数据分组功能,允许您在添加时将组/子组中的数据分组。可以在以后的组/子组的基础上提取/删除数据。

NCache还允许添加包含正在添加的项目的标签。然后,可以使用这些标记来删除/获取包含一个或多个指定标记的所有数据。 NCache中提供的查询功能(删除查询)也可用于删除满足特定条件的数据。