diff --git a/src/Orchard.Web/Modules/Orchard.Redis/Orchard.Redis.csproj b/src/Orchard.Web/Modules/Orchard.Redis/Orchard.Redis.csproj
index 4590be157..ac2724edd 100644
--- a/src/Orchard.Web/Modules/Orchard.Redis/Orchard.Redis.csproj
+++ b/src/Orchard.Web/Modules/Orchard.Redis/Orchard.Redis.csproj
@@ -111,6 +111,7 @@
+
10.0
diff --git a/src/Orchard.Web/Modules/Orchard.Redis/OutputCache/RedisTagCache.cs b/src/Orchard.Web/Modules/Orchard.Redis/OutputCache/RedisTagCache.cs
new file mode 100644
index 000000000..b7f66f907
--- /dev/null
+++ b/src/Orchard.Web/Modules/Orchard.Redis/OutputCache/RedisTagCache.cs
@@ -0,0 +1,43 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using NHibernate.Util;
+using Orchard.Environment.Extensions;
+using Orchard.OutputCache.Services;
+using Orchard.Redis.Configuration;
+using StackExchange.Redis;
+
+namespace Orchard.Redis.OutputCache
+{
+ [OrchardFeature("Orchard.Redis.OutputCache")]
+ [OrchardSuppressDependency("Orchard.OutputCache.Services.DefaultTagCache")]
+ public class RedisTagCache : ITagCache {
+ private readonly IRedisConnectionProvider _redisConnectionProvider;
+ private readonly string _connectionString;
+
+ public RedisTagCache(IRedisConnectionProvider redisConnectionProvider) {
+ _redisConnectionProvider = redisConnectionProvider;
+ _connectionString = _redisConnectionProvider.GetConnectionString(RedisOutputCacheStorageProvider.ConnectionStringKey);
+ }
+
+ private IDatabase Database {
+ get { return _redisConnectionProvider.GetConnection(_connectionString).GetDatabase(); }
+ }
+
+ public void Tag(string tag, params string[] keys) {
+ Database.SetAdd(tag, Array.ConvertAll(keys, x=> (RedisValue) x));
+ }
+
+ public IEnumerable GetTaggedItems(string tag) {
+ var values = Database.SetMembers(tag);
+ if (values == null || values.Length == 0)
+ return Enumerable.Empty();
+ return Array.ConvertAll(values, x => (string) x);
+ }
+
+ public void RemoveTag(string tag) {
+ Database.KeyDelete(tag);
+ }
+ }
+}
\ No newline at end of file