目錄前言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();
}
}
}
Navicate連postgresql
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上面靠