資料庫升級PostgreSql+Garnet

来源:https://www.cnblogs.com/gclove2000/p/18165679
-Advertisement-
Play Games

目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...


目錄

前言

我公司用的是sql server 2008的破解版,但是現在畢竟是2024年了,打算上最新最強的免費資料庫。而且我公司的項目連redis都沒用過,我打算測試一下緩存資料庫。
網路資料庫和緩存資料庫瞭解了一下,打算選擇PostgreSql和granet。這兩個的特點是,開源,而且性能極強。基本大部分項目都夠用了。

PostgreSql

安裝

PostgreSql官網地址:https://www.postgresql.org/download/

PostgreSql Windows平臺下載地址:https://www.enterprisedb.com/downloads/postgres-postgresql-downloads

菜鳥教程 Windows 上安裝 PostgreSQL:https://www.runoob.com/postgresql/windows-install-postgresql.html

安裝成功!

不知道為什麼我Navicate連接不了

測試

我們這裡用的是Freesql進行連接

FreeSql 官網:https://freesql.net/

額外Nuget安裝

Person.cs

using FreeSql.DataAnnotations;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace RedisTest.Models
{
    public class Person
    {
        [Column(IsPrimary = true,IsIdentity =true)]
        public int Id { get; set; }

        public string Name { get; set; }


        public int Age { get; set; }
    }
}

模擬運行

using Bogus;
using FreeSql;
using Newtonsoft.Json;
using RedisTest.Models;
using StackExchange.Redis;

namespace RedisTest
{
    internal class Program
    {
        static void Main(string[] args)
        {
            IFreeSql freeSql = new FreeSqlBuilder()
                .UseConnectionString(DataType.PostgreSQL, "Host=127.0.0.1;Port=5432;Username=postgres;Password=123456; Database=testDb;ArrayNullabilityMode=Always;Pooling=true;Minimum Pool Size=1")
                .UseAutoSyncStructure(true)//CodeFrist
                .Build();

            if (freeSql.Ado.ExecuteConnectTest())
            {
                Console.WriteLine("資料庫連接成功!");
            }
            else
            {
                Console.WriteLine("資料庫連接失敗");
            }

            //Bogus生成模擬數據
            var faker = new Faker<RedisTest.Models.Person>()
                .RuleFor(t=>t.Name,f=>f.Name.FirstName())
                .RuleFor(t=>t.Age,f=>f.Random.Int(10,30));

            //插入
            {
                var lists = faker.Generate(10);
                freeSql.Insert(lists).ExecuteAffrows();
                Console.WriteLine($"插入數據");
                Console.WriteLine(JsonConvert.SerializeObject(lists, Formatting.Indented));
            }
            //查詢最新的10條
            {
                var lists  = freeSql.Select<RedisTest.Models.Person>()
                    .OrderByDescending(t=>t.Id)
                    .Take(10)
                    .ToList();
                Console.WriteLine($"查詢數據");
                Console.WriteLine(JsonConvert.SerializeObject(lists, Formatting.Indented));
            }


            Console.WriteLine("運行結束");
            Console.ReadLine();
        }
    }
}

postgresqlAdmin我實在是看不懂,而且我希望是用統一的資料庫管理工具去簡單查詢數據。但是postgresql在升級到15之後,navicate就不相容了,原因是postgresql 刪掉了一個表。

解決方案

實操解決Navicat連接postgresql時出現‘datlastsysoid does not exist‘報錯的問題:https://blog.csdn.net/zxp3817100/article/details/134822475

我後面用vscode 去修改16進位的文件的
vs code 以16進位格式查看文件:https://blog.csdn.net/weixin_42533987/article/details/111821190

Garnet

Garnet是微軟的開發的一個開源的緩存資料庫,類似於C# 版本的Redis。

為什麼要選擇Garnet而不是Redis

Redis不再開源

Redis不再開源,後續使用3月20日以後的版本需要遵守新的協議。協議詳情可以參考:https://github.com/redis/redis?tab=License-1-ov-file#readme

Windows版的Redis是由微軟維護的

Redis的Windows版本是微軟維護的,因為原作者antirez 只做Linux部分,Windows他不願意做。就算微軟提交了代碼他也不願意合併。

Redis官方為什麼不提供Windows版本?:https://www.zhihu.com/question/424272611/answer/2831004593

Windows Redis版本老舊,後續可能不再更新

Redis Github下載地址:https://github.com/tporadowski/redis/releases

Garnet性能強於Redis

Garnet: 力壓Redis的C#高性能分散式存儲資料庫:https://www.cnblogs.com/InCerry/p/18083820/garnet_introduce

安裝

開源倉庫地址:https://github.com/microsoft/garnet
文檔地址:https://microsoft.github.io/garnet/

安裝成功

測試

安裝可視化工具

免費實用的 Redis 可視化工具推薦, Redis DeskTop Manager 及 Another Redis Desktop Manager 的安裝與使用,Redis Insight 下載安裝:https://blog.csdn.net/boboJon/article/details/135073969

C# 代碼連接測試

官方說,可以直接用redis的連接方式無縫連接garnet。我這裡試一下

using Bogus;
using FreeSql;
using Newtonsoft.Json;
using RedisTest.Models;
using StackExchange.Redis;

namespace RedisTest
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 連接到garnet,這裡要寫死埠
            ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("127.0.0.1:3278");

            // Get the database (by default, it's DB 0)
            IDatabase db = redis.GetDatabase();

            // 存入數據
            db.StringSet("key1", "Hello, Redis!");

            // 讀取數據
            string value = db.StringGet("key1");
            Console.WriteLine(value); // Output: Hello, Redis!

            // Increment a value
            db.StringIncrement("counter1");
            long counterValue = (long)db.StringGet("counter1");
            Console.WriteLine(counterValue); // Output: 1

            Console.WriteLine("運行結束");
            Console.ReadLine();
        }
    }
}

總結

這次我就是嘗試一下新的技術,畢竟現在的主流還是Mysql+Redis。postgreSql+Garnet用起來還是有點激進了。但是我Garnet是完全按照Redis協議寫的,可以無縫轉到Garnet上面。而PostgreSql的資料庫的性能就是碾壓Mysql的,這個是已經得到證實的了。反正我後面的技術選型就往Postgresql和Garnet上面靠


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...