C# Redis学习笔记(三)-StackExchange.Redis
1.C#-SQLHelper(目录)_ADO.NET(关系型、非关系型、时序数据库)2.C#-SQLHelper(共通)_多数据库适配器(关系型数据库)3.C#-SQLHelper(一)_MSSQL4.C#-SQLHelper(二)_MySQL5.C#-SQLHelper(三)_Oracle6.C#-SQLHelper(四)_PostgreSQL7.C#-SQLHelper(五)_SQLite8.C#-SQLHelper(六)_DB29.C#-SQLHelper(七)_Access10.C#-SQLHelper(八)_Sybase
11.C# Redis学习笔记(三)-StackExchange.Redis
12.C#-NoSqlHelper(二)_MongoDB1、StackExchange.Redis基础操作帮助类
/**
*┌──────────────────────────────────────────────────────────────┐
*│ 描 述:Redis相关的工具类(Redis基础操作帮助类)
*│ 作 者:执笔小白
*│ 版 本:2.0
*│ 创建时间:2022-5-06 15:40:56
*└──────────────────────────────────────────────────────────────┘
*┌──────────────────────────────────────────────────────────────┐
*│ 命名空间: Util.NoSQLHelpers
*│ 类 名:RedisHelper
*└──────────────────────────────────────────────────────────────┘
*/
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Windows.Forms;
using Newtonsoft.Json;
using StackExchange.Redis;
namespace Util.NoSQLHelpers
{
/// <summary>
/// Redis基础操作帮助类
/// </summary>
public class RedisHelper
{
#region 变量
/// <summary>
/// 初始化链接
/// RedisConStr:127.0.0.1:6379,password=ZhibiXiaobai123.
/// </summary>
private static ConnectionMultiplexer _con; // = ConnectionMultiplexer.Connect("127.0.0.1:6379,password=ZhibiXiaobai123.");//此处写redis的账号和密码;
// private string _host= ConfigurationSettings.AppSettings["RedisConStr"].Trim();
#endregion 变量
#region 初始化
/// <summary>
/// 初始化数据库链接
/// </summary>
/// <param name="conStr">数据库连接字符串</param>
public static void Initial(string conStr)
{
_con = ConnectionMultiplexer.Connect(conStr); // 此处写redis的账号和密码
}
#endregion 初始化
#region String类型
/// <summary>
/// 查
/// </summary>
/// <param name="DataOrder">db的序号</param>
/// <param name="Key">Key名</param>
public static string GetStringValue_Redis(int DataOrder, string Key)
{
IDatabase db = _con.GetDatabase(DataOrder); // GetDatabase()括号中如果不填写数字就默认是0
return db.StringGet(Key); // 得到缓存
}
/// <summary>
/// 增
/// </summary>
/// <param name="DataOrder">db的序号</param>
/// <param name="Key">Key名</param>
/// <param name="Value">Key值</param>
/// <param name="expiry">过期时间</param>
/// <returns></returns>
public static bool AddStringValue_Redis(int DataOrder, string Key, string Value, TimeSpan? expiry = null)
{
IDatabase db = _con.GetDatabase(DataOrder); // GetDatabase()括号中如果不填写数字就默认是0
if (expiry != null)
{
return db.StringSet(Key, Value, expiry); // string类型存入缓存
}
else
{
return db.StringSet(Key, Value); // string类型存入缓存
}
}
/// <summary>
/// 增加多个值
/// </summary>
/// <param name="DataOrder">db的序号</param>
/// <param name="Key">Key名</param>
/// <param name="Values">多个Key值</param>
/// <returns></returns>
public static bool AddStringValues_Redis(int DataOrder, string Key, List<string> Values)
{
IDatabase db = _con.GetDatabase(DataOrder);
return db.StringSet(new KeyValuePair<RedisKey, RedisValue>[] { new KeyValuePair<RedisKey, RedisValue>(Key, JsonConvert.SerializeObject(Values)) }); // 写入缓存
}
// 修改(值)
/// <summary>
/// 删
/// </summary>
/// <param name="DataOrder">db的序号</param>
/// <param name="Key">Key名</param>
/// <returns></returns>
public static bool DelStringValue_Redis(int DataOrder, string Key)
{
IDatabase db = _con.GetDatabase(DataOrder); // GetDatabase()括号中如果不填写数字就默认是0
return db.KeyDelete(Key); // 删除缓存key的缓存
}
#endregion String类型
#region hash 哈希
/// <summary>
/// 查
/// </summary>
/// <param name="DataOrder">db的序号</param>
/// <param name="Key">Key</param>
/// <param name="FieId">HashKey</param>
/// <returns></returns>
public static string GetHashValue_Redis(int DataOrder, string Key, string FieId)
{
IDatabase database = _con.GetDatabase(DataOrder);
return database.HashGet(Key, FieId); // 得到缓存
}
/// <summary>
/// 获取Hash所有的值
/// </summary>
/// <param name="DataOrder">db的序号</param>
/// <param name="Key">Key</param>
/// <returns></returns>
public static List<string> GetAllHashValue_Redis(int DataOrder, string Key)
{
IDatabase database = _con.GetDatabase(DataOrder);
HashEntry[] hashEntries = database.HashGetAll(Key); // 得到缓存
return hashEntries.Select(x => x.ToString()).ToList();
}
/// <summary>
/// 增
/// </summary>
/// <param name="DataOrder">db的序号</param>
/// <param name="Key">Key</param>
/// <param name="FieId">HashKey</param>
/// <param name="Value">HashValue</param>
/// <returns></returns>
public static bool AddHashValue_Redis(int DataOrder, string Key, string FieId, string Value)
{
IDatabase database = _con.GetDatabase(DataOrder);
return database.HashSet(Key, FieId, Value); // 写入缓存
}
// 增加多个值
public static void AddHashValues_Redis(int DataOrder, string Key, Dictionary<string, string> FieIds)
{
IDatabase database = _con.GetDatabase(DataOrder);
HashEntry[] hashEntries = FieIds.Select(i => new HashEntry(i.Key, JsonConvert.SerializeObject(i.Value))).ToArray();
database.HashSet(Key, hashEntries);
//foreach (var bb in Listbb)
//{
// database.HashDelete("hashList", bb.Name);//删除缓存key下的缓存
//}
}
// 修改(值)
/// <summary>
/// 删除hashkey元素
/// </summary>
/// <param name="DataOrder">db的序号</param>
/// <param name="Key">key</param>
/// <param name="HashKey">HashKey</param>
/// <returns></returns>
public static bool DelHashKeyValue_Redis(int DataOrder, string Key, string HashKey)
{
IDatabase database = _con.GetDatabase(DataOrder);
return database.HashDelete(Key, HashKey);//删除(缓存key和键对应的缓存数据)
}
/// <summary>
/// 删除
/// </summary>
/// <param name="DataOrder">db的序号</param>
/// <param name="Key">key</param>
/// <param name="Value">Value</param>
/// <returns></returns>
public static bool DelHashValue_Redis(int DataOrder, string Key)
{
IDatabase database = _con.GetDatabase(DataOrder);
return database.KeyDelete(Key);//删除(缓存key和键对应的缓存数据)
}
#endregion hash 哈希
#region set 集合
/// <summary>
/// 查所有
/// </summary>
/// <param name="DataOrder">db的序号</param>
/// <param name="Key">Key名</param>
public static List<string> GetSetValue_Redis(int DataOrder, string Key)
{
IDatabase db = _con.GetDatabase(DataOrder); // GetDatabase()括号中如果不填写数字就默认是0
var rrs = db.SetMembers(Key);
return rrs.Select(x => x.ToString()).ToList();
}
/// <summary>
/// 增
/// </summary>
/// <param name="DataOrder">db的序号</param>
/// <param name="Key">Key</param>
/// <param name="Value">Value</param>
/// <returns></returns>
public static bool AddSetValue_Redis(int DataOrder, string Key, string Value)
{
IDatabase db = _con.GetDatabase(DataOrder); // GetDatabase()括号中如果不填写数字就默认是0
return db.SetAdd(Key, Value); // set类型存入缓存
}
/// <summary>
/// 增加多个
/// </summary>
/// <param name="DataOrder">db的序号</param>
/// <param name="Key">Key</param>
/// <param name="Values">Values</param>
/// <returns></returns>
public static long AddSetValues_Redis(int DataOrder, string Key, List<string> Values)
{
IDatabase db = _con.GetDatabase(DataOrder); // GetDatabase()括号中如果不填写数字就默认是0
return db.SetAdd(Key, Values.Select(i => new StackExchange.Redis.RedisValue(i)).ToArray());
}
// 修改(值)
/// <summary>
/// 删除SetKey
/// </summary>
/// <param name="DataOrder">db的序号</param>
/// <param name="Key">Key</param>
/// <param name="FeiId">SetKey</param>
/// <returns></returns>
public static bool DelSetKeyValue_Redis(int DataOrder, string Key, string Value)
{
IDatabase db = _con.GetDatabase(DataOrder); // GetDatabase()括号中如果不填写数字就默认是0
return db.SetRemove(Key, Value); // 删除(key和value对应的缓存数据)
}
/// <summary>
/// 删
/// </summary>
/// <param name="DataOrder">db的序号</param>
/// <param name="Key">Key</param>
/// <returns></returns>
public static bool DelSetValue_Redis(int DataOrder, string Key)
{
IDatabase db = _con.GetDatabase(DataOrder); // GetDatabase()括号中如果不填写数字就默认是0
return db.KeyDelete(Key); // 删除key对应的缓存数据
}
#endregion set 集合
#region zset 有序集合
/// <summary>
/// 查
/// </summary>
/// <param name="DataOrder">db的序号</param>
/// <param name="Key">Key</param>
public static List<ZsetValue> GetZSetValue_Redis(int DataOrder, string Key)
{
IDatabase db = _con.GetDatabase(DataOrder); // GetDatabase()括号中如果不填写数字就默认是0
var result = db.SortedSetScan(Key);
return result.Select(item => new ZsetValue() { Value = item.Element, Order = item.Score.ToString() }).ToList<ZsetValue>();
}
/// <summary>
/// 增
/// </summary>
/// <param name="DataOrder">db的序号</param>
/// <param name="Key">Key</param>
/// <param name="Value">Value</param>
/// <param name="Order">优先级</param>
/// <returns></returns>
public static bool AddZSetValue_Redis(int DataOrder, string Key, string Value, int Order)
{
IDatabase db = _con.GetDatabase(DataOrder); // GetDatabase()括号中如果不填写数字就默认是0
return db.SortedSetAdd(Key, Value, Order); //添加
}
// 修改(值)
/// <summary>
/// 删ZSetKey
/// </summary>
/// <param name="DataOrder"></param>
/// <param name="Key"></param>
/// <returns></returns>
public static bool DelZSetKeyValue_Redis(int DataOrder, string Key, string Value)
{
IDatabase db = _con.GetDatabase(DataOrder); // GetDatabase()括号中如果不填写数字就默认是0
return db.SortedSetRemove(Key, Value);//删除
}
// 删
public static bool DelZSetValue_Redis(int DataOrder, string Key)
{
IDatabase db = _con.GetDatabase(DataOrder); // GetDatabase()括号中如果不填写数字就默认是0
return db.KeyDelete(Key);//删除key对应的缓存数据
}
#endregion zset 有序集合
#region list 列表
/// <summary>
/// 查
/// </summary>
/// <param name="DataOrder">db的序号</param>
/// <param name="Key">Key名</param>
public static List<string> GetListValue_Redis(int DataOrder, string Key)
{
IDatabase db = _con.GetDatabase(DataOrder); // GetDatabase()括号中如果不填写数字就默认是0
var ss = db.ListRange(Key); // 得到缓存
return ss.Select(item => item.ToString()).ToList<string>();
}
/// <summary>
/// 增
/// </summary>
/// <param name="DataOrder">db的序号</param>
/// <param name="Key">Key</param>
/// <param name="Value">Value</param>
/// <param name="IsTop">是否从顶部</param>
/// <returns></returns>
public static long AddListValue_Redis(int DataOrder, string Key, string Value, bool IsTop = false)
{
IDatabase db = _con.GetDatabase(DataOrder); // GetDatabase()括号中如果不填写数字就默认是0
if (IsTop)
{
return db.ListLeftPush(Key, Value); // 底部插入
}
else
{
return db.ListRightPush(Key, Value); // 底部插入
}
}
// 修改(值)
/// <summary>
/// 从顶部或者底部删除
/// </summary>
/// <param name="DataOrder">db的序号</param>
/// <param name="Key">Key</param>
/// <param name="IsTop">是否从顶部</param>
/// <returns></returns>
public static string DelListKeyValue_Redis(int DataOrder, string Key, bool IsTop = false)
{
IDatabase db = _con.GetDatabase(DataOrder); // GetDatabase()括号中如果不填写数字就默认是0
if (IsTop)
{
return db.ListLeftPop(Key); // 底部插入
}
else
{
return db.ListRightPop(Key); // 底部插入
}
}
// 删
public static bool DelListValue_Redis(int DataOrder, string Key)
{
IDatabase db = _con.GetDatabase(DataOrder); // GetDatabase()括号中如果不填写数字就默认是0
return db.KeyDelete(Key);//删除key对应的缓存数据
}
#endregion list 列表
#region stream 不常用-略
#endregion stream
}
/// <summary>
/// Zset的查询类
/// </summary>
public class ZsetValue
{
public string Value { set; get; }
public string Order { set; get; }
}
}
2、链接字符串:
var conn = ConnectionMultiplexer.Connect("localhost:6379,password=...");
配置选项
ConfigurationOptions 包含大量的配置选项,一些常用的配置如下:
abortConnect : 当为true时,当没有可用的服务器时则不会创建一个连接
allowAdmin : 当为true时 ,可以使用一些被认为危险的命令
channelPrefix:所有pub/sub渠道的前缀
connectRetry :重试连接的次数
connectTimeout:超时时间
configChannel: Broadcast channel name for communicating configuration changes
defaultDatabase : 默认0到-1
keepAlive : 保存x秒的活动连接
name:ClientName
password:password
proxy:代理 比如 twemproxy
resolveDns : 指定dns解析
serviceName : Not currently implemented (intended for use with sentinel)
ssl={bool} : 使用sll加密
sslHost={string} : 强制服务器使用特定的ssl标识
syncTimeout={int} : 异步超时时间
tiebreaker={string}:Key to use for selecting a server in an ambiguous master scenario
version={string} : Redis version level (useful when the server does not make this available)
writeBuffer={int} : 输出缓存区的大小
各配置项用逗号分割
3、测试Demo
https://gitee.com/qq28069933146_admin/csharp_adonet_demo
本文来自博客园,作者:꧁执笔小白꧂,转载请注明原文链接:https://www.cnblogs.com/qq2806933146xiaobai/p/16211322.html
合集:
C#-SqlHelper
, 数据库-非关系型数据库
分类:
数据库-非关系数据库
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下