資料庫升級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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...