using Newtonsoft.Json; using ServiceStack.Redis; using ServiceStack.Redis.Generic; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Web; namespace WebApi2.Manager { public class CacheManager { private readonly IRedisClient _redisClient; public CacheManager(IRedisClient redisClient) { _redisClient = redisClient; } public T Get<T>(string id) { using (var typedclient = _redisClient.GetTypedClient<T>()) { return typedclient.GetById(id.ToLower()); } } public IQueryable<T> GetAll<T>() { using (var typedclient = _redisClient.GetTypedClient<T>()) { return typedclient.GetAll().AsQueryable(); } } public IQueryable<T> GetAll<T>(string hash, string value, Expression<Func<T, bool>> filter) { var filtered = _redisClient.GetAllEntriesFromHash(hash).Where(c => c.Value.Equals(value, StringComparison.InvariantCultureIgnoreCase)); var ids = filtered.Select(c => c.Key); var ret = _redisClient.As<T>().GetByIds(ids).AsQueryable() .Where(filter); return ret; } public IQueryable<T> GetAll<T>(string hash, string value) { var filtered = _redisClient.GetAllEntriesFromHash(hash).Where(c => c.Value.Equals(value, StringComparison.InvariantCultureIgnoreCase)); var ids = filtered.Select(c => c.Key); var ret = _redisClient.As<T>().GetByIds(ids).AsQueryable(); return ret; } public void Set<T>(T item) { using (var typedclient = _redisClient.GetTypedClient<T>()) { typedclient.Store(item); } } public void Set<T>(T item, string hash, string value, string keyName) { Type t = item.GetType(); PropertyInfo prop = t.GetProperty(keyName); _redisClient.SetEntryInHash(hash, prop.GetValue(item).ToString(), value.ToLower()); _redisClient.As<T>().Store(item); } public void Set<T>(T item, List<string> hash, List<string> value, string keyName) { Type t = item.GetType(); PropertyInfo prop = t.GetProperty(keyName); for (int i = 0; i < hash.Count; i++) { _redisClient.SetEntryInHash(hash[i], prop.GetValue(item).ToString(), value[i].ToLower()); } _redisClient.As<T>().Store(item); } public void SetAll<T>(List<T> listItems) { using (var typedclient = _redisClient.GetTypedClient<T>()) { typedclient.StoreAll(listItems); } } public void SetAll<T>(List<T> list, string hash, string value, string keyName) { foreach (var item in list) { Type t = item.GetType(); PropertyInfo prop = t.GetProperty(keyName); _redisClient.SetEntryInHash(hash, prop.GetValue(item).ToString(), value.ToLower()); _redisClient.As<T>().StoreAll(list); } } public void SetAll<T>(List<T> list, List<string> hash, List<string> value, string keyName) { foreach (var item in list) { Type t = item.GetType(); PropertyInfo prop = t.GetProperty(keyName); for (int i = 0; i < hash.Count; i++) { _redisClient.SetEntryInHash(hash[i], prop.GetValue(item).ToString(), value[i].ToLower()); } _redisClient.As<T>().StoreAll(list); } } public void Delete<T>(T item) { using (var typedclient = _redisClient.GetTypedClient<T>()) { typedclient.Delete(item); } } public void DeleteAll<T>(T item) { using (var typedclient = _redisClient.GetTypedClient<T>()) { typedclient.DeleteAll(); } } public long PublishMessage(string channel, object item) { var ret = _redisClient.PublishMessage(channel, JsonConvert.SerializeObject(item)); return ret; } }}
using ServiceStack.Redis; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; using WebApi2.Manager; namespace WebApi2.Controllers { public class RedisController : ApiController { // GET: api/Redis/name public int Get(string name) { RedisClient client = new RedisClient("localhost", 6379); CacheManager cacheManager = new CacheManager(client); Person person = cacheManager.Get<Person>(name); return person.Age; } // POST: api/Redis public void Post(int age, string name) { RedisClient client = new RedisClient("localhost", 6379); CacheManager cacheManager = new CacheManager(client); Person person = new Person(); person.Age = age; person.Name = name; cacheManager.Set(person); } } public class Person { public int Age { get; set; } public string Name { get; set; } } }
Redis Manager
最新推荐文章于 2024-08-19 03:45:38 发布

270

被折叠的 条评论
为什么被折叠?



