编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

Redis总结(二)C#中如何使用redis(redis在c#中的应用)

wxchong 2024-07-21 07:05:40 开源技术 10 ℃ 0 评论

上一篇讲述了安装redis《Redis总结(一)Redis安装》,同时也大致介绍了redis的优势和应用场景。本篇着重讲解.NET中如何使用redis和C#。

Redis官网提供了很多开源的C#客户端。例如,Nhiredis ,ServiceStack.Redis ,StackExchange.Redis等。其中ServiceStack.Redis应该算是比较流行的。它提供了一整套从Redis数据结构都强类型对象转换的机制并将对象json序列化。所以这里只介绍ServiceStack.Redis,它也是目前我们产品中所使用的客户端。

ServiceStack.Redis地址:https://github.com/ServiceStack/ServiceStack.Redis

C#如何调用

1. 建立一个控制台应用程序,并引用以下ServiceStack.Redis相关的四个类库。或者通过Nuget进行安装Redis常用组件ServiceStack.Redis。 下载示例代码。

2. 创建一个Redis操作的公用类RedisCacheHelper,

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Web;
using ServiceStack.Common.Extensions;
using ServiceStack.Redis;
using ServiceStack.Logging;
 
namespace Weiz.Redis.RedisTest
{
 public class RedisCacheHelper
 {
 private static readonly PooledRedisClientManager pool = null;
 private static readonly string[] redisHosts = null;
 public static int RedisMaxReadPool = int.Parse(ConfigurationManager.AppSettings["redis_max_read_pool"]);
 public static int RedisMaxWritePool = int.Parse(ConfigurationManager.AppSettings["redis_max_write_pool"]);
 
 static RedisCacheHelper()
 {
 var redisHostStr = ConfigurationManager.AppSettings["redis_server_session"];
 
 if (!string.IsNullOrEmpty(redisHostStr))
 {
 redisHosts = redisHostStr.Split(',');
 
 if (redisHosts.Length > 0)
 {
 pool = new PooledRedisClientManager(redisHosts, redisHosts,
 new RedisClientManagerConfig()
 {
 MaxWritePoolSize = RedisMaxWritePool,
 MaxReadPoolSize = RedisMaxReadPool,
 AutoStart = true
 });
 }
 }
 }
 public static void Add<T>(string key, T value, DateTime expiry)
 {
 if (value == null)
 {
 return;
 }
 
 if (expiry <= DateTime.Now)
 {
 Remove(key);
 
 return;
 }
 
 try
 {
 if (pool != null)
 {
 using (var r = pool.GetClient())
 {
 if (r != null)
 {
 r.SendTimeout = 1000;
 r.Set(key, value, expiry - DateTime.Now);
 }
 }
 }
 }
 catch (Exception ex)
 {
 string msg = string.Format("{0}:{1}发生异常!{2}", "cache", "存储", key);
 }
 
 }
 
 public static void Add<T>(string key, T value, TimeSpan slidingExpiration)
 {
 if (value == null)
 {
 return;
 }
 
 if (slidingExpiration.TotalSeconds <= 0)
 {
 Remove(key);
 
 return;
 }
 
 try
 {
 if (pool != null)
 {
 using (var r = pool.GetClient())
 {
 if (r != null)
 {
 r.SendTimeout = 1000;
 r.Set(key, value, slidingExpiration);
 }
 }
 }
 }
 catch (Exception ex)
 {
 string msg = string.Format("{0}:{1}发生异常!{2}", "cache", "存储", key);
 }
 
 }
 
 
 
 public static T Get<T>(string key)
 {
 if (string.IsNullOrEmpty(key))
 {
 return default(T);
 }
 
 T obj = default(T);
 
 try
 {
 if (pool != null)
 {
 using (var r = pool.GetClient())
 {
 if (r != null)
 {
 r.SendTimeout = 1000;
 obj = r.Get<T>(key);
 }
 }
 }
 }
 catch (Exception ex)
 {
 string msg = string.Format("{0}:{1}发生异常!{2}", "cache", "获取", key);
 }
 
 
 return obj;
 }
 
 public static void Remove(string key)
 {
 try
 {
 if (pool != null)
 {
 using (var r = pool.GetClient())
 {
 if (r != null)
 {
 r.SendTimeout = 1000;
 r.Remove(key);
 }
 }
 }
 }
 catch (Exception ex)
 {
 string msg = string.Format("{0}:{1}发生异常!{2}", "cache", "删除", key);
 }
 
 }
 
 public static bool Exists(string key)
 {
 try
 {
 if (pool != null)
 {
 using (var r = pool.GetClient())
 {
 if (r != null)
 {
 r.SendTimeout = 1000;
 return r.ContainsKey(key);
 }
 }
 }
 }
 catch (Exception ex)
 {
 string msg = string.Format("{0}:{1}发生异常!{2}", "cache", "是否存在", key);
 }
 
 return false;
 }
 }
}

说明:RedisCacheHelper 使用的是客户端链接池模式,这样的存取效率应该是最高的。同时也更方便的支持读写分离,均衡负载。

3. 配置文件

<!-- redis Start -->
<add key="SessionExpireMinutes" value="180" />
<add key="redis_server_session" value="127.0.0.1:6379" />
<add key="redis_max_read_pool" value="3" />
<add key="redis_max_write_pool" value="1" />
<!--redis end-->

4. 测试程序调用

class Program
 {
 static void Main(string[] args)
 {
 Console.WriteLine("Redis写入缓存:zhong");
 
 RedisCacheHelper.Add("zhong", "zhongzhongzhong", DateTime.Now.AddDays(1));
 
 Console.WriteLine("Redis获取缓存:zhong");
 
 string str3 = RedisCacheHelper.Get<string>("zhong");
 
 Console.WriteLine(str3);
 
 Console.WriteLine("Redis获取缓存:nihao");
 string str = RedisCacheHelper.Get<string>("nihao");
 Console.WriteLine(str);
 
 
 Console.WriteLine("Redis获取缓存:wei");
 string str1 = RedisCacheHelper.Get<string>("wei");
 Console.WriteLine(str1);
 
 Console.ReadKey();
 }
 }

5. 输出结果

最后

以上就把C# 如何调用redis 简单介绍完了。实际上不同的应用场景下,还是有很多不同,这个大家根据自己的情况自己去研究吧。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表