• C# Redis NReJSON 实现对RedisJson的使用,听说比ES快500倍


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

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

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

    RedisJSON 安装

    直接docker 一行命令

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

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

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

    然后,服务就启动了。

    简单的很

    现在服务已经运行了。

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

    NReJSON 代码操作

    安装Nuget包

    Install-Package NReJSON -Version 4.0.0
    
    • 1

    具体的代码

    实体类

        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; }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    测试代码

            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();
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    测试结果

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

    相对来讲还是很方便的。

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

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

    总结

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

    代码地址

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

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

    一键三连呦!,感谢大佬的支持,您的支持就是我的动力!

  • 相关阅读:
    spring自动装配servlet
    函数式编程:一等函数(First-class Function)
    postgres数据库报错无法写入文件 “base/pgsql_tmp/pgsql_tmp215574.97“: 设备上没有空间
    从零开始自学vue3笔记(一):搭建步骤
    【JVM】类加载子系统——自问自答
    cocos2d-x Android原生平台与Lua交互
    PhotoZoom 8全新版免费手机图片放大工具
    早餐与风景
    kail 搭建docker和vulhub漏洞环境
    Leetcode684. 冗余连接
  • 原文地址:https://blog.csdn.net/kesshei/article/details/125419339