c#下使用redis全教程
第一步编译redis
第二步部署redis
第三步部署c#使用redis环境
先去弄Cygwin环境
Cygwin链接
一直安装即可
到下面这个界面时
让你添加地址,你打开官网,选择mirror sites,点击下面的 Hong Kong(http://mirror-hk.koddos.net/cygwin/)
一直往下走
索框里输入文字自动搜索,点击“New”的一列,有个那个下拉按钮,选择版本
选择gcc 用过linux系统的应该明白
选择make
还有automake
完成
进github下载redis超链接
我们进入hiredis目录,执行make
下面进入lua的目录,执行make generic
这个也没什么问题。进入linenoise目录,执行make
最后进入根目录,执行make
最后,启动验证
此时安装好了
c#使用redis有多种redis客户端工具常用的比如csredis,nhiredis和StackExchange.Redis
下面我们用StackExchange.Redis讲解
首先使用redis我们要知道redis有几种数据结构
String: 字符串
Hash: 散列
List: 列表
Set: 集合
Sorted Set: 有序集合
首先在vs中nuget安装
输入Install-Package StackExchange.Redis -Version 1.2.6
然后再安装Newtonsoft.Json(主要拿来序列化)
使用我下面代码的时候注意redis的端口号一般都是6379
然后密码可以在redis.conf中找到
此时基础工作做完了
下面就开始撸代码
class RedisHelper{#region 单例模式//连接redis服务器(连接字符串)private static ConfigurationOptions connDCS = ConfigurationOptions.Parse("127.0.0.1:6379,password=foobared");//线程锁private static readonly object Locker = new object();//连接对象private static ConnectionMultiplexer redisConn;//获取连接public static ConnectionMultiplexer getRedisConn(){if (redisConn == null){lock (Locker){if (redisConn == null || !redisConn.IsConnected){redisConn = ConnectionMultiplexer.Connect(connDCS);}}/*可以用来处理并发的事情*/}return redisConn;}/// <summary>/// 数据库/// </summary>private IDatabase _db;public RedisHelper(){if (redisConn == null){lock (Locker){if (redisConn == null || !redisConn.IsConnected){redisConn = ConnectionMultiplexer.Connect(connDCS);}}/*可以用来处理并发的事情*/}if (_db == null){lock (Locker){if (_db == null){_db = GetDatabase();}}}}/// <summary>/// 获取数据库/// </summary>/// <param name="db"></param>/// <returns></returns>public IDatabase GetDatabase(int? db = null){return getRedisConn().GetDatabase(db ?? -1);}/// <summary>/// 设置string/// </summary>/// <param name="key">键</param>/// <param name="data">值</param>/// <param name="cacheTime">时间</param>public virtual void StringSet(string key, object data, int cacheTime){if (data == null){return;}var entryBytes = Serialize(data);var expiresIn = TimeSpan.FromMinutes(cacheTime);_db.StringSet(key, entryBytes, expiresIn);}/// <summary>/// 根据键获取值/// </summary>/// <typeparam name="T"></typeparam>/// <param name="key"></param>/// <returns></returns>public virtual T Get<T>(string key){var rValue = _db.StringGet(key);if (!rValue.HasValue){return default(T);}var result = Deserialize<T>(rValue);return result;}/// <summary>/// 反序列化/// </summary>/// <typeparam name="T"></typeparam>/// <param name="serializedObject"></param>/// <returns></returns>protected virtual T Deserialize<T>(byte[] serializedObject){if (serializedObject == null){return default(T);}var json = Encoding.UTF8.GetString(serializedObject);return JsonConvert.DeserializeObject<T>(json);}/// <summary>/// 判断是否已经设置/// </summary>/// <param name="key"></param>/// <returns></returns>public virtual bool IsSet(string key){return _db.KeyExists(key);}/// <summary>/// 序列化/// </summary>/// <param name="data"></param>/// <returns>byte[]</returns>private byte[] Serialize(object data){var json = JsonConvert.SerializeObject(data);return Encoding.UTF8.GetBytes(json);}#endregion
设置与调用
var s = "a";new RedisHelper().StringSet("abc", s, 10);Console.WriteLine(new RedisHelper().Get<string>("abc"));
学海无涯苦作舟,希望大家的程序写的越来越好