redis发布订阅
1、RedisManager
using StackExchange.Redis; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace RedisLibrary { public class RedisManager { static int i = 0; static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(()=> { i++; return ConnectionMultiplexer.Connect(_conn); }); public static ConnectionMultiplexer LazyConnection { get { return lazyConnection.Value; } } static ConnectionMultiplexer _redis = null; static readonly object _locker = new object(); private static readonly string _conn = "127.0.0.1:6379"; public static ConnectionMultiplexer Manager { get { if (_redis == null) { lock (_locker) { if (_redis != null) { return _redis; }else { return GetManager(); } } } return _redis; } } private static ConnectionMultiplexer GetManager(string connectionString=null) { return ConnectionMultiplexer.Connect(_conn); } } }
2、RedisHelper
using Newtonsoft.Json; using StackExchange.Redis; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace RedisLibrary { /// <summary> /// Redis操作类 /// </summary> public class RedisHelper { public static async void PubAsync(string channel,string message) { await RedisManager.Manager.GetDatabase().PublishAsync(channel,message); } public static void Pub(string channel, string message) { RedisManager.Manager.GetDatabase().Publish(channel, message); } public static void Sub(string channel, Action<string> action) { var sub=RedisManager.Manager.GetSubscriber(); sub.Subscribe(channel,(redisChannel,redisValue)=> { action(redisValue); }); } #region string类型 /// <summary> /// 根据Key获取值 /// </summary> /// <param name="key"></param> /// <returns></returns> public static string StringGet(string key) { try { using (var client = RedisManager.Manager) { return client.GetDatabase().StringGet(key); } }catch(Exception ex) { return null; } } /// <summary> /// 批量获取值 /// </summary> /// <param name="keyStrs"></param> /// <returns></returns> public static string[] StringGetMany(string[] keyStrs) { var count = keyStrs.Length; var keys = new RedisKey[count]; var addrs = new string[count]; for(var i = 0; i < count; i++) { keys[i] = keyStrs[i]; } try { using (var client = RedisManager.Manager) { var values = client.GetDatabase().StringGet(keys); for(var i = 0; i < values.Length; i++) { addrs[i] = values[i]; } return addrs; } }catch(Exception ex) { return null; } } /// <summary> /// 单条存值 /// </summary> /// <param name="key"></param> /// <param name="value"></param> /// <returns></returns> public static bool StringSet(string key,string value) { using(var client = RedisManager.Manager) { return client.GetDatabase().StringSet(key,value); } } /// <summary> /// 批量存值 /// </summary> /// <param name="keysStr"></param> /// <param name="valuesStr"></param> /// <returns></returns> public static bool StringSetMany(string[] keysStr,string[] valuesStr) { var count = keysStr.Length; var keyValuePair = new KeyValuePair<RedisKey, RedisValue>[count]; for(int i = 0; i < count; i++) { keyValuePair[i] = new KeyValuePair<RedisKey, RedisValue>(keysStr[i],valuesStr[i]); } using (var client = RedisManager.Manager) { return client.GetDatabase().StringSet(keyValuePair); } } #endregion #region 泛型 /// <summary> /// 存值并设置过期时间 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key"></param> /// <param name="t"></param> /// <param name="ts">过期时间间隔</param> /// <returns></returns> public static bool Set<T>(string key,T t,TimeSpan ts) { var str = JsonConvert.SerializeObject(t); using (var client = RedisManager.Manager) { return client.GetDatabase().StringSet(key,str,ts); } } /// <summary> /// 根据Key获取值 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key"></param> /// <returns></returns> public static T Get<T>(string key) where T : class { using (var client = RedisManager.Manager) { var strValue = client.GetDatabase().StringGet(key); return string.IsNullOrWhiteSpace(strValue) ? null : JsonConvert.DeserializeObject<T>(strValue); } } #endregion } }
3、发布
RedisHelper.Pub("pub11", "pub2");
4、订阅
class Program { static void Main(string[] args) { RedisHelper.Sub("pub11",(message)=> { Console.WriteLine(message); }); } }

浙公网安备 33010602011771号