Redis

通用中小企业架构设计思路

情到浓时终转凉″ 提交于 2020-12-13 21:42:13
在上一篇博客中( 浅谈微服务架构与.Net Core )我们谈到微服务架构与.Net Core,大体分析了下微服务架构的一些优势,在这边博客中,将谈谈架构设计的一些理念。 首先,代码要清晰明了,层次分明,模块间耦合度要尽量降低,代码并不是要越复杂越好,可能有人认为,代码写得越复杂、算法用的越高级,让别人越看不懂就越牛X,我认为恰恰相反,代码越是简单就能实现的就尽量做到简单,能用几行代码能解决的问题何必要写个牛X的算法来实现呢? 其次,能做到通用的模块需要单独提炼出来,不要在其他业务逻辑中混合实现,不利于代码的移植,以下简单说说常用的一些模块或逻辑需要特别注意的; 1、底层数据访问需要单独写,当我们数据库发生变化,比如我们这个项目用的是SqlServer,下个项目用的是MySQL,要做到很轻易的切换; 2、缓存管理需要独立出来,通常,我们开发都会用到缓存技术,能把缓存用好,系统性能也会得到大幅度提升,简单举个例子,比如我们开发一个系统,用的是MemoryCache,但是系统上线运行一段时间后,并发量增大,本机缓存已经不能满足需求,我们需要对系统进行集群,减轻服务器压力,此时需要用Redis来管理缓存,那么此时,我们需要做到很容易的从MemoryCache切换到Redis来做缓存管理,我们只需要改一下配置文件就能达到预期效果而不必在用到缓存的地方一个一个的去改再编译上线。 3

JVM 运行时数据区详解,写得非常好!

ⅰ亾dé卋堺 提交于 2020-12-13 12:59:30
Java技术栈 www.javastack.cn 关注阅读更多优质文章 作者:小小木的博客 www.cnblogs.com/wyc1994666/p/11795781.html 在接下来的几天想总结下,JVM相关的一些内容,比如下面的这三个内容算是比较核心知识点了 1. 运行时数据区域: 在运行时数据区里存储类Class文件元数据(方法区),对象和数组(堆),方法参数局部变量(栈)等。 2. 垃圾回收机制: java 语言的优势之一就是它的自动内存管理,主要回收运行时数据区域的堆内存里的数据 3. 类加载机制: 虚拟机首先需要把编译完成的字节码文件通过类加载器来加载到运行时数据区域 一个段Java代码的生命周期都会少不了上图这几个步骤,也就是Java代码首先会被编译成字节码文件,之后被类加载器加载到运行时数据区域,以及运行,垃圾收集器回收对象等等。 但今天我想介绍第一个知识点《运行时数据区域》 1 运行时数据区 Java虚拟机定义了一系列逻辑数据区域,有些是随着虚拟机的启动而创建,虚拟机的关闭而销毁。还有一部分是随着线程生命周期创建销毁的。 我们有必要深入了解这块的内容,因为它将决定服务器性能,首先我们需要对整个运行时区域由整体的认识并且了解了每个区域的生命周期以及作用之后才能通过相应的调参来提升系统性能。除此之外还有助于快速定位虚拟机的相关Error.

redis支持的数据结构

断了今生、忘了曾经 提交于 2020-12-13 10:40:09
redis支持的数据结构 个人读书笔记 简单动态字符串 (String) 链表(list) 字典 跳跃表 整数集合 压缩列表 对象 sds(简单动态字符串) 定义: //记录buf数组中已使用字节的数量 int len //记录buf数组中未使用字节的数量 int free //字节数组 用于保存字符串 char buf [] 使用sds的好处是:1.方便获取当前字符串的长度 2.杜绝缓冲区溢出 3.减少字符串修改带来的内存重分配次数.修改之后的空间,预分配的字空间大小和已 使用的空间大小相等.但是最大为1M. 4.二进制安全.redis api读进去的是一系列二进制 2.链表 链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过只能删节点来灵活的调整链表的长度. 3.字典 字典又称为符号表.,关联数组活映射(map),是一中用于保存键值对的抽象数据结构. 字典的底层是由哈希表实现的,一个哈希表里面可以有很多个哈希表节点,而每个哈希表节点就保存了字典表中的一个键值对. 1.1.哈希表 结构定义: table:哈希表数组.数组中的每个元素都是一个指向dictEntry结构的指针,每个dictEntry结构保存着一个键值对 size:哈希表大小 sizemask:哈希表掩码,用于计算索引值.总是等于size-1 used:该哈希表已有节点的数量 1.2.哈希表节点

用分布式缓存提升ASP.NET Core性能

