需要在NuGet里面引用ServiceStack.Redis

using ServiceStack.Redis;
using ServiceStack.Redis.Generic;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleRedisTest
{
/// <summary>
/// 需要在AppSettings裡面配置redis連接字符串節點,名稱固定為“redisHost”
/// 例如,格式參考 value="server=192.168.31.42;port=6380;password=pisenmaster;db=9"
/// </summary>
public class RedisTool : IDisposable
{ /// <summary>
/// redis主機ip
/// </summary>
private readonly static string RedisServerIP = string.Empty;// "192.168.31.42";
/// <summary>
/// 連接端口
/// </summary>
private readonly static int RedisPort = ;// 6380;
/// <summary>
/// 連接密碼
/// </summary>
private readonly static string RedisConnectPassword = string.Empty;// "pisenmaster";
/// <summary>
/// 缓冲池 實例db
/// </summary>
private readonly static string PooledRedisDB1 = string.Empty;// "pisenmaster@192.168.31.42:6380"; //默认缓存过期时间单位秒
public const int secondsTimeOut = * ; /// <summary>
/// //加載配置文件
/// </summary>
static RedisTool()
{
string conStr = System.Configuration.ConfigurationManager.AppSettings["redisHost"];
try
{
if (string.IsNullOrWhiteSpace(conStr))
{
throw new Exception("讀取配置文件出錯,AppSettings節沒有配置名為redisHost的redis連接字符串");
}
string[] arr = conStr.Split(';');
RedisServerIP = arr.First(w => w.ToLower().Contains("server="))?.Split('=')[];
RedisPort = Convert.ToInt32(arr.First(w => w.ToLower().Contains("port="))?.Split('=')[]);
RedisConnectPassword = arr.First(w => w.ToLower().Contains("password="))?.Split('=')[];
PooledRedisDB1 = $"{RedisConnectPassword}@{RedisServerIP}:{RedisPort}";
}
catch (Exception ex)
{
throw new Exception("讀取配置文件出錯,AppSettings節裡面沒有配置redis連接字符串名為redisHost的節");
}
} /// <summary>
/// redis客戶端
/// </summary>
public RedisClient Redis = new RedisClient(RedisServerIP, RedisPort, RedisConnectPassword, );
//public RedisClient Redis = new RedisClient("192.168.31.42", 6380, "pisenmaster", 9); //缓存池
private PooledRedisClientManager prcm = new PooledRedisClientManager(); /// <summary>
/// 构造函数
/// </summary>
/// <param name="OpenPooledRedis">是否开启缓冲池</param>
public RedisTool(bool OpenPooledRedis = false)
{
if (OpenPooledRedis)
{
//prcm = CreateManager(new[] { "pisenmaster@192.168.31.42:6380" }, new[] { "pisenmaster@192.168.31.42:6380" });
prcm = CreateManager(new[] { PooledRedisDB1 }, new[] { PooledRedisDB1 });
Redis = prcm.GetClient() as RedisClient;
}
} #region Key/Value存储 /// <summary>
/// 设置缓存
/// </summary>
/// <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 = )
{
if (timeout < )
{
//永不過期
return Redis.Set(key, t);
}
if (timeout == )
{
//默認時長
timeout = secondsTimeOut;
}
return Redis.Set(key, t, TimeSpan.FromSeconds(timeout));
} /// <summary>
/// 获取
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
public T Get<T>(string key)
{
return Redis.Get<T>(key);
} /// <summary>
/// 删除
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public bool Remove(string key)
{
return Redis.Remove(key);
} public bool Add<T>(string key, T t, int timeout)
{
if (timeout < )
{
//永不過期
return Redis.Set(key, t);
}
if (timeout == )
{
//默認時長
timeout = secondsTimeOut;
}
return Redis.Add(key, t, TimeSpan.FromSeconds(timeout));
} #endregion #region 链表操作 /// <summary>
/// 根据IEnumerable数据添加链表
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="listId"></param>
/// <param name="values"></param>
/// <param name="timeout"></param>
public void AddList<T>(string listId, IEnumerable<T> values, int timeout = )
{
IRedisTypedClient<T> iredisClient = Redis.As<T>();
IRedisList<T> redisList = iredisClient.Lists[listId];
redisList.AddRange(values);
if (timeout >= )
{
if (timeout == )
{
timeout = secondsTimeOut;
}
Redis.ExpireEntryIn(listId, TimeSpan.FromSeconds(timeout));
}
iredisClient.Save();
} /// <summary>
/// 添加单个实体到链表中
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="listId"></param>
/// <param name="Item"></param>
/// <param name="timeout">過期時間會覆蓋列表之前的過期時間,為-1時保持先前的過期設置</param>
public void AddEntityToList<T>(string listId, T Item, int timeout = )
{
IRedisTypedClient<T> iredisClient = Redis.As<T>();
IRedisList<T> redisList = iredisClient.Lists[listId];
redisList.Add(Item);
if (timeout >= )
{
if (timeout == )
{
timeout = secondsTimeOut;
}
Redis.ExpireEntryIn(listId, TimeSpan.FromSeconds(timeout));
}
iredisClient.Save();
} /// <summary>
/// 获取链表
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="listId"></param>
/// <returns></returns>
public IEnumerable<T> GetList<T>(string listId)
{
IRedisTypedClient<T> iredisClient = Redis.As<T>();
return iredisClient.Lists[listId];
} /// <summary>
/// 在链表中删除单个实体
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="listId"></param>
/// <param name="t"></param>
public void RemoveEntityFromList<T>(string listId, T t)
{
IRedisTypedClient<T> iredisClient = Redis.As<T>();
IRedisList<T> redisList = iredisClient.Lists[listId];
redisList.RemoveValue(t);
iredisClient.Save();
} /// <summary>
/// 根据lambada表达式删除符合条件的实体
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="listId"></param>
/// <param name="func"></param>
public void RemoveEntityFromList<T>(string listId, Func<T, bool> func)
{
IRedisTypedClient<T> iredisClient = Redis.As<T>();
IRedisList<T> redisList = iredisClient.Lists[listId];
T value = redisList.Where(func).FirstOrDefault();
redisList.RemoveValue(value);
iredisClient.Save();
} #endregion #region 清空Redis所有数据库中的所有key
public void Flushall()
{
Redis.FlushAll();
}
#endregion //释放资源
public void Dispose()
{
if (Redis != null)
{
Redis.Dispose();
Redis = null;
}
GC.Collect();
} /// <summary>
/// 缓冲池
/// </summary>
/// <param name="readWriteHosts"></param>
/// <param name="readOnlyHosts"></param>
/// <returns></returns>
public static PooledRedisClientManager CreateManager(
string[] readWriteHosts, string[] readOnlyHosts)
{
return new PooledRedisClientManager(readWriteHosts, readOnlyHosts,
new RedisClientManagerConfig
{
MaxWritePoolSize = readWriteHosts.Length * ,
MaxReadPoolSize = readOnlyHosts.Length * ,
AutoStart = true,
});
// { RedisClientFactory = (IRedisClientFactory)RedisCacheClientFactory.Instance.CreateRedisClient("127.0.0.1", 6379) };
}
} }

