Garnet技术实战测试开发:像使用Redis一样使用Garnet

一、Garnet简介

最近一段时间,看到非常多的文章描述和转发Garnet项目,比如说:

  1. .NET的集群Redis实现版本: Garnet – 一种开源、下一代 …
  2. Garnet发布 Redis不再是唯一选择 - Setli - 博客园
  3. Garnet: 力压Redis的C#高性能分布式存储数据库 - InCerry …
  4. 蓝点网:微软研究院开源Garnet缓存系统 具有高吞吐量低延迟可扩展等特点
  5. 系统极客:Microsoft 开源 Garnet:新一代远程缓存系统
  6. IT之家: 3 月 20 日消息,微软近日推出了名为 Garnet 的全新缓存存储系统
  7. MSDN:微软推出 Garnet 缓存存储系统:高吞吐量、低延迟、可扩展
  8. 新浪科技:微软开源性能遥遥领先的Garnet!开抢年入上亿美元Redis饭碗
  9. QQ新闻:微软发布开源缓存存储系统Garnet,提升大数据处理性能
  10. 中关村在线:微软开源Garnet缓存系统:性能超高

关于Garnet详细介绍,我这里就不在赘述了。
在这里插入图片描述
根据其官网的信息,我们来进行实战测试。
开源仓库地址:https://github.com/microsoft/garnet
文档地址:https://microsoft.github.io/garnet/

二、部署Garnet Server

1、从GitHub仓库中Clone仓库到本地,然后编译构建项目。
在这里插入图片描述
本地编译无任何异常后,启用docker安装
2、查看docker-compose.yml和dockerfile文件内容

version: '3.4'

services:
  garnet:
    restart: always
    image: garnet
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "3278:3278"
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /source

# Copy files
COPY . .
RUN dotnet restore
RUN dotnet build -c Release

# Copy and publish app and libraries
WORKDIR /source/main/GarnetServer
RUN dotnet publish -c Release -o /app --self-contained false -f net8.0

# Final stage/image
FROM mcr.microsoft.com/dotnet/runtime:8.0
WORKDIR /app
COPY --from=build /app .

# Run GarnetServer with an index size of 128MB
ENTRYPOINT ["/app/GarnetServer", "-i", "128m"]

3、通过docker指令安装&成功启动

docker-compose up

在这里插入图片描述
4、Image安装成功
查看Images
在这里插入图片描述
查看Containers
在这里插入图片描述

三、测试连接到Garnet

Garnet默认端口为3278。因为Garnet使用Redis的RESP协议作为其主要通信协议,因此可以使用大多数编程语言中现成的Redis客户端。这里我就使用常规的工具。
1、测试连接
在这里插入图片描述
2、测试写入键值对
在这里插入图片描述

四、C#开发连接Garnet

1、新建GarnetApp项目

dotnet new console -n "GarnetApp"

2、引入StackExchange.Redis库
在这里插入图片描述3、编写测试代码

using StackExchange.Redis;

namespace GarnetApp
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string garnetConnectionString = "localhost:3278"; // garnet 服务器地址

            // 建立连接
            ConnectionMultiplexer connection = ConnectionMultiplexer.Connect(garnetConnectionString);
            IDatabase garnet = connection.GetDatabase();

            // 写入数据
            garnet.StringSet("myKey", "Hello, Grant!");

            // 读取数据myKey
            string value = garnet.StringGet("myKey");
            Console.WriteLine(value);

            // 读取数据key01
            string value01 = garnet.StringGet("key01");
            Console.WriteLine(value01);

            connection.Close();

            Console.ReadKey();
        }
    }
}

4、运行查看测试结果
在这里插入图片描述

五、编写其他测试代码

1、将 C# 对象序列化为 JSON 或其他格式,并存储到 Garnet中,以及从 Garnet 中取出并反序列化对象。

private static void TestObject(IDatabase garnet)
{
    // 定义一个示例对象
    var person = new { Name = "Alice", Age = 30 };

    // 将对象序列化为 JSON
    string json = JsonConvert.SerializeObject(person);

    // 存储 JSON 数据到 garnet
    garnet.StringSet("person:1", json);

    // 从 garnet 中获取 JSON 数据
    string jsonFromgarnet = garnet.StringGet("person:1");

    // 将 JSON 数据反序列化为对象
    var personFromgarnet = JsonConvert.DeserializeObject<Person>(jsonFromgarnet);

    // 输出反序列化后的对象属性
    Console.WriteLine($"Name: {personFromgarnet.Name}, Age: {personFromgarnet.Age}");
}

