C#封装常用的Redis工具类

1.请先安装CSRedisCore
在这里插入图片描述
接口:

namespace Tools.Redis
{public interface IRedisTool{bool SetLongValue(string key, string value);bool SetValue(string key, string value, int outSecond);bool SetValue(string key, string value);bool Exists(string key);bool UpdateValue(string key, string value);string? GetValue(string key);T? GetValue<T>(string key);T? GetEntity<T>(string key);List<T>? GetLike<T>(string key);void DeleteKey(string key);void DeleteLike(string key);}
}

实现接口方法

using CSRedis;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Tools.Redis
{public class RedisTool : IRedisTool{CSRedisClient csRedis;public RedisTool(string redisConfig){csRedis = new CSRedisClient(redisConfig);RedisHelper.Initialization(csRedis);}/// <summary>/// 设置长时间存在的值/// </summary>/// <param name="key"></param>/// <param name="value"></param>/// <returns></returns>public bool SetLongValue(string key, string value){try{csRedis.Set(key, value);return true;}catch (Exception ex){NLogHelper.Error("RedisDataHelper-SetValue" + ex.Message);return false;}}/// <summary>/// 设置值,并设置清除时间/// </summary>/// <param name="key"></param>/// <param name="value"></param>/// <param name="outSecond"></param>/// <returns></returns>public bool SetValue(string key, string value, int outSecond){try{csRedis.Set(key, value, outSecond);return true;}catch (Exception ex){NLogHelper.Error("RedisDataHelper-SetValue" + ex.Message);return false;}}/// <summary>/// 设置值,存在则覆盖,并沿用之前的清除时间/// </summary>/// <param name="key"></param>/// <param name="value"></param>/// <returns></returns>public bool SetValue(string key, string value){try{if (csRedis.Exists(key)){long time = csRedis.Ttl(key);csRedis.Set(key, value, Convert.ToInt32(time));}elsecsRedis.Set(key, value);return true;}catch (Exception ex){NLogHelper.Error($"RedisDataHelper-SetValue[{key}-{value}]" + ex.Message);return false;}}/// <summary>/// 是否存在key/// </summary>/// <param name="key"></param>/// <returns></returns>public bool Exists(string key){try{return csRedis.Exists(key);}catch (Exception ex){NLogHelper.Error("RedisDataHelper-KeyExists" + ex.Message);return false;}}/// <summary>/// 更新Key,把自动注销时间设置为原来的key的时间,不存在返回false/// </summary>/// <param name="key"></param>/// <param name="value"></param>/// <returns></returns>public bool UpdateValue(string key, string value){try{if (csRedis.Exists(key)){long time = csRedis.Ttl(key);csRedis.Set(key, value, Convert.ToInt32(time));return true;}return false;}catch (Exception ex){NLogHelper.Error($"RedisDataHelper-SetValue[{key}-{value}]" + ex.Message);return false;}}public string? GetValue(string key){try{return csRedis.Get(key);}catch (Exception ex){NLogHelper.Error($"RedisDataHelper-GetValue[{key}]" + ex.Message);return null;}}/// <summary>/// 获得json序列化后的/// </summary>/// <typeparam name="T"></typeparam>/// <param name="key"></param>/// <returns></returns>public T? GetValue<T>(string key){try{var data = csRedis.Get(key);return JsonConvert.DeserializeObject<T>(data);}catch (Exception ex){NLogHelper.Error($"RedisDataHelper-GetValue[{key}]" + ex.Message);return default;}}public T? GetEntity<T>(string key){try{var data = csRedis.Get(key);return JsonConvert.DeserializeObject<T>(data);}catch (Exception ex){NLogHelper.Error($"RedisDataHelper-GetList[{key}]" + ex.Message);return default;}}public List<T>? GetLike<T>(string key){try{var dataList = csRedis.Keys(key + "*");List<T> list = new List<T>();foreach (string item in dataList){var data = GetEntity<T>(item);if (data != null){list.Add(data);}}return list;}catch (Exception ex){NLogHelper.Error($"RedisDataHelper-GetList[{key}]" + ex.Message);return default;}}public void DeleteKey(string key){try{csRedis.Del(key);}catch (Exception ex){NLogHelper.Error($"RedisDataHelper-DeleteKey[{key}]" + ex.Message);}}public void DeleteLike(string key){try{var dataList = csRedis.Keys(key + "*");foreach (string item in dataList){DeleteKey(item);}}catch (Exception ex){NLogHelper.Error($"RedisDataHelper-DeleteLike[{key}]" + ex.Message);}}private bool AcquireLock(string lockKey, string lockValue, int lockTimeoutSeconds){// 尝试获取锁bool lockAcquired = csRedis.SetNx(lockKey, lockValue);// 如果成功获取锁,设置锁的超时时间if (lockAcquired){csRedis.Expire(lockKey, lockTimeoutSeconds);}return lockAcquired;}private void ReleaseLock(string lockKey, string lockValue){// 释放锁// 使用 Lua 脚本确保只有持有锁的客户端才能释放锁string luaScript = @"if redis.call('get', KEYS[1]) == ARGV[1] thenreturn redis.call('del', KEYS[1])elsereturn 0end";csRedis.Eval(luaScript, lockKey, new[] { lockValue });}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/720825.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业数字人虚拟形象定制解决方案

随着数字化浪潮的推进&#xff0c;虚拟形象在各个领域都展现出了强大的潜力&#xff0c;美摄科技作为业界领先的数字人虚拟形象定制解决方案提供商&#xff0c;致力于为企业打造独一无二的虚拟形象&#xff0c;助力企业在数字世界中塑造独特的品牌形象。 一、解决方案概览 美…

02-prometheus监控-服务器节点监控node-exporter

一、概述 prometheus&#xff0c;本身是一个【数据收集】和【数据处理】的工具&#xff0c;如果效果要监控一台服务器物理机&#xff0c;有两种方式&#xff0c;一种是在物理机上部署“node-export”来收集数据上报给prometheus&#xff0c;另一种是“自定义监控”&#xff1b;…

SqlServer 默认值约束示例

创建表&#xff0c;创建时指定 money 字段默认值为0.00&#xff1b; create table t_24 ( account varchar(19) not null, id_card char(18) not null, name varchar(20) not null, money decimal(16,2) default 0.00 not null ); 录入2条记录&#xff0c;money字…

HTML极速入门

HTML基础 什么是HTML HTML(Hyper Text Markup Language),超文本标记语言. 超文本:比文本更强大.通过链接和交互式方式来组织和呈现信息的文本形式.不仅仅有文本,还可能包括图片,音频,或者自己经审阅过它的学者所加的评注,补充或脚注等. 标记语言:由标签构成的语言 HTML的标…

es6 相关面试题

1 var, let ,const 区别&#xff1f; 2 手写将对象进行合并 手写合并对象 3 普通函数和箭头函数区别&#xff1f; 4 find 和 filter的区别&#xff1f; 5 some和every区别&#xff1f;

ES核心概念(45-48)(56-62)(101-103)

ES集群 ES集群&#xff08;Cluster&#xff09;包含多个节点&#xff08;服务器&#xff09;&#xff0c;整体提供服务 核心概念 索引Index&#xff1a;类似于mysql中的表 映射Mapping:数据的结构信息 文档&#xff1a;相当于表中的一条记录 分片&#xff1a; 将数据分成多片…

java 面试题总结

1锁粗化和锁消除&#xff0c;锁膨胀和锁升级的区别。 https://www.cnblogs.com/xuxinstyle/p/13387778.html .无锁 < 偏向锁 < 轻量级锁 < 重量级锁 &#xff0c;说的时候不要忘记说无锁状态 2.Map 的实现&#xff0c;线程安全的实现 1、ConcurrentHashMap在JDK 1.7…

第五套CCF信息学奥赛c++练习题 CSP-J认证初级组 中小学信奥赛入门组初赛考前模拟冲刺题(阅读程序题)

第五套中小学信息学奥赛CSP-J考前冲刺题 二、阅读程序题 (程序输入不超过数组或字符串定义的范围&#xff0c;判断题正确填√错误填X;除特殊说明外&#xff0c;判断题 1.5分&#xff0c;选择题3分&#xff0c;共计40分) 第一题 递归函数 1 #include<iostream> 2 usin…

主要用于工控主板、工业控制器、程序烧录下载器、仿真器、新能源充电桩等众多涉及RS232通讯的产品——D3232

一、应用领域 D3232芯片主要用于工控主板、工业控制器、程序烧录下载器、仿真器、新能源充电桩等众多涉及RS232通讯的产品。 二、基本特性 D3232芯片由两个线路驱动器、两个线路接收器和双电荷泵电路组成&#xff0c;具有HBM>15kV、CDM>2kV的ESD保护能力&#xff0c;并且…

NLP_文本张量表示方法_2(代码示例)

目标 了解什么是文本张量表示及其作用.文本张量表示的几种方法及其实现. 1 文本张量表示 将一段文本使用张量进行表示&#xff0c;其中一般将词汇为表示成向量&#xff0c;称作词向量&#xff0c;再由各个词向量按顺序组成矩阵形成文本表示. ["人生", "该&q…

【力扣 - 盛最多水的容器】

题目描述 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你不能倾斜容…

【源码】imx6ull实现触摸屏单点实验-移植tslib和qt

一、本实验实验的器材&#xff1a; 1.正点原子imx6ull的阿尔法开发板v2.2 2.屏幕ALIENTEK 4.3 RGBLCD 二、实验已经移植好的文件&#xff1a; 仓库代码&#xff1a;https://gitee.com/wangyoujie11/atkboard_-linux_-driver.git 1.文件说明 arm-qt.tar.bz2&#xff1a;移植好的…

笔记本电脑里回收站删除的文件怎么找回来?这几招帮你恢复

在日常使用笔记本电脑的过程中&#xff0c;我们可能会因为不小心或者误操作&#xff0c;将一些重要的文件删除到回收站&#xff0c;甚至可能直接从回收站中清空。面对这种情况&#xff0c;很多人会感到惊慌失措&#xff0c;不知道如何是好。但其实&#xff0c;即使文件从回收站…

TQ15EG开发板教程:创建运行petalinux2019.1

工程网盘链接&#xff1a;https://pan.baidu.com/s/1vFRpzmbifXt7GypU9aKjeg 提取码&#xff1a;0ylh 首先需要使用与petalinux相同版本的vivado创建工程&#xff0c;与之前不同的是在创建硬件设计时需要勾选上添加bit文件&#xff0c;所以要在生成bit文件之后再创建硬件设计…

如何搭建Nacos集群

1.搭建Nacos集群 众所周知&#xff0c;在实际的工作中&#xff0c;Nacos的生成环境下一定要部署为集群状态 其中包含3个nacos节点&#xff0c;然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。 我们计划的集群结构&#xff1a; 我就直接在本机上开三个Nacos来搭…

Spring(22) Spring中的9种设计模式

目录 一、简单工厂模式&#xff08;Simple Factory&#xff09;二、工厂方法模式&#xff08;Factory Method&#xff09;三、单例模式&#xff08;Singleton&#xff09;四、适配器模式&#xff08;Adapter&#xff09;五、代理模式&#xff08;Proxy&#xff09;七、观察者模…

凌特杯,第二届,数字音频传输。simulink matlab

终于比赛进入了尾声&#xff0c;最为指导老师也是非常的激动。接下来进入了论文写作阶段和视频拍摄阶段。 第二届凌特杯规定的硬件是ADI的Pluto&#xff0c;成本在2k以内&#xff0c;能支持MATLAB&#xff0c;它能够流畅的实时播放接收到的音乐数据&#xff0c;并把数据保存成…

家居EDI:La-Z-Boy EDI 项目案例

家居行业市场规模庞大&#xff0c;总规模稳定增长。随着信息技术的发展以及全球化进程的加快&#xff0c;许多家居行业的老牌企业在全球范围内广泛扩展其供应链体系&#xff0c;产业链较长&#xff0c;从原材料生产供应、生产制造到销售运输&#xff0c;如何高效、准确地处理这…

CH582F核心板入门:RGB灯点亮与蓝牙上报功能实战

文章目录 一、前言二、硬件1.原理图2.实物图3.实物连接图 三、软件1.初始化2.显示部分3.输出部分&#xff08;打印和蓝牙上报&#xff09;4.结果4.1 打印结果4.2 蓝牙上报4.2.1 打开手机蓝牙调试助手&#xff0c;找到ble_test_XXXX4.2.2 点击CONNECT4.2.3 找到Unknown Service服…

STM32(15)USART编程

使用USART实现STM32与电脑之间的通信 中介&#xff1a;USB转TTL模块 闭合总开关&#xff0c;外部时钟才会传输到分频器 c8t6手册里面写了&#xff0c;usart最大支持4.5MHz&#xff0c;所以选10 重映射时记得开启AFIO的时钟