返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C# 通过ServiceStack 操作Redis
  • 611
分享到

C# 通过ServiceStack 操作Redis

2024-04-02 19:04:59 611人浏览 独家记忆
摘要

目录1.引用Nuget包 ServiceStack.Redis2. string 类型的使用作      &nb

作       者 : 明志德道

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 类型的使用


     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);


    //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


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

以上就是C# 通过ServiceStack 操作Redis的详细内容,更多关于C# ServiceStack 操作Redis的资料请关注编程网其它相关文章!

--结束END--

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

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

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

猜你喜欢
  • C# 通过ServiceStack 操作Redis
    目录1.引用Nuget包 ServiceStack.Redis2. string 类型的使用作      &nb...
    99+
    2024-04-02
  • C# 怎么通过ServiceStack 操作Redis
    这篇文章主要介绍“C# 怎么通过ServiceStack 操作Redis”,在日常操作中,相信很多人在C# 怎么通过ServiceStack 操作Redis问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C# ...
    99+
    2023-06-14
  • c++通过ADO对数据库操作
    C/C++ 通过ADO对数据库操作实例:c++ 通过ADO调用存储过程写入数据到sql server1.在.h头文件导入微软提供的ado的动态库#pragma warning(disable:4146)#i...
    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 开发语言
  • 如何通过ibatis操作mysql
    本篇文章为大家展示了如何通过ibatis操作mysql,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。步骤如下:1,在eclipse中新建一个工程ibatisnew,...
    99+
    2024-04-02
  • python如何通过ElementTree操作XML
    这篇文章主要介绍“python如何通过ElementTree操作XML”,在日常操作中,相信很多人在python如何通过ElementTree操作XML问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”pytho...
    99+
    2023-07-02
  • Redis之通用的key操作命令
    场景 Centos中Redis的下载编译与安装(超详细): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103967334 Redis的启动和关闭(前台启动和...
    99+
    2018-10-30
    Redis之通用的key操作命令
  • C++LeetCode1775通过最少操作次数使数组和相等
    目录LeetCode1775.通过最少操作次数使数组的和相等方法一:贪心 + 计数AC代码C++LeetCode1775.通过最少操作次数使数组的和相等 力扣题目链接:leetco...
    99+
    2022-12-16
    C++ 最少操作数组和相等 C++ LeetCode题解
  • 如何通过phonegap操作数据库
    这篇文章主要介绍了如何通过phonegap操作数据库,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。实例如下:<!DOCTYPE&nbs...
    99+
    2024-04-02
  • Angular.JS如何通过指令操作DOM
    这篇文章给大家分享的是有关Angular.JS如何通过指令操作DOM的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在指令而非在控制器中操作DOM相信大家在页面处理中,难免会遇到操...
    99+
    2024-04-02
  • C/C++调用Fortran的DLL的操作过程
    目录【混合编程】C/C++调用Fortran的DLL一、Fortran操作1.1 Fortran代码1.2 Dll工程文件建立二、C / C++调用三、完整代码3.1 Fortran...
    99+
    2024-04-02
  • 如何利用C#通过sql语句操作Sqlserver数据库教程
    目录必要准备SQL语句编写加执行编写执行创建执行器ExecuteNonQuery()方式执行二者区别  ExecuteReader()方式执行实例:1-创建一张数...
    99+
    2022-11-13
    c# sql语句 c#操作sqlserver数据库 c# sqlserver
  • Java 操作Redis
    一、 使用Java操作Redis前,请先运行Redis服务与下载Redis驱动,以maven工程为例,引入如下jar  redis.clients jedis 2.9.0  创建测试类,验证是否成功连...
    99+
    2019-08-18
    Java 操作Redis
  • PHP操作Redis
    目录基本指令获取所有的key(keys)判断键对应值的类型(type)删除缓存项(del)设置有效期(expire,expireAt)获取有效期(ttl)检测缓存项是否存在(exists)查看当前数据库key的数量(dbSize)...
    99+
    2017-06-12
    PHP操作Redis
  • Python 操作Redis
    在 Python中我们使用 redis库来操作 Redis数据库。Redis数据库的使用命令这里就不介绍了。 需要安装 redis库。检查是否安装redis: pip redis 如果未安装,使...
    99+
    2023-09-16
    Python 操作Redis
  • Python操作redis
    Python操作redispythonredis数据库searchimport首先确保redis已经正常启动。安装   可以去pypi上找到redis的Python模块:   http://pypi.python.org/pypi%3Aac...
    99+
    2023-01-31
    操作 Python redis
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作