iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >C# 怎么通过ServiceStack 操作Redis
  • 399
分享到

C# 怎么通过ServiceStack 操作Redis

2023-06-14 05:06:10 399人浏览 泡泡鱼
摘要

这篇文章主要介绍“C# 怎么通过ServiceStack 操作Redis”,在日常操作中,相信很多人在C# 怎么通过ServiceStack 操作Redis问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#

这篇文章主要介绍“C# 怎么通过ServiceStack 操作Redis”,在日常操作中,相信很多人在C# 怎么通过ServiceStack 操作Redis问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C# 怎么通过ServiceStack 操作Redis”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1.引用Nuget包 ServiceStack.Redis

我这里就用别人已经封装好的Reids操作类来和大家一起参考了下,看看怎么使用ServiceStack.Redis 操作Redis数据

RedisConfigInfo--redis配置文件信息

 /// <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>  public string ReadServerList = "127.0.0.1:6379";  /// <summary>  /// 最大写链接数  /// </summary>  public int MaxWritePoolSize = 60;  /// <summary>  /// 最大读链接数  /// </summary>  public int MaxReadPoolSize = 60;  /// <summary>  /// 本地缓存到期时间,单位:秒  /// </summary>  public int LocalCacheTime = 180;  /// <summary>  /// 自动重启  /// </summary>  public bool AutoStart = true;  /// <summary>  /// 是否记录日志,该设置仅用于排查redis运行时出现的问题,  /// 如redis工作正常,请关闭该项  /// </summary>  public bool RecordeLog = false; }

RedisManager --Redis管理中心   创建Redis链接

 /// <summary> /// Redis管理中心 创建Redis链接 /// </summary> public class RedisManager {  /// <summary>  /// redis配置文件信息  /// </summary>  private static RedisConfigInfo RedisConfigInfo = new RedisConfigInfo();  /// <summary>  /// Redis客户端池化管理  /// </summary>  private static PooledRedisClientManager prcManager;  /// <summary>  /// 静态构造方法,初始化链接池管理对象  /// </summary>  static RedisManager()  {   CreateManager();  }  /// <summary>  /// 创建链接池管理对象  /// </summary>  private static void 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>  public static IRedisClient GetClient()  {   return prcManager.GetClient();  } }

RedisBase-- 是redis操作的基类,继承自IDisposable接口,主要用于释放内存

/// <summary> /// RedisBase类,是redis操作的基类,继承自IDisposable接口,主要用于释放内存 /// </summary> public abstract class RedisBase : IDisposable {  public IRedisClient iClient { get; private set; }  /// <summary>  /// 构造时完成链接的打开  /// </summary>  public RedisBase()  {    iClient = RedisManager.GetClient();  }  //public static IRedisClient iClient { get; private set; }  //static RedisBase()  //{  // iClient = RedisManager.GetClient();  //}  private bool _disposed = false;  protected virtual void Dispose(bool disposing)  {   if (!this._disposed)   {    if (disposing)    {     iClient.Dispose();     iClient = null;    }   }   this._disposed = true;  }  public void Dispose()  {   Dispose(true);   GC.SuppressFinalize(this);  }  public void 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>  public virtual void FlushAll()  {   iClient.FlushAll();  }  /// <summary>  /// 保存数据DB文件到硬盘  /// </summary>  public void Save()  {   iClient.Save();//阻塞式save  }  /// <summary>  /// 异步保存数据DB文件到硬盘  /// </summary>  public void SaveAsync()  {   iClient.SaveAsync();//异步save  } }

