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));
}
else
csredis.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] then
return redis.call('del', keys[1])
else
return 0
end";
csredis.eval(luascript, lockkey, new[] { lockvalue });
}
}
}
以上就是c#实现封装常用redis工具类的示例代码的详细内容,更多关于c#封装常用redis的资料请关注代码网其它相关文章!
发表评论