当前位置: 首页 > news >正文

网站建设有没有资质第一ppt网

网站建设有没有资质,第一ppt网,企业端app下载,仪征做网站我们回顾一下上一篇文章中的内容#xff0c;有一个朋友问我这样一个问题#xff1a;我的业务依赖一些数据#xff0c;因为数据库访问慢#xff0c;我把它放在 Redis 里面#xff0c;不过还是太慢了#xff0c;有什么其它的方案吗#xff1f;其实这个问题比较简单的是吧有一个朋友问我这样一个问题我的业务依赖一些数据因为数据库访问慢我把它放在 Redis 里面不过还是太慢了有什么其它的方案吗其实这个问题比较简单的是吧Redis 其实属于网络存储我对照下面的这个表格可以很容易的得出结论既然网络存储的速度慢那我们就可以使用内存 RAM 存储把放 Redis 里面的数据给放内存里面就好了。操作速度执行指令1/1,000,000,000 秒 1 纳秒从一级缓存读取数据0.5 纳秒分支预测失败5 纳秒从二级缓存读取数据7 纳秒使用 Mutex 加锁和解锁25 纳秒从主存(RAM 内存)中读取数据100 纳秒在 1Gbps 速率的网络上发送 2Kbyte 的数据20,000 纳秒从内存中读取 1MB 的数据250,000 纳秒磁头移动到新的位置(代指机械硬盘)8,000,000 纳秒从磁盘中读取 1MB 的数据20,000,000 纳秒发送一个数据包从美国到欧洲然后回来150 毫秒 150,000,000 纳秒提出这个方案以后接下来就遇到了另外一个问题但是数据比我应用的内存大这怎么办呢在上篇文章中我们提到了使用 FASTER 作为内存磁盘混合缓存的方案但是由于 FASTER 的 API 比较难使用另外在纯内存场景中表现不如ConcurrentDictionary所以最后得出的结论也是仅供参考。经过一段时间的研究笔者实现了一个基于微软 FasterKv 封装的进程内混合缓存库(内存磁盘)它有着更加易用的 API接下来就和大家讨论讨论它。FasterKvCache 架构这里需要简单的说一说 FasterKvCache 的架构它核心使用的 FasterKv所以架构实际上和 FasterKv 一致其原理比较复杂所以笔者简化了原理图大概就如下所示:FasterKv 的热数据会在内存中而全量的数据会持久化在磁盘中。这中间有一些缓存淘汰算法所以大家看到这张图就能明白 FasterKvCache 适用和不适用哪些场景了。如何使用它笔者之前给 EasyCaching 提交了 FasterKv 的实现但是由于有一些 EasyCaching 的高级功能在 FasterKv 上目前无法高性能的实现所以单独创建了这个库提供高性能和最基本的 API 实现如果大家已经使用了 EasyCaching那么可以直接使用 EasyCaching.FasterKv 这个 NuGet 包。如果使用需要 FasterKvCache 的话只需要安装 Nuget 包Nuget 包不同的功能如下所示其中序列化包可以只安装自己需要的即可。软件包名版本备注FasterKv.Cache.Core[1]1.0.0-rc1缓存核心包包含 FasterKvCache 主要的 APIFasterKv.Cache.MessagePack[2]1.0.0-rc1基于 MessagePack 的磁盘序列化包它具有着非常好的性能但是需要注意它稍微有一点使用门槛大家可以看它的文档。FasterKv.Cache.SystemTextJson[3]1.0.0-rc1基于 System.Text.Json 的磁盘序列化包它是.NET 平台上性能最好 JSON 序列化封装但是比 MessagePack 差。不过它易用性非常好无需对缓存实体进行单独配置。使用直接使用我们可以直接通过new FasterKvCache(...)的方式使用它目前它只支持基本的三种操作Get、Set、Delete。为了方便使用和性能的考虑我们将 FasterKvCache 分为两种 API 风格一种是通用对象风格一种是泛型风格。通用对象直接使用new FasterKvCache(...)创建可以存放任意类型的 Value。它底层使用object类型存储所以内存缓冲内访问值类型对象会有装箱和拆箱的开销。泛型需要使用new FasterKvCacheT(...)创建只能存放T类型的 Value。它底层使用T类型存储所以内存缓冲内不会有任何开销。当然如果内存缓冲不够对应的 Value 被淘汰到磁盘上那么同样都会有读写磁盘、序列化和反序列化开销。通用对象版本代码如下所示同一个 cache 实例可以添加任意类型using FasterKv.Cache.Core; using FasterKv.Cache.Core.Configurations; using FasterKv.Cache.MessagePack;// create a FasterKvCache var cache  new FasterKv.Cache.Core.FasterKvCache(MyCache,new DefaultSystemClock(),new FasterKvCacheOptions(),new IFasterKvCacheSerializer[]{new MessagePackFasterKvCacheSerializer{Name  MyCache}},null);var key  Guid.NewGuid().ToString(N);// sync // set key and value with expiry time cache.Set(key, my cache sync, TimeSpan.FromMinutes(5));// get var result  cache.Getstring(key); Console.WriteLine(result);// delete cache.Delete(key);// async // set await cache.SetAsync(key, my cache async);// get result  await cache.GetAsyncstring(key); Console.WriteLine(result);// delete await cache.DeleteAsync(key);// set other type object cache.Set(key, new DateTime(2022,2,22)); Console.WriteLine(cache.GetDateTime(key));输出结果如下所示my cache sync my cache async 2022/2/22 0:00:00泛型版本泛型版本的话性能最好但是它只允许添加一个类型否则代码将编译不通过// create a FasterKvCacheT // only set T type value var cache  new FasterKvCachestring(MyTCache,new DefaultSystemClock(),new FasterKvCacheOptions(),new IFasterKvCacheSerializer[]{new MessagePackFasterKvCacheSerializer{Name  MyTCache}},null);Microsoft.Extensions.DependencyInjection当然我们也可以直接使用依赖注入的方式使用它用起来也非常简单。按照通用和泛型版本的区别我们使用不同的扩展方法即可var services  new ServiceCollection(); // use AddFasterKvCache services.AddFasterKvCache(options  {// use MessagePack serializeroptions.UseMessagePackSerializer(); }, MyKvCache);var provider  services.BuildServiceProvider();// get instance do something var cache  provider.GetServiceFasterKvCache();泛型版本需要调用相应的AddFasterKvCacheT方法var services  new ServiceCollection(); // use AddFasterKvCachestring services.AddFasterKvCachestring(options  {// use MessagePack serializeroptions.UseMessagePackSerializer(); }, MyKvCache);var provider  services.BuildServiceProvider();// get instance do something var cache  provider.GetServiceFasterKvCachestring();配置FasterKvCache 构造函数public FasterKvCache(string name, // 如果存在多个Cache实例定义一个名称可以隔离序列化等配置和磁盘文件ISystemClock systemClock, // 当前系统时钟new DefaultSystemClock()即可FasterKvCacheOptions? options, // FasterKvCache的详细配置详情见下文IEnumerableIFasterKvCacheSerializer? serializers, // 序列化器可以直接使用MessagePack或SystemTextJson序列化器ILoggerFactory? loggerFactory) // 日志工厂 用于记录FasterKv内部的一些日志信息FasterKvCacheOptions 配置项对于 FasterKvCache有着和 FasterKv 差不多的配置项更详细的信息大家可以看FasterKv-Settings[4]下方是 FasterKvCache 的配置IndexCountFasterKv 会维护一个 hash 索引池IndexCount 就是这个索引池的 hash 槽数量一个槽为 64bit。需要配置为 2 的次方。如 1024(2 的 10 次方)、 2048(2 的 11 次方)、65536(2 的 16 次方) 、131072(2 的 17 次方)。默认槽数量为 131072占用 1024kb 的内存。MemorySizeBit: FasterKv 用来保存 Log 的内存字节数配置为 2 的次方数。默认为 24也就是 2 的 24 次方使用 16MB 内存。PageSizeBitFasterKv 内存页的大小配置为 2 的次方数。默认为 20也就是 2 的 20 次方每页大小为 1MB 内存。ReadCacheMemorySizeBitFasterKv 读缓存内存字节数配置为 2 的次方数缓存内的都是热点数据最好设置为热点数据所占用的内存数量。默认为 20也就是 2 的 20 次方使用 16MB 内存。ReadCachePageSizeBitFasterKv 读缓存内存页的大小配置为 2 的次方数。默认为 20也就是 2 的 20 次方每页大小为 1MB 内存。LogPathFasterKv 日志文件的目录默认会创建两个日志文件一个以.log结尾一个以obj.log结尾分别存放日志信息和 Value 序列化信息注意不要让不同的 FasterKvCache 使用相同的日志文件会出现不可预料异常。默认为{当前目录}/FasterKvCache/{进程 Id}-HLog/{实例名称}.log。SerializerNameValue 序列化器名称需要安装序列化 Nuget 包如果没有单独指定Name的情况下可以使用MessagePack和SystemTextJson。默认无需指定。ExpiryKeyScanInterval由于 FasterKv 不支持过期删除功能所以目前的实现是会定期扫描所有的 key将过期的 key 删除。这里配置的就是扫描间隔。默认为 5 分钟。CustomStore如果您不想使用自动生成的实例那么可以自定义的 FasterKv 实例。默认为 null。所以 FasterKvCache 所占用的内存数量基本就是(IndexCount*64)(MemorySize)ReadCacheMemorySize当然如果 Key 的数量过多那么还有加上OverflowBucketCount * 64。容量规划从上面提到的内容大家可以知道FasterKvCache 所占用的内存字节基本就是(IndexCount * 64)(MemorySize) ReadCacheMemorySize (OverflowBucketCount * 64)。磁盘的话就是保存了所有的数据对象序列化的数据由于不同的序列化协议有不同的大小大家可以先进行测试。内存数据存储到 FasterKv 存储引擎每个 key 都会额外元数据信息存储空间占用会有一定的放大建议在磁盘空间选择上留有适当余量按实际存储需求的 1.2 - 1.5 倍预估。如果使用内存存储 100GB 的数据总的访问 QPS 不到 2W其中 80%的数据都很少访问到。那么可以使用 【32GB 内存 128GB 磁盘】 存储节省了近 70GB 的内存存储内存成本可以下降 50%。性能目前作者还没有时间将 FasterKvCache 和其它主流的缓存库进行比对现在只对 FasterKvCache、EasyCaching.FasterKv 和 EasyCaching.Sqlite 做的比较。下面是 FasterKVCache 的配置总占用约为 2MB。services.AddFasterKvCachestring(options  {options.IndexCount  1024;options.MemorySizeBit  20;options.PageSizeBit  20;options.ReadCacheMemorySizeBit  20;options.ReadCachePageSizeBit  20;// use MessagePack serializeroptions.UseMessagePackSerializer(); }, MyKvCache);由于作者笔记本性能不够使用 Sqlite 无法在短期内完成 100W、1W 个 Key 的性能测试所以我们在默认设置下将数据集大小设置为 1000 个 Key设置 50%的热点 Key。进行 100%读、100%写和 50%读写随机比较。可以看到无论是读、写还是混合操作 FasterKvCache 都有着不俗的性能在 8 个线程情况下TPS 达到了惊人的 1600w/s。缓存类型线程数Mean(us)Error(us)StdDev(us)Gen0Gen1AllocatedfasterKvCacheRead859.953.8542.5491.52597.02NULLfasterKvCacheWrite863.671.0320.6830.79353.63NULLfasterKvCacheRandom464.421.3920.9211.7098.38NULLfasterKvCacheRead464.670.6280.3742.563511.77NULLfasterKvCacheRandom864.803.6392.1661.09865.33NULLfasterKvCacheWrite465.573.452.0530.97664.93NULLfasterKvRead892.1510.6787.0635.7373-26.42 KBfasterKvWrite499.4921.04610.7422-49.84 KBfasterKvWrite8108.505.2283.1115.6152-25.93 KBfasterKvRead4109.371.4760.77210.9863-50.82 KBfasterKvRandom8119.9414.1759.3765.7373-26.18 KBfasterKvRandom4124.316.1914.09510.7422-50.34 KBfasterKvCacheRead1207.773.3071.739.277343.48NULLfasterKvCacheRandom1208.711.8320.9586.347729.8NULLfasterKvCacheWrite1211.261.5571.033.41816.13NULLfasterKvWrite1378.6017.75511.74442.4805-195.8 KBfasterKvRead1404.5717.47711.5643.457-199.7 KBfasterKvRandom1441.2214.1079.33142.9688-197.75 KBsqliteRead87450.11260.279172.15854.68757.8125357.78 KBsqliteRead414309.94289.113172.047109.37515.625718.9 KBsqliteRead156973.531,774.351,173.624001002872.18 KBsqliteRandom8475535.01214,015.71141,558.14--395.15 KBsqliteRandom41023524.8797,993.1964,816.43--762.46 KBsqliteWrite81153950.8448,271.4728,725.58--433.7 KBsqliteWrite42250382.93110,262.7272,931.96--867.7 KBsqliteWrite14200783.0843,941.6929,064.71--3462.89 KBsqliteRandom15383716.10195,085.96129,037.28--2692.09 KB总结可以看到 FasterKvCache 有着不俗的性能目前也在笔者朋友的项目使用上了反馈不错解决了他的缓存问题。由于现在还只是 1.0.0-rc1 版本还有很多特性没有实现。可能有一些 BUG 还存在欢迎大家试用和反馈问题。Github 开源地址 https://github.com/InCerryGit/FasterKvCache参考链接https://developer.aliyun.com/article/740811参考资料[1] FasterKv.Cache.Core: https://www.nuget.org/packages/FasterKv.Cache.Core[2] FasterKv.Cache.MessagePack: https://www.nuget.org/packages/FasterKv.Cache.MessagePack[3] FasterKv.Cache.SystemTextJson: https://www.nuget.org/packages/FasterKv.Cache.SystemTextJson[4] FasterKv-Settings: https://microsoft.github.io/FASTER/docs/fasterkv-basics/#fasterkvsettings
http://www.zqtcl.cn/news/310474/