在这里插入图片描述
2、常用的数据结构
列表(List):使用 Garnet 的列表数据结构实现消息队列或者简单的日志记录功能。

string garnetConnectionString = "localhost:3278"; // garnet 服务器地址
// 建立连接
ConnectionMultiplexer connection = ConnectionMultiplexer.Connect(garnetConnectionString);
IDatabase garnet = connection.GetDatabase();
// 向列表中推入消息
for (int i = 1; i <= 5; i++)
{
    garnet.ListLeftPush("message_queue", $"Message {i}");
}
// 从列表中弹出消息
string message = garnet.ListRightPop("message_queue");
Console.WriteLine("Popped message: " + message);
connection.Close();

在这里插入图片描述

六、关于Garnet Server的配置项

默认配置下内容如下:
在这里插入图片描述
官网解释基本用法:
Garnet 服务器(GarnetServer.exe)可以使用配置文件进行配置(例如,garnet.conf、redis.conf、defaults.conf),同时命令行参数可用于覆盖文件中指定的任何设置。未在配置文件或命令行参数中指定的任何设置将被设置为文件中指定的默认值(可以通过命令行参数覆盖此文件的路径)。

Garnet 目前支持两种配置文件格式:

  • garnet.conf 文件格式(默认)- 一组以 JSON 格式排列的设置
  • redis.conf 文件格式 - 以 Redis 配置文件格式排列的设置:
    keyword argument1 argument2 argument3 … argumentN

请参阅 Redis 文档以获取参考信息。重要提示:并非所有 redis.conf 关键字都受到 Garnet 的支持。为了实现完整的配置设置覆盖,请使用 garnet.conf 格式。

通过命令行参数可以指定配置文件路径(和默认文件路径)。

对于 garnet.conf:

GarnetServer.exe --config-import-path <file-path>

对于 redis.conf:

GarnetServer.exe --config-import-path <file-path> --config-import-format RedisConf

注意:要更改默认配置文件的路径(和/或格式),分别使用 config-default-import-path 和 config-default-import-format 关键字。

七、总结

本文关于如何使用Garnet 作为Server,以及使用大多数编程语言中现成的Redis客户端连接和使用StackExchange.Redis库连接,进行简单的测试和使用。如果本文对你有任何帮助,我将非常荣幸。

如果你喜欢我的文章,谢谢三连:关注、点赞、分享吧!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/485513.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电子电器架构 —— 诊断数据DTC具体故障篇

