数据库升级PostgreSql+Garnet

news/2024/9/22 19:46:24

目录
  • 前言
  • PostgreSql
    • 安装
    • 测试
      • 额外Nuget安装
      • Person.cs
      • 模拟运行
      • Navicate连postgresql
        • 解决方案
  • Garnet
    • 为什么要选择Garnet而不是Redis
      • Redis不再开源
      • Windows版的Redis是由微软维护的
      • Windows Redis版本老旧,后续可能不再更新
      • Garnet性能强于Redis
    • 安装
    • 测试
      • 安装可视化工具
      • C# 代码连接测试
  • 总结

前言

我公司用的是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 valuedb.StringIncrement("counter1");long counterValue = (long)db.StringGet("counter1");Console.WriteLine(counterValue); // Output: 1Console.WriteLine("运行结束");Console.ReadLine();}}
}

总结

这次我就是尝试一下新的技术,毕竟现在的主流还是Mysql+Redis。postgreSql+Garnet用起来还是有点激进了。但是我Garnet是完全按照Redis协议写的,可以无缝转到Garnet上面。而PostgreSql的数据库的性能就是碾压Mysql的,这个是已经得到证实的了。反正我后面的技术选型就往Postgresql和Garnet上面靠

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

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

相关文章

Vue学习知识汇总

官网:https://cn.vuejs.org/ 前置知识:完整的学习vue: html + css、JavaScript、css3、HTML5、第三方库、网络通信、ES6+、webpack、模块化、包管理器、css预编译器 体验vue功能:html + css、JavaScriptVue拥有以下特点:渐进式 组件化 响应式Vue的应用场景:前台的部分页面 中…

玩转创想三维 K1 系列主板之二:编译 MCU 固件,恢复裁剪组件

前言 原创文章,转载引用请务必注明链接,水平有限,如有疏漏,欢迎交流指正。 文章如有更新请访问 DFRobot 社区 及 cnblogs 博客园,前者内容较全,后者排版及阅读体验更佳。 本文是摸索创想三维 K1 系列软硬件系统的一些内容分享。最近创想三维的工作人员联系了我,希望接下…

第 3篇 Scrum 冲刺博客

这个作业属于哪个课程 软件工程2024这个作业要求在哪里 团队作业4——项目冲刺这个作业的目标 记录敏捷流程下第三天的项目开发进展,对团队昨日的全员学习进度进行总结一、每日站立式会议 1、每日站立式会议照片2、会议摘要本次会议为第三次Scrum Meeting会议~ 由于本次会议队…

nacos接口使用

1.nacos官方文档https://nacos.io/zh-cn/docs/open-api.html 2.参数获取 3.nacos例子(其余例子可参考文档)#调用api发布配置 curl -X POST -F "file=@cv-platfom-common.yaml" -F "content=$(<cv-platfom-common.yaml)" -F "type=yaml" &…

java split用法 案例

需求:java读取一个csv文件并将文件内容每行按照","隔开 场景一: 读取1.csv文件:文件内容如下: 1,zhangsan,note2,lisi, 注意:第二行逗号后面没有数据public static void main(String[] args) {String csvFile = "C:\\Users\\yc\\Desktop\\1.csv";Stri…

UploadLabs靶场

UploadLabs关卡解析与过关思路。目录Pass-01Pass-02Pass-03Pass-04Pass-05Pass-06Pass-07Pass-08Pass-09Pass-10Pass-11Pass-12Pass-13Pass-14Pass-15Pass-16Pass-17Pass-18Pass-19Pass-20都是鄙人做题思路记下来的一些心得笔记罢了。Pass-01 先传一个图片过去,成功上传。尝试…

java split用法

需求:java读取一个csv文件并将文件内容每行按照","隔开 场景一: 读取1.csv文件:文件内容如下: 1,zhangsan,note2,lisi, 注意:第二行逗号后面没有数据public static void main(String[] args) {String csvFile = "C:\\Users\\yc\\Desktop\\1.csv";Stri…

J. 上学

原题链接 题解 看清楚题目,是三个人都坐在同一辆校车!!code #include<bits/stdc++.h> #define ll long long using namespace std; vector<ll> G[200005]; ll depth[200005]={0}; void dfs(ll now,ll fa) {for(auto next:G[now]){if(next==fa) continue;depth[n…