相关文章:

  • 电商网站建设与管理实践电商网站前端制作分工
  • 外贸公司怎么接订单网站编辑做seo好做吗
  • 科技企业网站建设珠海微信网站开发
  • 科凡网站建设小程序自己开发
  • 专门做金融的招聘网站wordpress 价格
  • 微商城网站建设信息定制程序网站
  • 电子政务网站开发餐饮品牌设计包括哪些
  • 深圳手机商城网站设计公司网站做会员用什么源码
  • 安康网站建设公司价格pathon做网站
  • jq网站模板宣城有做网站的公司吗
  • 江苏个人备案网站内容大连seo加盟
  • 服装网站建设公司地址公司网站建设需要注意什么
  • 免费行情软件网站下载安装电子商务网站建设实训报告
  • wordpress怎么添加企业网站美化网站公司
  • 工作室网站源码全球军事网站
  • 网站设计模板免费建站珠海正规网站制作排名费用多少
  • 北京沙河教做网站的wordpress增加自适应功能
  • 中国著名的个人网站网站设计怎么做ppt答辩
  • 郑州做招商的网站网站后台主流网站开发语言
  • 专业足球网站开发铜陵网站优化
  • 南昌高端网站开发山西太原网站建设公司
  • 青岛专业制作网站的公司吗百度咨询
  • 自定义网站模块深圳宝安区有什么好玩的地方
  • 如何增加网站的外链微平台网站支持html5实现游戏
  • 平台网站建设网站邯郸seo优化
  • 做网站着用什么软件盐城网站建设电话
  • 自己的网站wordpress自动变化文字
  • 北京制作网站公司哪家好wordpress小工具不显示不出来
  • 如何建设一个新的网站h5网站建设价格
  • 无锡专业做网站的怎么攻击php做的网站