首页 > 数据库 >.NET Core C#系列之XiaoFeng.Redis组件库础操作篇教程

.NET Core C#系列之XiaoFeng.Redis组件库础操作篇教程

时间:2022-10-20 20:45:10浏览次数:85  
标签:Core XiaoFeng C# List await redis key var Redis

XiaoFeng.Redis组件库拥有丰富的API和巅峰之作的性能,下面我就先以基础的操作做如下讲解,循序渐进,慢慢提升。欢迎关注xiaofeng组件库,开源不易,多多支持。

开源地址:https://github.com/zhuovi/XiaoFeng

语雀地址:https://www.yuque.com/fayelf/xiaofeng

XiaoFengRedis缓存之基础操作篇

Redis有5种数据类型:

1、String(字符串)

可以为整形、浮点型和字符串。

它是最基本的类型,可以理解为Memcached一模一样的类型,一个key对应一个value。

注意:一个键最大能存储 512MB。

特性:可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512M

2、Hash(哈希)

Redis hash 是一个键值(key=>value)对集合。

Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。

注意:每个 hash 可以存储 232 -1 键值对(40多亿),hash的key必须是唯一的。

特性:适合存储对象,并且可以像数据库中update一个属性一样只修改某一项属性值(Memcached中需要取出整个字符串反序列化成对象修改完再序列化存回去)

3、List(列表)

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

注意:列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。

特性:增删快,提供了操作某一段元素的API

4、Set(集合)

Redis 的 Set 是 string 类型的无序集合。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

注意:以上实例中 rabbitmq 添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。

集合中最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)。

特性:

1、添加、删除,查找的复杂度都是O(1)

2、为集合提供了求交集、并集、差集等操作

5、Sorted set:有序集合

Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

zset的成员是唯一的,但分数(score)却可以重复。

特性:数据插入集合时,已经进行天然排序

注意:Redis支持多个数据库,并且每个数据库的数据是隔离的不能共享,并且基于单机才有,如果是集群就没有数据库的概念。

Redis是一个字典结构的存储服务器,而实际上一个Redis实例提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中。这与我们熟知的在一个关系数据库实例中可以创建多个数据库类似,所以可以将其中的每个字典都理解成一个独立的数据库。

接下来我们进入XiaoFeng.Redis使用介绍

首先我们先介绍一下Redis连接串

string redis="redis://[email protected]:6379/0?ConnectionTimeout=3000&ReadTimeout=3000&SendTimeout=3000&pool=3"

7092734 ---- 密码

127.0.0.1 ---- 主机

6379 ---- 端口

0 ---- 0库

ConnectionTimeout 连接超时时长

ReadTimeout 读取数据超时时长

SendTimeout 发送数据超时时长

pool 连接池中连接数量

最小的连接串是:redis://127.0.0.1

接下来我们进入代码时刻

友情提示,以下所有的方法都有同步和异步方法,下边只演示异步方法。

首先实例化一个redis对象

var redis = new XiaoFeng.Redis.RedisClient("redis://[email protected]:6379/0");

1.KEY操作

删除key方法

/// <summary>
/// 删除key 异步
/// </summary>
/// <param name="dbNum">库索引</param>
/// <param name="keys">key集合</param>
/// <returns>删除成功的数量</returns>
async Task<int> DelKeyAsync(int? dbNum, params string[] keys);
/// <summary>
/// 删除key 异步
/// </summary>
/// <param name="keys">key集合</param>
/// <returns>删除成功的数量</returns>
async Task<int> DelKeyAsync(params string[] keys);
/// <summary>
/// 获取key值 并删除 6.2.0后可用 异步
/// </summary>
/// <param name="key">key</param>
/// <param name="dbNum">库索引</param>
/// <returns>删除key的值</returns>
async Task<string> GetDelKeyAsync(string key, int? dbNum = null);

删除key实例

//删除连接串中默认库中 key为 a,b的key
var r1 = await redis.DelKeyAsync("a", "b");
//删除1库中key为 a,b的key
var r2 = await redis.DelKeyAsync(1, "a", "b");
//删除0库中key为a,并返回a的值
var r3 = await redis.GetDelKeyAsync("a", 0);

下边是KEY的基本操作

