Localizing RedisTagCache keys

This commit is contained in:
Sebastien Ros
2015-08-03 14:37:25 -07:00
parent 25670b9620
commit 8a08680a74
@@ -1,43 +1,49 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Web; using Orchard.Environment.Configuration;
using NHibernate.Util;
using Orchard.Environment.Extensions; using Orchard.Environment.Extensions;
using Orchard.OutputCache.Services; using Orchard.OutputCache.Services;
using Orchard.Redis.Configuration; using Orchard.Redis.Configuration;
using StackExchange.Redis; using StackExchange.Redis;
namespace Orchard.Redis.OutputCache namespace Orchard.Redis.OutputCache {
{
[OrchardFeature("Orchard.Redis.OutputCache")] [OrchardFeature("Orchard.Redis.OutputCache")]
[OrchardSuppressDependency("Orchard.OutputCache.Services.DefaultTagCache")] [OrchardSuppressDependency("Orchard.OutputCache.Services.DefaultTagCache")]
public class RedisTagCache : ITagCache { public class RedisTagCache : ITagCache {
private readonly IRedisConnectionProvider _redisConnectionProvider; private readonly IRedisConnectionProvider _redisConnectionProvider;
private readonly string _connectionString; private readonly string _connectionString;
private readonly ConnectionMultiplexer _connectionMultiplexer;
private readonly ShellSettings _shellSettings;
public RedisTagCache(IRedisConnectionProvider redisConnectionProvider) { public RedisTagCache(IRedisConnectionProvider redisConnectionProvider, ShellSettings shellSettings) {
_redisConnectionProvider = redisConnectionProvider; _redisConnectionProvider = redisConnectionProvider;
_connectionString = _redisConnectionProvider.GetConnectionString(RedisOutputCacheStorageProvider.ConnectionStringKey); _connectionString = _redisConnectionProvider.GetConnectionString(RedisOutputCacheStorageProvider.ConnectionStringKey);
_connectionMultiplexer = _redisConnectionProvider.GetConnection(_connectionString);
_shellSettings = shellSettings;
} }
private IDatabase Database { private IDatabase Database {
get { return _redisConnectionProvider.GetConnection(_connectionString).GetDatabase(); } get { return _connectionMultiplexer.GetDatabase(); }
} }
public void Tag(string tag, params string[] keys) { public void Tag(string tag, params string[] keys) {
Database.SetAdd(tag, Array.ConvertAll(keys, x=> (RedisValue) x)); Database.SetAdd(GetLocalizedKey(tag), Array.ConvertAll(keys, x=> (RedisValue) x));
} }
public IEnumerable<string> GetTaggedItems(string tag) { public IEnumerable<string> GetTaggedItems(string tag) {
var values = Database.SetMembers(tag); var values = Database.SetMembers(GetLocalizedKey(tag));
if (values == null || values.Length == 0) if (values == null || values.Length == 0)
return Enumerable.Empty<string>(); return Enumerable.Empty<string>();
return Array.ConvertAll(values, x => (string) x); return Array.ConvertAll(values, x => (string) x);
} }
public void RemoveTag(string tag) { public void RemoveTag(string tag) {
Database.KeyDelete(tag); Database.KeyDelete(GetLocalizedKey(tag));
}
private string GetLocalizedKey(string key) {
return _shellSettings.Name + ":Tag:" + key;
} }
} }
} }