天天看点

servicestack.redis工具类

using System;

using System.Collections.Generic;

using System.Linq;

using ServiceStack.Redis;

using ServiceStack.Redis.Generic;

namespace RedisHelper

{

public class RedisTool : IDisposable

{

public RedisClient Redis = new RedisClient("127.0.0.1", 6379, "123456");

//缓存池

private PooledRedisClientManager prcm = new PooledRedisClientManager();

//默认缓存过期时间单位秒

public int secondsTimeOut = 30 * 60;

/// <summary>

/// 构造函数

/// </summary>

/// <param name="OpenPooledRedis">是否开启缓冲池</param>

public RedisTool(bool OpenPooledRedis = false)

{

if (OpenPooledRedis)

{

prcm = CreateManager(new[] { "[email protected]:6379" }, new[] { "[email protected]:6379" });

Redis = prcm.GetClient() as RedisClient;

}

}

#region Key/Value存储

/// 设置缓存

/// <typeparam name="T"></typeparam>

/// <param name="key">缓存建</param>

/// <param name="t">缓存值</param>

/// <param name="timeout">过期时间,单位秒,-1:不过期,0:默认过期时间</param>

/// <returns></returns>

public bool Set<T>(string key, T t, int timeout = 0)

if (timeout >= 0)

if (timeout > 0)

{

secondsTimeOut = timeout;

}

Redis.Expire(key, secondsTimeOut);

return Redis.Add(key, t);

/// 获取

/// <param name="key"></param>

public T Get<T>(string key)

return Redis.Get<T>(key);

/// 删除

public bool Remove(string key)

return Redis.Remove(key);

public bool Add<T>(string key, T t, int timeout)

#endregion

#region 链表操作

/// 根据IEnumerable数据添加链表

/// <param name="listId"></param>

/// <param name="values"></param>

/// <param name="timeout"></param>

public void AddList<T>(string listId, IEnumerable<T> values, int timeout = 0)

Redis.Expire(listId, 60);

IRedisTypedClient<T> iredisClient = Redis.As<T>();

Redis.Expire(listId, secondsTimeOut);

IRedisList<T> redisList = iredisClient.Lists[listId];

redisList.AddRange(values);

iredisClient.Save();

/// 添加单个实体到链表中

/// <param name="Item"></param>

public void AddEntityToList<T>(string listId, T Item, int timeout = 0)

redisList.Add(Item);

/// 获取链表

public IEnumerable<T> GetList<T>(string listId)

return iredisClient.Lists[listId];

/// 在链表中删除单个实体

/// <param name="t"></param>

public void RemoveEntityFromList<T>(string listId, T t)

redisList.RemoveValue(t);

/// 根据lambada表达式删除符合条件的实体

/// <param name="func"></param>

public void RemoveEntityFromList<T>(string listId, Func<T, bool> func)

using (IRedisTypedClient<T> iredisClient = Redis.As<T>())

IRedisList<T> redisList = iredisClient.Lists[listId];

T value = redisList.Where(func).FirstOrDefault();

redisList.RemoveValue(value);

iredisClient.Save();

#region 清空Redis所有数据库中的所有key

public void Flushall()

Redis.FlushAll();

//释放资源

public void Dispose()

if (Redis != null)

Redis.Dispose();

Redis = null;

GC.Collect();

/// 缓冲池

/// <param name="readWriteHosts"></param>

/// <param name="readOnlyHosts"></param>

public static PooledRedisClientManager CreateManager(

string[] readWriteHosts, string[] readOnlyHosts)

return new PooledRedisClientManager(readWriteHosts, readOnlyHosts,

new RedisClientManagerConfig

MaxWritePoolSize = readWriteHosts.Length * 5,

MaxReadPoolSize = readOnlyHosts.Length * 5,

AutoStart = true,

});

// { RedisClientFactory = (IRedisClientFactory)RedisCacheClientFactory.Instance.CreateRedisClient("127.0.0.1", 6379) };

}

}

继续阅读