//序列化key
var r4 = await redis.DumpKeyAsync("a");
//是否存在key
var r5 = await redis.ExistsKeyAsync("a");
//设置过期时间 秒
var r6 = await redis.SetKeyExpireSecondsAsync("a", 100);
//设置过期时间 毫秒
var r7 = await redis.SetKeyExpireMillisecondsAsync("a", 100000);
//设置过期时长    时间戳     秒
var r8 = await redis.SetKeyExpireSecondsTimestampAsync("a", 123456);
//设置过期时长    时间戳     毫秒
var r9 = await redis.SetKeyExpireMillisecondsTimestampAsync("a", 123456);
//重命名key a 到 b
var r10 = await redis.RenameKeyAsync("a", "b");
//重命名key a 到 b 并且b不存在
var r11 = await redis.RenameKeyNoExistsAsync("a", "b");
//移动key 从库 0 至 库 1
var r12 = await redis.MoveKeyAsync("a", 1, 0);
//移除过期时间
var r13 = await redis.RemoveKeyExpireAsync("a");
//获取剩余时间    秒
var r14 = await redis.GetKeyExpireSecondsAsync("a");
//获取剩余时间    毫秒
var r15 = await redis.GetKeyExpireMillisecondsAsync("a");
//从当前数据库随机获取一个key
var r16 = await redis.GetKeyRandomAsync(0);
//获取key值 类型
var r17 = await redis.GetKeyTypeAsync("a");
//复制一个key
var r18 = await redis.CopyKeyAsync("a", "b");
//查找 key 支持 * 和? * 代表好多个字符  ?代表一个字符
var r19 = await redis.GetKeysAsync("*a");
//获取当前库 key 的数量
var r20 = await redis.GetDbKeySizeAsync();
//查询当前库中符合模式的key
var r21 = await redis.GetKeysAsync("*a");
//获取key为a的值类型
var r22 = await redis.GetKeyTypeAsync("a");
//删除当前库key为a b的数据
var r23 = await redis.DelKeyAsync("a", "b");
//删除当前库所有key
var r24 = await redis.DelDbKeysAsync();
//删除所有库的所有key
var r25 = await redis.DelAllKeysAsync();

2.字符串类型操作

直接上实例

//设置key a 的值 为 "abc"
var s1 = await redis.SetStringAsync("a", "abc");
//批量设置 key 和 值
var s2 = await redis.SetStringAsync(new Dictionary<string, object>
{
    { "a","abc" },
    { "b",DateTime.Now },
    { "c",11110 },
    { "d",123.23 },
    { "e",Guid.NewGuid() },
    { "f",new List<string>{"a","b","c","d"} }
    });
//设置key a 的 值 为 b 并且 a不存在时才成功
var s3 = await redis.SetStringNoExistsAsync("a", "b");
//获取key a ,b 的值
var s4 = await redis.GetStringAsync("a", "b");
//获取key a 的值 的长度
var s5 = await redis.GetStringLengthAsync("a");
//设置 key a 的值 为 111 并返回 原来的值
var s6 = await redis.GetSetStringAsync("a", 111);
//自动加1
var s7 = await redis.StringIncrementAsync("a");
//自动减1
var s8 = await redis.StringDecrementAsync("a");

3.Hash操作

直接上实例

//设置hash key为a 字段名为 b 值为 c
var h1 = await redis.SetHashAsync("a", "b", "c");
//批量设置has key为a
var h2 = await redis.SetHashAsync("a", new Dictionary<string, object>
{
    { "a","abc" },
    { "b",DateTime.Now },
    { "c",11110 },
    { "d",123.23 },
    { "e",Guid.NewGuid() },
    { "f",new List<string>{"a","b","c","d"} }
});
//设置hash key 为a 字段名为b 值为 c 只有字段名b不存在时才设置成功
var h3 = await redis.SetHashNoExistsAsync("a", "b", "c");
//删除hash key 为 a 中的字段名为 "b","c"的键值
var h4 = await redis.DelHashAsync("a", "b", "c");
//查询hash key 为 a 中的字段为 "b" 是否存在
var h5 = await redis.ExistsHashAsync("a", "b");
//设置hash key 为 a 中的字段为 "b" 的值增加2 如果减则输入负数即可
var h6 = await redis.HashIncrementAsync("a", "b", 2);

4.List操作

直接上实例

//设置List key 为 a  值为 "b","c","d"
var l1 = await redis.SetListItemAsync("a", "b", "c", "d");
//设置List key 为 a 索引为2 的值 为 111
var l2 = await redis.SetListItemAsync("a", 2, 111);
//在List Key 为 a 的最前边加入 "b","c","d"值
var l3 = await redis.SetListItemBeforeAsync("a", "b", "c", "d");
//将111插入到已存在key 为a的List中最前边 不存在则不插入
var l4 = await redis.SetListItemBeforeExistsAsync("a", 111);
//将"c"插入到已存在key 为a的List中最后边 不存在则不插入
var l5 = await redis.SetListItemExistsAsync("a", "c");
//从 List key为a中从头到尾搜索3个值为"c"的数据 然后移除 如果想从尾到头搜索则变成负数即可 如 -3
var l6 = await redis.DelListItemAsync("a", "c", 3);
//从 List key为a中移除索引从2到5的数据
var l7 = await redis.DelListItemAsync("a", 2, 5);
//获取List中key为a的值数量
var l8 = await redis.GetListCountAsync("a");
//移出并获取列表的第一个元素
var l9 = await redis.GetListFirstItemAsync("a");
//通过索引获取列表中的元素
var l10 = await redis.GetListItemAsync("a", 2);
//获取List中key为a的 索引从2到5的值
var l11 = await redis.GetListItemsAsync("a", 2, 5);
//List 从key为a的尾部取出数据并插入到key为b的头部
var l12 = await redis.GetListLastItemToOtherListFirstAsync("a", "b");