倖福魔咒の 提交于 2020-12-13 06:58:50
得益于纯净、轻量化并且跨平台支持的特性,ASP.NET Core作为热门Web应用开发框架,其高性能传输和负载均衡的支持已广受青睐。实际上,10-20台Web服务器还是轻松驾驭的。有了多服务器负载的支持,使得Web应用层在业务增长时随时采用水平扩展,ASP.NET Core也能够没有什么负担地处理长事务。然而造成性能瓶颈的地方仍然不可忽视,具体来说首当其冲就是数据存储,无法随着应用层的性能提升而提高大规模数据处理能力,这是因为数据层是没有办法简单通过增加服务器得到改善的。 ASP.NET Core应用有两类数据在数据存储成为瓶颈时突显出来: 数据库 Session会话 解决方案: 分布式缓存 解决这个性能瓶颈,不妨试试NCache,它是一个开源的支持.NET的分布式缓存,它的优势在于完全基于内存,所以你可以在业务增长时组建内存服务器的集群来实现线性扩展,相比于数据库能节省近八成的成本,并且在读写应用数据上得到更快的体验。NCache很适合存储session会话,在多Web服务器负载时也解决了会话保持的需求。 下图是NCache这类常见的分布式缓存的部署架构。 ASP.NET Core应用数据缓存 IDistributedCache 在ASP.NET Core之前,旧的ASP.NET程序的缓存对象是独立进程的,也没有多服务器支持的需要。现今ASP.NET Core推出了

Redis C# - Using Incr value in a transaction

不羁岁月 提交于 2020-12-13 04:40:03
问题 I'm trying use Redis INCR and the incremented value to be used as a field in a Hash from C# using StackExchange.Redis. This question points similar to what I need, but in Node. The below is something like I need. ITransaction transation = m_connection.GetDatabase() .CreateTransaction(); Task<long> incrementTask = transation.StringIncrementAsync(sequenceNumberRedisKey); if (await transation.ExecuteAsync()) { long sequenceNumber = await incrementTask; await transation.HashSetAsync

Redis C# - Using Incr value in a transaction

不问归期 提交于 2020-12-13 04:39:05
问题 I'm trying use Redis INCR and the incremented value to be used as a field in a Hash from C# using StackExchange.Redis. This question points similar to what I need, but in Node. The below is something like I need. ITransaction transation = m_connection.GetDatabase() .CreateTransaction(); Task<long> incrementTask = transation.StringIncrementAsync(sequenceNumberRedisKey); if (await transation.ExecuteAsync()) { long sequenceNumber = await incrementTask; await transation.HashSetAsync

Is Redis TimeSeries the right tool to capture candle sticks in stock prices

断了今生、忘了曾经 提交于 2020-12-13 03:42:44
问题 I am currently trying to do a simple implementation for stock price candle sticks. Let's say we have a stock called XYZ. This stock receives a stream of prices (in no particular frequency), which (for example) looks like: XYZ: [10.2, 10.7, 12, 11 ....]. The objective is to record some metrics for every minute that passes to reflect the state of that stock. A candle stick has metrics like Closing price (last known price within a minute), High Price (maximum price within a minute)...etc. One

Is Redis TimeSeries the right tool to capture candle sticks in stock prices

主宰稳场 提交于 2020-12-13 03:37:49
问题 I am currently trying to do a simple implementation for stock price candle sticks. Let's say we have a stock called XYZ. This stock receives a stream of prices (in no particular frequency), which (for example) looks like: XYZ: [10.2, 10.7, 12, 11 ....]. The objective is to record some metrics for every minute that passes to reflect the state of that stock. A candle stick has metrics like Closing price (last known price within a minute), High Price (maximum price within a minute)...etc. One

Node Js: Redis job is not completing after finish its task

天大地大妈咪最大 提交于 2020-12-13 03:07:49
问题 Hope you guys are doing great. I implemented BullMQ (next major version of Bull) into my nodejs project to schedule the jobs to send emails. For example, send email of forget password request. So, I have written my code something like below. User Service: await resetPasswordJob({email: 'xyz@test.com'}); // from service I'm calling a job Reset Password Job: const {Queue} = require('bullmq'); const IOredis = require('ioredis'); const connection = new IOredis(process.env.REDIS_PORT || 6379);

Node Js: Redis job is not completing after finish its task

♀尐吖头ヾ 提交于 2020-12-13 03:04:38
问题 Hope you guys are doing great. I implemented BullMQ (next major version of Bull) into my nodejs project to schedule the jobs to send emails. For example, send email of forget password request. So, I have written my code something like below. User Service: await resetPasswordJob({email: 'xyz@test.com'}); // from service I'm calling a job Reset Password Job: const {Queue} = require('bullmq'); const IOredis = require('ioredis'); const connection = new IOredis(process.env.REDIS_PORT || 6379);