隐藏

C#实现对RedisJson的使用

发布:2022/12/22 10:39:00作者:管理员 来源:本站 浏览次数:362

RedisJSON是专门对Redis支持的一个模块,只有有这个模块才能使用,否则,就只有普通的redis的功能,如果要自己配置的话,可以参考官方文档,我这边直接基于RedisJSON的Docker开始。  

RedisJSON 是Redis的第三方拓展模块,它实现了JSON数据类型的支持,对JSON数据进行快速增、删、查改操作,比在MongoDB读写分别快了12.7和5.4倍,比在ElasticSearch读写分别快了500和200倍,是一个高性能的操作模块。


我看到这个噱头的时候,也很震惊,但是,一想,它是基于内存实现的,好像又见怪不怪了。


  


RedisJSON 安装


直接docker 一行命令


也可以去官网查看具体详情


https://hub.docker.com/r/redislabs/rejson


docker run -p 6379:6379 --name redis-redisjson -d  redislabs/rejson:latest



然后,服务就启动了。


简单的很


现在服务已经运行了。


以下是 Another Redis Desktop Manager 看到的信息


NReJSON 代码操作


安装Nuget包


Install-Package NReJSON -Version 4.0.0




具体的代码

实体类


   public class UserInfo

   {

       public int Age { get; set; }

       public string Name { get; set; }

       public DateTime Time { get; set; }

       public object Address { get; set; }

   }

   public class Address

   {

       public string Name { get; set; }

   }


 


测试代码


       static async Task Main(string[] args)

       {

           //创建redis对象

           var db = ConnectionMultiplexer.Connect("127.0.0.1").GetDatabase();

           var key = "test";

           string json = JsonConvert.SerializeObject(new UserInfo() { Age = 19, Name = "张三", Time = DateTime.Now, Address = new Address() { Name = "北京" } }, new JsonSerializerSettings() { DateFormatString = "yyyy-MM-dd HH:mm:ss" });

           OperationResult result = await db.JsonSetAsync(key, json);

           if (result.IsSuccess)

           {

               Console.WriteLine("json保存成功!");

           }

           RedisResult result2 = await db.JsonGetAsync(key, ".");

           if (!result2.IsNull)

           {

               Console.WriteLine($"获取成功:{result2}");

           }

           OperationResult result3 = await db.JsonSetAsync(key, JsonConvert.SerializeObject("成都"), ".Address.Name");

           OperationResult result4 = await db.JsonSetAsync(key, JsonConvert.SerializeObject("王五"), ".Name");

           if (result3.IsSuccess && result4.IsSuccess)

           {

               Console.WriteLine("json修改成功!");

           }

           RedisResult result5 = await db.JsonGetAsync(key, ".Name", ".Age", ".Time", ".Address.Name");

           if (!result5.IsNull)

           {

               Console.WriteLine($"获取成功:{result5}");

           }

           Console.WriteLine("redis json 测试!");

           Console.ReadLine();

       }


 


测试结果


可以看到可以通过指定json路径来进行查询相关的信息,也可以根据节点来设置相关的信息。


相对来讲还是很方便的。


有点mangodb的文档的概念,具体其他API大家可以多多尝试。


通过 Another Redis Desktop Manager 可以看到 具体存储的内容结构是啥子


总结


这个功能内存越大越好,如果内存不大,存储一些特殊结构的文档信息,还是很方便的,比如存储某些对象的影子信息。

代码地址


https://github.com/kesshei/RedisJsonDemo.git


https://gitee.com/kesshei/RedisJsonDemo.git