Redis Manager

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 valuestring 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<stringvaluestring 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 valuestring 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<stringvaluestring 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 { getset; } 
        public string Name { getset; } 
    } 
} 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值