C# 通过ServiceStack 操作Redis——String类型的使用及示例
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C# 通过ServiceStack 操作Redis——String类型的使用及示例,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含7753字,纯文字阅读大概需要12分钟。
内容图文
![C# 通过ServiceStack 操作Redis——String类型的使用及示例](/upload/InfoBanner/zyjiaocheng/1334/b3dae564ce774950876de8ef8f4d4d17.jpg)
1.引用Nuget包 ServiceStack.Redis
我这里就用别人已经封装好的Reids操作类来和大家一起参考了下,看看怎么使用ServiceStack.Redis 操作Redis
RedisConfigInfo--redis配置文件信息
![技术分享图片](/upload/getfiles/default/2022/10/28/20221028045706404.jpg)
![技术分享图片](/upload/getfiles/default/2022/10/28/20221028045706686.jpg)
/// <summary> /// redis配置文件信息 /// 也可以放到配置文件去 /// </summary> public sealed class RedisConfigInfo { /// <summary> /// 可写的Redis链接地址 /// format:ip1,ip2 /// /// 默认6379端口 /// </summary> public string WriteServerList = "127.0.0.1:6379"; ///<summary>/// 可读的Redis链接地址 /// format:ip1,ip2 ///</summary>publicstring ReadServerList = "127.0.0.1:6379"; ///<summary>/// 最大写链接数 ///</summary>publicint MaxWritePoolSize = 60; ///<summary>/// 最大读链接数 ///</summary>publicint MaxReadPoolSize = 60; ///<summary>/// 本地缓存到期时间,单位:秒 ///</summary>publicint LocalCacheTime = 180; ///<summary>/// 自动重启 ///</summary>publicbool AutoStart = true; ///<summary>/// 是否记录日志,该设置仅用于排查redis运行时出现的问题, /// 如redis工作正常,请关闭该项 ///</summary>publicbool RecordeLog = false; }
RedisManager --Redis管理中心 创建Redis链接
![技术分享图片](/upload/getfiles/default/2022/10/28/20221028045706404.jpg)
![技术分享图片](/upload/getfiles/default/2022/10/28/20221028045706686.jpg)
/// <summary> /// Redis管理中心 创建Redis链接 /// </summary> public class RedisManager { /// <summary> /// redis配置文件信息 /// </summary> private static RedisConfigInfo RedisConfigInfo = new RedisConfigInfo(); ///<summary>/// Redis客户端池化管理 ///</summary>privatestatic PooledRedisClientManager prcManager; ///<summary>/// 静态构造方法,初始化链接池管理对象 ///</summary>static RedisManager() { CreateManager(); } ///<summary>/// 创建链接池管理对象 ///</summary>privatestaticvoid CreateManager() { string[] WriteServerConStr = RedisConfigInfo.WriteServerList.Split(‘,‘); string[] ReadServerConStr = RedisConfigInfo.ReadServerList.Split(‘,‘); prcManager = new PooledRedisClientManager(ReadServerConStr, WriteServerConStr, new RedisClientManagerConfig { MaxWritePoolSize = RedisConfigInfo.MaxWritePoolSize, MaxReadPoolSize = RedisConfigInfo.MaxReadPoolSize, AutoStart = RedisConfigInfo.AutoStart, }); } ///<summary>/// 客户端缓存操作对象 ///</summary>publicstatic IRedisClient GetClient() { return prcManager.GetClient(); } }
RedisBase-- 是redis操作的基类,继承自IDisposable接口,主要用于释放内存
![技术分享图片](/upload/getfiles/default/2022/10/28/20221028045706404.jpg)
![技术分享图片](/upload/getfiles/default/2022/10/28/20221028045706686.jpg)
/// <summary> /// RedisBase类,是redis操作的基类,继承自IDisposable接口,主要用于释放内存 /// </summary> public abstract class RedisBase : IDisposable { public IRedisClient iClient { get; privateset; } ///<summary>/// 构造时完成链接的打开 ///</summary>public RedisBase() { iClient = RedisManager.GetClient(); } //public static IRedisClient iClient { get; private set; } //static RedisBase() //{ // iClient = RedisManager.GetClient(); //}privatebool _disposed = false; protectedvirtualvoid Dispose(bool disposing) { if (!this._disposed) { if (disposing) { iClient.Dispose(); iClient = null; } } this._disposed = true; } publicvoid Dispose() { Dispose(true); GC.SuppressFinalize(this); } publicvoid Transcation() { using (IRedisTransaction irt = this.iClient.CreateTransaction()) { try { irt.QueueCommand(r => r.Set("key", 20)); irt.QueueCommand(r => r.Increment("key", 1)); irt.Commit(); // 提交事务 } catch (Exception ex) { irt.Rollback(); throw ex; } } } ///<summary>/// 清除全部数据 请小心 ///</summary>publicvirtualvoid FlushAll() { iClient.FlushAll(); } ///<summary>/// 保存数据DB文件到硬盘 ///</summary>publicvoid Save() { iClient.Save();//阻塞式save } ///<summary>/// 异步保存数据DB文件到硬盘 ///</summary>publicvoid SaveAsync() { iClient.SaveAsync();//异步save } }
RedisStringService--String类型操作帮助类
![技术分享图片](/upload/getfiles/default/2022/10/28/20221028045706404.jpg)
![技术分享图片](/upload/getfiles/default/2022/10/28/20221028045706686.jpg)
/// <summary> /// key-value 键值对:value可以是序列化的数据 /// </summary> public class RedisStringService : RedisBase { #region 赋值 ///<summary>/// 设置key的value ///</summary>publicbool Set<T>(string key, T value) { //iClient.Db =2;returnbase.iClient.Set<T>(key, value); } ///<summary>/// 设置key的value并设置过期时间 ///</summary>publicbool Set<T>(string key, T value, DateTime dt) { //iClient.Db = 2;returnbase.iClient.Set<T>(key, value, dt); } ///<summary>/// 设置key的value并设置过期时间 ///</summary>publicbool Set<T>(string key, T value, TimeSpan sp) { //iClient.Db = 2;returnbase.iClient.Set<T>(key, value, sp); } ///<summary>/// 设置多个key/value 可以一次保存多个key value ---多个key value 不是分多次,是一个独立的命令; ///</summary>publicvoid Set(Dictionary<string, string> dic) { //iClient.Db = 2;base.iClient.SetAll(dic); } #endregion#region 追加 ///<summary>/// 在原有key的value值之后追加value,没有就新增一项 ///</summary>publiclong Append(string key, string value) { returnbase.iClient.AppendToValue(key, value); } #endregion#region 获取值 ///<summary>/// 获取key的value值 ///</summary>publicstring Get(string key) { returnbase.iClient.GetValue(key); } ///<summary>/// 获取多个key的value值 ///</summary>public List<string> Get(List<string> keys) { returnbase.iClient.GetValues(keys); } ///<summary>/// 获取多个key的value值 ///</summary>public List<T> Get<T>(List<string> keys) { returnbase.iClient.GetValues<T>(keys); } #endregion#region 获取旧值赋上新值 ///<summary>/// 获取旧值赋上新值 ///</summary>publicstring GetAndSetValue(string key, string value) { returnbase.iClient.GetAndSetValue(key, value); } #endregion#region 辅助方法 ///<summary>/// 获取值的长度 ///</summary>publiclong GetLength(string key) { returnbase.iClient.GetStringCount(key); } ///<summary>/// 自增1,返回自增后的值 保存的是10 调用后,+1 返回11 ///</summary>publiclong Incr(string key) { returnbase.iClient.IncrementValue(key); } ///<summary>/// 自增count,返回自增后的值 自定义自增的步长值 ///</summary>publiclong IncrBy(string key, int count) { returnbase.iClient.IncrementValueBy(key, count); } ///<summary>/// 自减1,返回自减后的值,Redis操作是单线程操作;不会出现超卖的情况 ///</summary>publiclong Decr(string key) { returnbase.iClient.DecrementValue(key); } ///<summary>/// 自减count ,返回自减后的值 ///</summary>///<param name="key"></param>///<param name="count"></param>///<returns></returns>publiclong DecrBy(string key, int count) { returnbase.iClient.DecrementValueBy(key, count); } #endregion }
nuget包是外国人写的,在国内并没有完整的中文文档,也没有专门的人来翻译、封装它,所以上面的代码方法不是很全,还有很多api方法需要自己去官网找然后自己封装。
在这里,上面的封装我就放一边,还是给大家演示ServiceStack原生的API如何使用
2. string 类型的使用
// 1.存入键值对 bool a = client.Set("key_name", "value_11"); //2. 根据key获取值string data1= client.GetValue("key_name"); //3. 在原有的value上进行追加long data2 = client.AppendToValue("key_name", "value_11"); // 4.获取值的长度var data3=client.GetStringCount("key_name"); //5. 数值自增/减,返回自增、自减后的值 client.Set("小明分数", 100); //自增20,可以自增负值var data4= client.IncrementValueBy("小明分数", 20); //自减50var data5 = client.DecrementValueBy("小明分数", 50); //6. 插入实体和读取实体 UserInfo userInfo = new UserInfo() { Id = 3, Age = 50, Name = "zxl", Pwd = "123456" }; client.Set("UserInfo_Id_3", userInfo); UserInfo data6 = client.Get<UserInfo>("UserInfo_Id_3"); //7. 一次性添加多个key-value集合 Dictionary<string, string> dic = new Dictionary<string, string>() { { "101", Guid.NewGuid().ToString("N")}, { "102", Guid.NewGuid().ToString("N")}, { "103", Guid.NewGuid().ToString("N")}, { "104", Guid.NewGuid().ToString("N")}, { "105", Guid.NewGuid().ToString("N")}, { "106", Guid.NewGuid().ToString("N")} }; client.SetAll(dic); //8.获取多个key的 value值集合 List<string> keys = new List<string>(){ "101", "103", "105" }; List<string> data8= client.GetValues(keys);
// 9. 重命名key client.Rename("106", "1066"); //10. 设置key的过期时间(30秒后自动销毁)bool b2= client.Expire("102", 30); //11. 删除单个keybool d1 = client.Remove("101");//删除成功,返回truebool d2 = client.Remove("ffff"); //删除不存在的数据,返回false
// 12. 删除多个key IEnumerable<string> delete_keys = new List<string> { "101", "103", "105" }; client.RemoveAll(delete_keys);
// 13.清除全部数据 请小心 client.FlushAll();
原文:https://www.cnblogs.com/for-easy-fast/p/14527233.html
内容总结
以上是互联网集市为您收集整理的C# 通过ServiceStack 操作Redis——String类型的使用及示例全部内容,希望文章能够帮你解决C# 通过ServiceStack 操作Redis——String类型的使用及示例所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。