电子电器架构 —— 诊断数据DTC起始篇 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师 (Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶,喝完再挣扎…

计算机组成原理 CPU组成与机器指令执行实验

一、实验目的 (1)将微程序控制器同执行部件( 整个数据通路)联机&#xff0c;组成一台模型计算机; (2)用微程序控制器控制模型机数据通路; (3)通过CPU运行九条机器指令(排除中断指令)组成的简单程序&#xff0c;掌握机器指令与微指令的关系&#xff0c;牢固建立计算机的整机概…

C#绘制面形图

创建windows窗体应用 ,从工具箱添加Button和Panel using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Fo…

[激光原理与应用-77]:基于激光器加工板卡的二次开发软件的系统软硬件架构

目录 一、1个板卡、1个激光器、1个振镜的应用架构、1个工位 &#xff08;1&#xff09;PLC &#xff08;2&#xff09;MES &#xff08;3&#xff09;加工板卡 &#xff08;4&#xff09;激光加工板卡与激光器之间的转接卡 &#xff08;5&#xff09;DB25、DB15 &#x…

力扣面试150 x 的平方根 二分 换底法 牛顿迭代法 一题多解

Problem: 69. x 的平方根 思路 &#x1f468;‍&#x1f3eb; 参考题解 &#x1f496; 袖珍计算器算法 class Solution {public int mySqrt(int x){if (x 0)return 0; // Math.exp(3)&#xff1a;e的三次方int ans (int) Math.exp(0.5 * Math.log(x));return (long) (an…

Java面试题总结200道(四)

76、ApplicationContext 通常的实现是什么? FileSystemXmlApplicationContext &#xff1a;此容器从一个 XML 文件中加 载 beans 的定义&#xff0c;XML Bean 配置文件的全路径名必须提供给它的构造函数。ClassPathXmlApplicationContext&#xff1a;此容器也从一个 XML 文件…

Qt程序可执行文件打包

目录 一、新建一个目录二、命令行2.1 添加临时变量2.2 打包命令 三、添加动态库四、普通 Qt 项目打包 Qml 项目打包 笔者写的python程序打包地址&#xff08;https://blog.csdn.net/qq_43700779/article/details/136994813&#xff09; 一、新建一个目录 新目录(例如test)用以…

C语言自定义类型联合体和枚举

union n.工会&#xff1b;联邦&#xff0c;联盟&#xff1b;协会&#xff0c;俱乐部&#xff1b;联合&#xff0c;合并&#xff1b; 结婚&#xff0c;婚姻&#xff1b;美利坚合众国&#xff08;the Union&#xff09;&#xff1b; &#xff08;数&#xff09;并&#xff0c;并集…

Request请求参数----中文乱码问题

一: GET POST获取请求参数: 在处理为什么会出现中文乱码的情况之前, 首先我们要直到GET 以及 POST两种获取请求参数的不同 1>POST POST获取请求参数是通过输入流getReader来进行获取的, 通过字符输入流来获取响应的请求参数, 并且在解码的时候, 默认的情况是 ISO_885…

【MySQL】InnoDB引擎

逻辑结构 InnoDB存储引擎逻辑结构如图所示&#xff1a; Tablespace&#xff1a;表空间&#xff0c;一个数据库可以对应多个表空间。数据库中的每张表都有一个表空间&#xff0c;用来存放表记录、索引等数据。 Segment&#xff1a;段&#xff0c;表空间中有多个段&#xff0c…

通过dbeaver链接dm8数据库

一、环境说明 windows 11 vmware 17 ubuntu 22 tt:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.3 LTS Release: 22.04 Codename: jammytt:~$ docker info Client:Version: 24.0.5Context: d…

【Web】NKCTF 2024 个人wp(部分)

目录 my first cms 全世界最简单的CTF attack_tacooooo 属实太菜了&#xff0c;3/4 my first cms 一眼搜版本2.2.19 CVE -CVE-2024-27622 GitHub - capture0x/CMSMadeSimple 访问/admin/login.php 爆出弱口令&#xff0c;后台登录 admin Admin123 Extensions > User D…

华为OD机试 - 打印任务排序 - 队列(Java 2024 C卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出3、说明 四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&a…

io流的学习4

字符缓冲流 原理&#xff1a;底层自带了长度为8192的缓冲区提高性能。 import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException;public class BufferedStringdemo01 {public static void main(String…

Springboot实现合并单元格的excel文件导入到数据库(多模块)

最近做项目的时候一直在遇到excel导入导出的问题&#xff0c;本篇博文也是为了记录我这几天的血泪史&#xff0c;并做以记录&#xff0c;希望各位看完之后能有所收获。 以下是我excel文档里面的具体内容&#xff1a; excel文件中的编码信息属于另外一张表&#xff0c;所以以下…

基于VS code 实现Java前后端打通—基础—使用Springboot+postgreSql+mybatis+Navicat

前言&#xff1a; 作者学习webjava后的而总结&#xff0c;总的流程概括就是先使用springboot创建项目&#xff0c;在application.properties中完成相应的postgreSql和mybaits的环境配置和.xml文件中dependecy依赖配置&#xff0c;entities实现数据表的类型模板&#xff0c;分别…

【机器学习】包裹式特征选择之序列前向选择法

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…

php 快速入门(一)

一、配置系统环境 1.1 安装软件 1、安装php的开发软件&#xff1a;phpstorm 在这个软件中写代码 2、安装php的运行软件&#xff1a;phpstduy 写好的php程序需要放到phpstduy中&#xff0c;用户才能访问和测试 安装过程注意事项&#xff1a;安装的路径中不能有空格和中文字符&…

day6:STM32MP157——串口通信实验

使用的是cortex A7内核 【串口通信的工作原理】 本次实验使用的是uart4的串口&#xff0c;分别使用了uart4_tx和uart4_rx两个引脚。根据板子的原理图我们可以知道&#xff0c;他们分别对应着芯片的PG11和PB2 从引脚名字也可以知道使用了GPIO口&#xff0c;所以本次实验同样需…

MCGS学习——用户管理

用户管理介绍 用户管理主要是为了实现触摸屏的安全操作&#xff0c;工业过程控制中&#xff0c;应该尽量避免由于人为的误操作所引发的故障或事故&#xff0c;而某些失误带来的后果是致命的&#xff1b;通过用户管理严格限制各类操作的权限&#xff0c;使不具备操作资格的人员…