RedisStringService--String类型操作帮助类

 /// <summary> /// key-value 键值对:value可以是序列化的数据 /// </summary> public class RedisStringService : RedisBase {  #region 赋值  /// <summary>  /// 设置key的value  /// </summary>  public bool Set<T>(string key, T value)  {   //iClient.Db =2;   return base.iClient.Set<T>(key, value);  }  /// <summary>  /// 设置key的value并设置过期时间  /// </summary>  public bool Set<T>(string key, T value, DateTime dt)  {   //iClient.Db = 2;   return base.iClient.Set<T>(key, value, dt);  }  /// <summary>  /// 设置key的value并设置过期时间  /// </summary>  public bool Set<T>(string key, T value, TimeSpan sp)  {   //iClient.Db = 2;   return base.iClient.Set<T>(key, value, sp);  }  /// <summary>  /// 设置多个key/value 可以一次保存多个key value ---多个key value 不是分多次,是一个独立的命令;  /// </summary>  public void Set(Dictionary<string, string> dic)  {   //iClient.Db = 2;   base.iClient.SetAll(dic);  }  #endregion  #region 追加  /// <summary>  /// 在原有key的value值之后追加value,没有就新增一项  /// </summary>  public long Append(string key, string value)  {   return base.iClient.AppendToValue(key, value);  }  #endregion  #region 获取值  /// <summary>  /// 获取key的value值  /// </summary>  public string Get(string key)  {   return base.iClient.GetValue(key);  }  /// <summary>  /// 获取多个key的value值  /// </summary>  public List<string> Get(List<string> keys)  {   return base.iClient.GetValues(keys);  }  /// <summary>  /// 获取多个key的value值  /// </summary>  public List<T> Get<T>(List<string> keys)  {   return base.iClient.GetValues<T>(keys);  }  #endregion  #region 获取旧值赋上新值  /// <summary>  /// 获取旧值赋上新值  /// </summary>  public string GetAndSetValue(string key, string value)  {   return base.iClient.GetAndSetValue(key, value);  }  #endregion  #region 辅助方法  /// <summary>  /// 获取值的长度  /// </summary>  public long GetLength(string key)  {   return base.iClient.GetStringCount(key);  }  /// <summary>  /// 自增1,返回自增后的值 保存的是10 调用后,+1 返回11  /// </summary>  public long Incr(string key)  {   return base.iClient.IncrementValue(key);  }  /// <summary>  /// 自增count,返回自增后的值 自定义自增的步长值  /// </summary>  public long IncrBy(string key, int count)  {   return base.iClient.IncrementValueBy(key, count);  }  /// <summary>  /// 自减1,返回自减后的值,Redis操作是单线程操作;不会出现超卖的情况  /// </summary>  public long Decr(string key)  {   return base.iClient.DecrementValue(key);  }  /// <summary>  /// 自减count ,返回自减后的值  /// </summary>  /// <param name="key"></param>  /// <param name="count"></param>  /// <returns></returns>  public long DecrBy(string key, int count)  {   return base.iClient.DecrementValueBy(key, count);  }  #endregion }

nuget包是外国人写的,在国内并没有完整的中文文档,也没有专门的人来翻译、封装它,所以上面的代码方法不是很全,还有很多api方法需要自己去官网找然后自己封装。

在这里,上面的封装我就放一边,还是给大家演示ServiceStack原生的API如何使用

2. string 类型的使用

C# 怎么通过ServiceStack 操作Redis

 public static RedisClient client = new RedisClient("127.0.0.1", 6379);    //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);    //自减50    var 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);

C# 怎么通过ServiceStack 操作Redis

C# 怎么通过ServiceStack 操作Redis

//9. 重命名key    client.Rename("106", "1066");    //10. 设置key的过期时间(30秒后自动销毁)    bool b2= client.Expire("102", 30);    //11. 删除单个key    bool d1 = client.Remove("101");//删除成功,返回true    bool d2 = client.Remove("ffff"); //删除不存在的数据,返回false

C# 怎么通过ServiceStack 操作Redis

//13.清除全部数据 请小心client.FlushAll();

C# 怎么通过ServiceStack 操作Redis

到此,关于“C# 怎么通过ServiceStack 操作Redis”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: C# 怎么通过ServiceStack 操作Redis