最新文章

  1. RHEL 6.3 详细安装教程
  2. Appium之python API
  3. [MAC]2015款MACBOOK使用BOOTCAMP安装WIN8.1+多分区
  4. 通过Nginx部署Django(基于ubuntu)
  5. jquery.tmpl.js 模板引擎用法
  6. python代码学习day03-序列化学习pickle及json
  7. Discuz! X的CSS加载机制
  8. 移动web app开发小贴士 收藏有用
  9. Sublime Text3 激活教程
  10. 【技巧】DataGridView,ListView重新绑定时保持上次滚动位置
  11. java基础知识再学习--集合框架-对象的强、软、弱和虚引用
  12. dig命令(转载)
  13. 一般处理程序、ASP.NET核心知识(5)--转载
  14. 求模和求余(附加C语言实现)
  15. Asp.Net MVC4 + Oracle + EasyUI + Bootstrap 1
  16. 在微服务系统开发部署中使用Azure RBAC自定义角色
  17. @JsonFormat的导包问题
  18. Java——String,StringBuffer,StringBuilder
  19. rebuild online 创建时,会话被Kill修复索引测试
  20. 清华大学 TUNA 协会

热门文章

  1. Gradle 使用教程之 Task 详解
  2. OpenStack核心组件-cinder存储服务
  3. 动态管理upsteam---nginx_http_dyups_module
  4. zookeeper 的 docker 镜像使用
  5. Python基础初始之二
  6. python写入excel(方式1)
  7. java项目部署
  8. Mybatis框架-联表查询显示问题解决
  9. 如何打开.ipynb文件
  10. vue中点击不同的em添加class去除兄弟级class