我发起了一个 .Net Core 平台上的 分布式缓存 开源项目 ShareMemory 用于 取代 Redis
Redis 的 安装 是 复杂 的, 使用 是 复杂 的,
Redis 的 功能 是 重型 的,
Redis 本身的 技术实现 是 复杂 的 。
Redis 是用 C 写的, C 语言 编写的代码需要直接调用 操作系统 底层 API, 如 系统套接字(Socket), 系统 IO, 这会导致 移植性 兼容性 稳定性 的 问题 。
C 语言 编写的代码是晦涩的, 难以维护的。
Redis 是一个 NoSql 数据库, 却被拿来当成 分布式缓存 用, Redis 里 居然有 “Snapshot” …… , 而且 这个 Snapshot 是要写 磁盘 的 。 …… 。
没人知道 Redis 报出的 错误信息 是什么意思, 看到 Redis 的 报错信息, 感觉就像走到了一间 摆满了 老式机器 的 废旧工厂 。
所以, 我们应该 把 分布式缓存 和 数据库 这 2 个 职能 从 Redis 里 分解 出来, 用 新的方式 来实现 。
1 占用空间小 的 轻量 的 数据 可以存放在 分布式缓存, 轻量 的 数据 比如 用户状态, 业务对象 的 Key(注意只是 Key), 并行计算 的 状态数据, Token 等,
2 占用空间大 的 “资料性质” 的 重量 的 数据 应该存放在 数据库 。
我 建议 能够保存在 本地内存 里的 数据(对象) 不要 放到 分布式缓存, 如果 分布式缓存 只要 保存 业务对象 的 Key 就可以, 那么就只 保存 Key, 而不要保存 业务对象 。 比如, 一些 “秒杀” 的 场景, 要 锁定 被秒杀 的 商品, 实际上只需要 对 商品的 ID(Key) 锁定, 这样在 分布式缓存 里 只要 保存 商品 ID (Key) 就可以, 没必要 保存 商品对象 。
可以参考我写的一篇文章 《论 业务系统 架构 的 简化 (二) 用 关系数据库 作 缓存》 https://www.cnblogs.com/KSongKing/p/9928412.html
分布式缓存 可以作为 服务器集群 的 共享内存, 也只应该作为 共享内存 这个 角色 。
可以再参考我写的一篇文章 《.Net Core 应用方向 图谱》 https://www.cnblogs.com/KSongKing/p/10209880.html
里面提到 :
MessageRPC 和 ShareMemory 是 我写的 2 个项目, MessageRPC 是一个简单的 RPC, ShareMemory 是一个 简单的 分布式缓存 。
我现在写的 ShareMemory 这个项目, 可以看作是一个 开始 或者 尝试 。
我们完全 可以 开发 一款 轻量化 的 , 部署简单 , 使用简单 , 但是 又能 容易 的 实现 服务器 之间 的 共享数据 的 “共享内存” 的 分布式缓存 。
这款 新的 轻量 的 分布式缓存 , 由 .Net (.Net Core) C# 开发编写,
代码 和 平台 清晰透明, 容易理解 和 维护 。
分布式缓存 会 涉及 Hash 表, 可以参考 《自己写一个 Hash 表》 https://www.cnblogs.com/KSongKing/p/10425152.html 。
我发起了一个 .Net Core 平台上的 分布式缓存 开源项目 ShareMemory 用于 取代 Redis的更多相关文章
- 我发起了一个 .Net Core 平台上的 开源项目 ShadowDomain 用于 热更新
大家好, 我发起了一个 .Net Core 平台上的 开源项目 ShadowDomain 用于 热更新 . 简单的说, 原理就是 类似 Asp.net 那样 让 当前 WebApp 运行在一个 A ...
- 我发起了一个用 .Net 编写的 源代码管理工具 开源项目 SourceKit
发起这个 项目 的 起因 是 GitHub . Github 的 使用技能 俨然已经成了 一项新技术 , 这不是 工具 的 本意 . 我用过的 源代码 管理工具 不多, SVN 我觉得不错 . 常用 ...
- 我发起了一个 操作系统 GUI 和 Tcp / IP 包 的 开源项目 DeviceOS
操作系统 如果 不需要 处理 复杂多样 的 硬件 兼容性, 其实 并不算 大项目, 可以算 毕业设计 . 但是, GUI 和 Tcp / IP 这两个 部分 的 实现逻辑 很多 很复杂, 这 2 ...
- 我发起了一个 支持 PostgreSql 的 外围设施 的 .Net 开源项目
目标 : 让 PostgreSql 成为 通用的 跨平台 的 数据库 , 成为 开发者 喜爱 的 利器 . 要做的事 , 当然 , PostgreSql 本身现在不用我们去做什么 . 一个 数据库 ...
- GitHub上不错的Android开源项目(三)
收集相关系列资料,自己用作参考,练习和实践.小伙伴们,总有一天,你也能写出 Niubility 的 Android App :-) GitHub上不错的Android开源项目(一):http://ww ...
- GitHub上不错的Android开源项目(二)
收集相关系列资料,自己用作参考,练习和实践.小伙伴们,总有一天,你也能写出 Niubility 的 Android App :-) 系列文章如下: GitHub上不错的Android开源项目(一):h ...
- [转]GitHub上优秀的Go开源项目
转载于GitHub上优秀的Go开源项目 正文 近一年来,学习和研究Go语言,断断续续的收集了一些比较优秀的开源项目,这些项目都非常不错,可以供我们学习和研究Go用,从中可以学到很多关于Go的使用.技巧 ...
- 如何在 Github 上发现优秀的开源项目?
之前发过一系列有关 GitHub 的文章,有同学问了,GitHub 我大概了解了,Git 也差不多会使用了,但是还是搞不清 GitHub 如何帮助我的工作,怎么提升我的工作效率? 问到点子上了,Git ...
- SNF快速开发平台MVC-集成了百度开源项目echars
百度开源项目echars图表样式非常丰富,而且开源免费.非常好.所以在我们框架当中也进行了集成echars完成图表任务. 我们进行了两次封装,利于我们开发使用.我也看到过有些架构师 按echars里的 ...
随机推荐
- htmlayout 最简单的实践,用于理解实现原理。
/ testHtmlayout.cpp : 定义应用程序的入口点. // #include "stdafx.h" #include "testHtmlayout.h&qu ...
- CodeForces ~ 996
Allen has a LOT of money. He has nn dollars in the bank. For security reasons, he wants to withdraw ...
- AssetBundle自动标签、打包
using System;using System.Collections.Generic;using System.IO;using UnityEditor;using UnityEngine; / ...
- java学习笔记15(String 类,StringBuffer)
/* * String类的特点: * 所有的""都是String的对象 * 字符串一旦创建就是常量,不能改变 */ public class StringDemo { public ...
- Centos7安装vsftpd
1.安装vsftpd yum install vsftpd 2.添加一个ftp用户,一个不能登录系统用户,只用来登录ftp服务,这里如果没设置用户目录.默认是在home下. useradd ftpac ...
- endnote插入文献的一些问题
1. 文末参考文献前面加上序号 eg.[1] 设置如下图,参考网址https://zhidao.baidu.com/question/360201207639069172.html edit-> ...
- VS2017调试代码显示“当前无法命中断点,还没有为该文档加载任何符号”
VS2017升级之后,代码调试无法进入,显示“当前无法命中断点,还没有为该文档加载任何符号”的问题解决思路: 1.工具-选项-项目和解决方案-生成并运行,取消勾选“在运行时仅生成启动项目和依赖性” 2 ...
- web(四)html表单类标签
表单类标签 操作者用于输入信息,并将信息提交给服务器的标签集合. 表单标签介绍 form标签:表单元素(其余标签)标签的容器标签 input标签:用于用户信息输入的标签. button标签:按钮标签. ...
- sequence to sequence模型
sequence to sequence模型是一类End-to-End的算法框架,也就是从序列到序列的转换模型框架,应用在机器翻译,自动应答等场景. Seq2Seq一般是通过Encoder-Decod ...
- json2的基本用法
<script type="text/javascript" src="/CoreResource/JS/json2.min.js"></sc ...