5.Set操作

直接上实例

//向Set中key为"a"的插入"b","c"成员
var set1 = await redis.SetSetMemberAsync("a", "b", "c");
//获取Set中key为a的值数量
var set2 = await redis.GetSetCountAsync("a");
//获取List中key 为a和b 值的差集
var set3 = await redis.GetSetDiffAsync("a", "b");
//获取List中key 为a和b 值的差集 并把差集存到key为c中
var set4 = await redis.GetSetDiffStoreAsync("a", "c", "b");
//获取List中key 为a和b 值的交集
var set5 = await redis.GetSetInterAsync("a", "b");
//获取List中key 为a和b 值的交集 并把差集存到key为c中
var set6 = await redis.GetSetInterStoreAsync("a", "c", "b");
//获取Set中 key为a的所有成员
var set7 = await redis.GetSetMemberListAsync("a");
//移除并返回集合中的一个或多个随机元素
var set8 =await redis.GetSetPopAsync("a");
//获取集合中一个或多个随机数
var set9 = await redis.GetSetRandomMemberAsync("a");
//删除集合中的b c 成员
var set10 = await redis.DelSetMemberAsync("a", "b", "c");
//判断成员b是否是a集合的成员
var set11 = await redis.ExistsSetMemberAsync("a", "b");
//获取集合 a b的并集
var set12 = await redis.GetSetUnionAsync("a", "b");
//获取集合 a b的并集 并存到集合c中
var set13 = await redis.GetSetUnionStoreAsync("a", "c", "b");

6.Sorted Set操作

Sorted Set api和Set api基本差不多,在这里就不再列举实例,有兴趣的朋友可以自己动手查看。

标签:Core,XiaoFeng,C#,List,await,redis,key,var,Redis
From: https://www.cnblogs.com/zhaocici/p/16811213.html

相关文章

  • 前端图形:SVG与Canvas
    00、前端图形前端代码实现图形的几种方式:CSS、SVG、Canvas(主要是JavaScript编码)CSS也是可以画图的,需要借助于高宽、边框border、clip-path裁剪、渐变色背景等属性来模拟......
  • Hyperf使用ElasticSearch记录
    Hyperf安装Elasticsearch协程客户端hyperf/elasticsearch主要为elasticsearch-php进行了客户端对象创建的工厂类封装,elasticsearch-php默认使用GuzzleRing客户......
  • 验证码 CAPTCHA 的来历
    全自动区分计算机和人类的公开​​图灵测试​​​(英语:Completely Automated Public Turingtesttotell Computersand Humans Apart,简称CAPTCHA),俗称验证码,是一种区......
  • (九)MySQL基础知识之 事务(commit, rollback,begin,set autocommit)
    昨天说了下MySQL的正则表达式,今天我们来说下事务的基础知识。 什么是MySQL的事务呢? 事务是由一步或几步数据库操作序列组成逻辑执行单元,这一系列操作要么全部执行,要么全......
  • 雪碧图CSS Sprite
    CSSSprite也叫CSS精灵图,或者CSS雪碧图,是一种网页图片应用处理方式。它允许你讲一个页面涉及到的所有的小图标(或其他图)包含到一张大图。当前的问题虽然每个小图标或者小图片......
  • P4158 [SCOI2009]粉刷匠
    题意:windy有N条木板需要被粉刷。每条木板被分为M个格子。每个格子要被刷成红色或蓝色。windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色。每个格......
  • 【EC-VT】OpenHarmony啃论文俱乐部——虚拟化技术的前世今生
    大家好!我是复旦大学CodeWisdom实验室的同学,在OpenHarmony成长计划啃论文俱乐部里,与华为、软通动力、润和软件、拓维信息、深开鸿等公司一起,学习和研究内核、边缘计算和虚拟......
  • 【C语言】结构体基础应用
    ......
  • 【Azure Spring Cloud】Spring Cloud Azure 4.0 调用Key Vault遇见认证错误 AADSTS900
    问题描述SpringCloudAzure4.0调用KeyVault的代码中,没有找到设置 authority-host的配置项,导致认证出现错误Causedby:com.microsoft.aad.msal4j.MsalServiceExc......
  • react-项目结构
    react环境搭建1.安装安装nodejs()。2.安装npm或者yarn或cnpm()。3.安装react脚手架create-react-app:npminstall-gcreate-react-app或cnpminstall-gcreate-re......