本文链接: https://www.lsjlt.com/news/267887.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C# 怎么通过ServiceStack 操作Redis
    这篇文章主要介绍“C# 怎么通过ServiceStack 操作Redis”,在日常操作中,相信很多人在C# 怎么通过ServiceStack 操作Redis问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C# ...
    99+
    2023-06-14
  • C# 通过ServiceStack 操作Redis
    目录1.引用Nuget包 ServiceStack.Redis2. string 类型的使用作      &nb...
    99+
    2024-04-02
  • 通过C#程序操作Config文件
    对于config文件,一般情况下都是使用ConfigurationManager加载,然后通过读取相应节点的值来获取想要的数据,但是,有时候需要修改config文件的值,这时候就用到...
    99+
    2024-04-02
  • 如何通过C#程序操作Config文件
    本文小编为大家详细介绍“如何通过C#程序操作Config文件”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何通过C#程序操作Config文件”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。对于config文件,...
    99+
    2023-06-29
  • Java 通过API操作GraphQL
    目录引入依赖Java中使用GraphQL的API 无参数简单查询带参数简单查询GraphQL可以通过Java的API来实现数据的查询,通过特定的SDL查询语句,获取特定的查询数据。相...
    99+
    2024-04-02
  • python通过ElementTree操作XML
    1.引入库 需要用到3个类,ElementTree,Element以及建立子类的包装类SubElement from xml.etree.ElementTree import Ele...
    99+
    2024-04-02
  • PHP 通过 Redis 解决并发请求的操作问题
    比如PHP收到两个并发的请求A和B,要求只能其中一个请求处理S1操作,另一个请求直接返回失败,可以通过redis去解决: SETNX(SET if Not eXists)是 Redis 中的一个原子命令,用于设置键-值对,但只有在键不存在时...
    99+
    2023-09-10
    php redis 开发语言
  • 怎么在Redis中实现键值过期操作
    这篇文章将为大家详细讲解有关怎么在Redis中实现键值过期操作,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.过期设置Redis 中设置过期时间主要通过以...
    99+
    2024-04-02
  • 如何通过ibatis操作mysql
    本篇文章为大家展示了如何通过ibatis操作mysql,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。步骤如下:1,在eclipse中新建一个工程ibatisnew,...
    99+
    2024-04-02
  • 怎么通过Java程序来操作Excel批注
    这篇文章主要介绍“怎么通过Java程序来操作Excel批注”,在日常操作中,相信很多人在怎么通过Java程序来操作Excel批注问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么通过Java程序来操作Exce...
    99+
    2023-06-02
  • Python中怎么操作Redis
    Python中怎么操作Redis,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、字符串 stringsPython操作Redis的redis模块对字符串(string)的...
    99+
    2023-06-16
  • python如何通过ElementTree操作XML
    这篇文章主要介绍“python如何通过ElementTree操作XML”,在日常操作中,相信很多人在python如何通过ElementTree操作XML问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”pytho...
    99+
    2023-07-02
  • 怎么使用PHP操作Redis
    本篇内容主要讲解“怎么使用PHP操作Redis”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用PHP操作Redis”吧!redis 的基本操作方法1 redis 的连接 ://实例化red...
    99+
    2023-06-20
  • PHP操作redis怎么理解
    PHP操作redis怎么理解,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-V...
    99+
    2023-06-04
  • 怎么在php中操作redis
    怎么在php中操作redis?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。php的框架有哪些php的框架:1、Laravel,Laravel是一款免费并且开源的PHP应用框...
    99+
    2023-06-14
  • C++LeetCode1775通过最少操作次数使数组和相等
    目录LeetCode1775.通过最少操作次数使数组的和相等方法一:贪心 + 计数AC代码C++LeetCode1775.通过最少操作次数使数组的和相等 力扣题目链接:leetco...
    99+
    2022-12-16
    C++ 最少操作数组和相等 C++ LeetCode题解
  • 怎么通过shell脚本批量操作mysql数据库
    这篇文章主要讲解了“怎么通过shell脚本批量操作mysql数据库”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么通过shell脚本批量操作mysql数据库”吧!创建建表语句  =====...
    99+
    2023-06-05
  • PHP怎样操作Redis
    这篇“PHP怎样操作Redis”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“PHP怎样操作Redis”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过这...
    99+
    2024-04-02
  • 如何通过phonegap操作数据库
    这篇文章主要介绍了如何通过phonegap操作数据库,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。实例如下:<!DOCTYPE&nbs...
    99+
    2024-04-02
  • Angular.JS如何通过指令操作DOM
    这篇文章给大家分享的是有关Angular.JS如何通过指令操作DOM的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在指令而非在控制器中操作DOM相信大家在页面处理中,难免会遇到操...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作