NOSQL
文章平均质量分 95
NOSQL
兔老大RabbitMQ
我是全站最硬核博主。我话讲完,谁赞成,谁反对?
展开
-
《这是全网最硬核redis总结,谁赞成,谁反对?》六万字大合集
后端需要知道的关于redis的事,基本都在这里了。此文后续会改为粉丝可见,所以喜欢的请提前关注。你的点赞和评论是我创作的最大动力,谢谢。《三天给你聊清楚redis》第1天先唠唠redis是个啥(18629字)一、入门Redis是一款基于键值对的NoSQL数据库,它的值支持多种数据结构:字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等。• Redis将所有的数据都存放在内存中,所以它的读写性能十分惊人,.原创 2021-03-15 14:00:02 · 57566 阅读 · 629 评论 -
Redis 多线程网络模型全面揭秘
导语一文带你完全吃透 Redis 整个核心网络模型的原理和源码。目录导言Redis 有多快?Redis 为什么快?Redis 为何选择单线程?避免过多的上下文切换开销避免同步机制的开销简单可维护Redis 真的是单线程?单线程事件循环多线程异步任务Redis 多线程网络模型设计思路源码剖析性能提升模型缺陷总结博客原文导言在目前的技术选型中,Redis 俨然已经成为了系统高性能缓存方案的事实标准,因此现在 Redis...原创 2021-02-21 15:41:48 · 3781 阅读 · 70 评论 -
《三天给你聊清楚redis》第2天看看redis怎么被搞出来的(22036字)
后端需要知道的关于redis的事,基本都在这里了。原创 2020-07-14 09:03:06 · 18807 阅读 · 324 评论 -
《三天给你聊清楚redis》第1天先唠唠redis是个啥(18629字)
后端需要知道的关于redis的事,我保证,基本都在这里了。此文后续会改为粉丝可见,所以喜欢的请提前关注。你的点赞和评论是我创作的最大动力,谢谢。原创 2020-07-10 19:21:17 · 32329 阅读 · 604 评论 -
为啥用redis解决会话呢?
什么是会话?会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。•会话过程中要解决的一些问题?–每个用户不可避免各自会产生一些数据,程序要想办法为每个用户保存这些数据。–例如:用户点击超链接通过一个servlet购买了一个商品,程序应该想办法保存用户购买的商品,以便于用户点结帐servlet时,结帐servlet...原创 2019-12-17 16:01:58 · 7648 阅读 · 93 评论 -
redis——NOSQL及redis概述
NoSql入门概述单机Mysql的美好时代瓶颈: 数据库总大小一台机器硬盘内存放不下 数据的索引(B + tree)一个机器的运行内存放不下 访问量(读写混合)一个实例不能承受 Memcached(缓存)+ MySql + 垂直拆分通过缓存来缓解数据库的压力,优化数据库的结构和索引垂直拆分指的是:分成多个数据库存储数据(如:卖家库与买家库)...原创 2019-10-12 20:17:11 · 3424 阅读 · 35 评论 -
redis的入门/原理/实战大总结
入门Redis是一款基于键值对的NoSQL数据库,它的值支持多种数据结构:字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等。• Redis将所有的数据都存放在内存中,所以它的读写性能十分惊人,用作数据库,缓存和消息代理。Redis具有内置的复制,Lua脚本,LRU逐出,事务和不同级别的磁盘持久性,并通过Redis...原创 2019-11-05 21:27:10 · 15299 阅读 · 136 评论 -
RedLock
概念Redis 官方站这篇文章提出了一种权威的基于 Redis 实现分布式锁的方式名叫Redlock,此种方式比原先的单节点的方法更安全。它可以保证以下特性:安全特性:互斥访问,即永远只有一个 client 能拿到锁 避免死锁:最终 client 都可能拿到锁,不会出现死锁的情况,即使原本锁住某资源的 client crash 了或者出现了网络分区 容错性:只要大部分 Redis 节...原创 2019-11-05 21:23:54 · 3516 阅读 · 28 评论 -
redis——内存概述
Redis通过自己的方法管理内存,,主要方法有zmalloc(),zrealloc(), zcalloc()和zfree(), 分别对应C中的malloc(), realloc()、calloc()和free()。相关代码在zmalloc.h和zmalloc.c中。Redis自己管理内存的好处主要有两个:可以利用内存池等手段提高内存分配的性能;可以掌握更多的内存信息,以便于Redis虚拟内存(...原创 2019-11-05 16:12:51 · 2940 阅读 · 32 评论 -
redis——对项目的一些优化方案
这是我们之前项目的业务流程,做一下简单介绍。登录:用户输入账号、密码、验证码。我们先判断用户输入的验证码是不是我们session存的验证码,然后去查账号密码是否正确。如果登录成功,发送给用户一张凭证(ticket)。登录后之后的每次请求,用户携带ticket,服务器得到后,根据ticket去login_ticket表中查找登录信息,并且根据登录信息再查user表获得更多...原创 2019-10-30 19:25:29 · 6259 阅读 · 100 评论 -
redis——实战关注
效果:思路:很好想,把自己的粉丝和自己关注的人都存起来(set即可),做增删改查。package com.now.community.community.service;import com.now.community.community.entity.User;import com.now.community.community.util.CommunityConsta...原创 2019-10-29 14:27:04 · 3930 阅读 · 50 评论 -
redis——实战点赞
点赞功能随处可见,我们都知道点赞是一个非常高频的操作,redis就非常适合做这种工作。实现效果:分析:三种类型:给帖子点赞,给评论点赞,给回复点赞我们只实现查看点赞数量的话,只要一个int记录一下就可以,但是我们之后还想查看点赞的人,所以要把每一个点赞的信息都记录好,方便后面的功能继续做出来。思路:点赞:把点赞的信息放进去。取消:把点赞的信息删除。在此之前,我们要封...原创 2019-10-29 10:05:56 · 7868 阅读 · 104 评论 -
redis——sentinel
什么是哨兵机制Redis的哨兵(sentinel)系统用于管理/多个Redis服务器,该系统执行以下三个任务:·监控:哨兵(sentinel)会不断地检查你的Master和Slave是否运作正常。·提醒:当被监控的某个Redis出现问题时,哨兵(sentinel)可以通过API向管理员或者其他应用程序发送通知。·自...原创 2019-10-24 16:57:55 · 4442 阅读 · 32 评论 -
redis——新版复制
sync虽然解决了数据同步问题,但是在数据量比较大情况下,从库断线从来依然采用全量复制机制,无论是从数据恢复、宽带占用来说,sync所带来的问题还是很多的。于是redis从2.8开始,引入新的命令psync。psync有两种模式:完整重同步和部分重同步。部分重同步主要依赖三个方面来实现,依次介绍。offset(复制偏移量):主库和从库分别各自维护一个复制偏移量(可以使用info r...原创 2019-10-23 09:30:00 · 5011 阅读 · 31 评论 -
redis——Java整合
redis官网微软写的windows下的redis我们下载第一个额案后基本一路默认就行了安装后,服务自动启动,以后也不用自动启动。出现这个表示我们连接上了。redis命令参考链接Spring整合Redis引入依赖- spring-boot-starter-data-redis <dependency> <groupId...原创 2019-10-16 20:52:03 · 4380 阅读 · 28 评论 -
redis——相关问题汇总
什么是redis?Redis 本质上是一个 Key-Value 类型的内存数据库, 整个数据库加载在内存当中进行操作, 定期通过异步操作把数据库数据 flush 到硬盘上进行保存。因为是纯内存操作, Redis 的性能非常出色, 每秒可以处理超过 10 万次读写操作, 是已知性能最快的 Key-Value DB。Redis 的出色之处不仅仅是性能, Redis 最大的魅力是支持保存...原创 2019-10-16 14:51:14 · 27048 阅读 · 218 评论 -
redis——旧版复制
Redis 的复制功能分为同步(sync)和命令传播(command propagate)两个操作:同步操作用于将从服务器的数据库状态更新至主服务器当前所处的数据库状态。 命令传播操作用于在主服务器的数据库状态被修改, 导致主从服务器的数据库状态出现不一致时, 让主从服务器的数据库重新回到一致状态。同步当客户端向从服务器发送SLAVEOF命令, 要求从服务器复制主服务器时, 从服务...原创 2019-10-15 21:30:24 · 3047 阅读 · 30 评论 -
redis——为什么选择了跳表而不是红黑树?
跳表是个啥东西请看这个文章。我们知道,节点插入时随机出一个层数,仅仅依靠一个简单的随机数操作而构建出来的多层链表结构,能保证它有一个良好的查找性能吗?为了回答这个疑问,我们需要分析skiplist的统计性能。在分析之前,我们还需要着重指出的是,执行插入操作时计算随机数的过程,是一个很关键的过程,它对skiplist的统计特性有着很重要的影响。这并不是一个普通的服从均匀分布的随机数,它的计算...原创 2019-10-14 20:32:33 · 9544 阅读 · 88 评论 -
redis——HyperLogLog
HyperLogLog 是一种概率数据结构,用来估算数据的基数。数据集可以是网站访客的 IP 地址,E-mail 邮箱或者用户 ID。基数就是指一个集合中不同值的数目,比如 a, b, c, d 的基数就是 4,a, b, c, d, a 的基数还是 4。虽然 a 出现两次,只会被计算一次。使用 Redis 统计集合的基数一般有三种方法,分别是使用 Redis 的 HashMap,BitM...原创 2019-10-14 17:19:26 · 3521 阅读 · 32 评论 -
redis——Redis中的LRU算法改进
redis通常使用缓存,是使用一种固定最大内存的使用。当数据达到可使用的最大固定内存时,我们需要通过移除老数据来获取空间。redis作为缓存是否有效的重要标志是如何寻找一种好的策略:删除即将需要使用的数据是一种糟糕的策略,而删除那些很少再次请求的数据则是一种好的策略。在其他的缓存组件还有个命中率,仅仅表示读请求的比例。访问一个缓存中的keys通常不是分布式的。然而访问经常变化,这意味着不经常访问...翻译 2019-10-14 10:44:36 · 3581 阅读 · 33 评论 -
redis——数据结构和对象的使用介绍
redis官网微软写的windows下的redis我们下载第一个额案后基本一路默认就行了安装后,服务自动启动,以后也不用自动启动。出现这个表示我们连接上了。redis命令参考链接String字符串结构struct sdshdr{ //记录buf数组中已使用字节的数量 int len; //记录buf数组中未使用的数量 ...原创 2019-10-12 19:56:30 · 4157 阅读 · 45 评论 -
redis——对象
刚写了redis主要的数据结构:动态字符串、双端链表、字典、压缩列表、整数集合、跳表等redis肯定不能直接使用这些数据结构来实现数据库,它用这些数据库建立了一个对象系统,包含:字符串对象、列表对象、哈希对象、集合对象、有序集合对象我们可以针对不同的使用场景,为对象设置多种分不同的数据结构实现,从而优化对象在不同场景下的效率。键值对对于redis的键值对来说:key只有字符...原创 2019-04-18 14:10:19 · 3725 阅读 · 0 评论 -
跳表介绍和实现
想慢慢的给大家自然的引入跳表。想想,我们1)在有序数列里搜索一个数2)或者把一个数插入到正确的位置都怎么做?很简单吧对于第一个操作,我们可以一个一个比较,在数组中我们可以二分,这样比链表快对于第二个操作,二分也没什么用,因为找到位置还要在数组中一个一个挪位置,时间复杂度依旧是o(n)。那我们怎么发明一个查找插入都比较快的结构呢?可以打...原创 2019-04-18 13:08:19 · 14051 阅读 · 108 评论 -
LRU介绍和实现
LRU全称是LeastRecently Used,即最近最久未使用的意思。LRU算法的设计原则是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据淘汰。(这一段是找的,让大家理解一下什么是LRU)。说一下我们什么时候见到过LRU:其实老师们肯定都给大家举过这么个例子:你在图书馆,你把书架子里的...原创 2019-04-17 18:22:01 · 5136 阅读 · 59 评论 -
redis——数据结构(整数集合,压缩列表)
4、整数集合整数集合(intset)是 Redis 用于保存整数值的集合抽象数据结构, 可以保存int16_t、int32_t、int64_t的整数值, 并且保证集合中不会出现重复元素。实现较为简单:typedef struct intset { // 编码方式 uint32_t encoding; // 集合包含的元素数量 uint32_...原创 2019-04-17 15:57:12 · 3477 阅读 · 27 评论 -
redis——数据结构(字典、链表、字符串)
1 字符串redis并未使用传统的c语言字符串表示,它自己构建了一种简单的动态字符串抽象类型。在redis里,c语言字符串只会作为字符串字面量出现,用在无需修改的地方。当需要一个可以被修改的字符串时,redis就会使用自己实现的SDS(simple dynamic string)。比如在redis数据库里,包含字符串的键值对底层都是SDS实现的,不止如此,SDS还被用作缓冲区(buff...原创 2019-04-16 18:27:29 · 4454 阅读 · 27 评论 -
redis——发布和订阅
频道的订阅和退订当一个客户端执行SUBSCRIBE命令, 订阅某个或某些频道的时候, 这个客户端与被订阅频道之间就建立起了一种订阅关系。Redis 将所有频道的订阅关系都保存在服务器状态的pubsub_channels字典里面, 这个字典的键是某个被订阅的频道, 而键的值则是一个链表, 链表里面记录了所有订阅这个频道的客户端:struct redisServer { ...原创 2019-10-10 16:17:41 · 3060 阅读 · 32 评论 -
redis——数据库
redis服务器将所有数据库都保存在redis/redisServer中,数组db存放所有数据库,每一项是一个redisdb结构。dbnum代表数据库数量。客户端有一个指针指向当前数据库,可以切换,也就是移动指针。键空间现在稍微介绍一下redisdb结构,它的字典保存了所有键值对键空间的键也就是数据库的键, 每个键都是一个字符串对象。键空间的值也就是数据库的值, 每个值可以是字...原创 2019-04-18 17:51:31 · 3648 阅读 · 28 评论 -
redis——持久化
因为redis是内存数据库,他把数据都存在内存里,所以要想办法实现持久化功能。RDBRDB持久化可以手动执行,也可以配置定期执行,可以把某个时间的数据状态保存到RDB文件中,反之,我们可以用RDB文件还原数据库状态。 生成有两个命令可以生成RDB文件:SAVE命令由服务器进程直接执行保存操作,所以该命令会阻塞服务器,服务器不能接受其他指令。 BGSAVE命令由子进程...原创 2019-04-18 23:12:40 · 4109 阅读 · 29 评论 -
redis原理总结
数据结构(字典、链表、字符串)数据结构(整数集合,压缩列表)数据结构(跳表介绍和手撕)LRU介绍和实现对象(字符串对象、列表对象、哈希对象、集合对象、有序集合总结)数据库简介数据持久化持续更新。。。...原创 2019-04-19 18:57:39 · 3585 阅读 · 46 评论 -
redis——事件
redis服务器是一个事件驱动程序。需要处理两类事件:1)文件事件:redis是通过套接字与客户端或者其他服务器连接的,而文件事件就是服务器对套接字操作的抽象。2)时间事件:服务器对一些定时操作的抽象。文件事件redis基于reactor模式开发了自己的网络事件处理器,这个处理器被称作文件事件处理器,它使用IO多路复用程序来同时监听多个套接字, 并根据套接字目前执行的任务来为套...原创 2019-06-11 16:54:59 · 3178 阅读 · 27 评论 -
redis——客户端
redis服务器是典型的一对多服务器,通过使用由IO多路复用技术实现的文件事件处理器,redis服务器使用了单线程单进程的方式来处理请求。客户端的属性描述符客户端状态的fd属性记录了客户端正在使用的套接字描述符:typedef struct redisClient { // ... int fd; // ...} redisClient;伪客...原创 2019-06-11 17:52:33 · 3040 阅读 · 0 评论 -
redis——事务
Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:批量操作在发送 EXEC 命令前被放入队列缓存。 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。一个事务从开始到执行会经历以下三个阶段:开始事务。 命令入队。 执行事务。以下是一个事务的例子, 它先以M...原创 2019-10-10 18:59:43 · 4143 阅读 · 31 评论 -
redis——命令请求的执行过程
发送命令请求当用户在客户端中键入一个命令请求时, 客户端会将这个命令请求转换成协议格式, 然后通过连接到服务器的套接字, 将协议格式的命令请求发送给服务器。读取命令请求当客户端与服务器之间的连接套接字因为客户端的写入而变得可读时, 服务器将调用命令请求处理器来执行以下操作:读取套接字中协议格式的命令请求, 并将其保存到客户端状态的输入缓冲区里面。 对输入缓冲区中的命令请求进行分析...原创 2019-10-11 18:30:11 · 3903 阅读 · 37 评论 -
redis——缓存击穿/穿透/雪崩
缓存穿透一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就去后端系统查找(比如DB)。一些恶意的请求会故意查询不存在的key,请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透。如何避免?1:对查询结果为空的情况也进行缓存,这样,再次访问时,缓存层会直接返回空值。缓存时间设置短一点,或者该key对应的数据insert了之后清理缓存。2:对...原创 2019-10-11 18:43:19 · 3962 阅读 · 64 评论 -
何为布隆过滤器
问题的提出我们有一个不安全网页的黑名单,包含了100亿个黑名单网页的URL,每个网页URL最多占用64B.。现在我们要设计一个网页过滤系统,这个系统要判断该网页是否在黑名单里,但是我们的空间有限,只有30GB.允许有万分之一的判断失误布隆过滤器我们可以把所有的URL保存起来,比如放到hashmap里,但是64B*100亿=640GB,不符合要求。布隆过滤器(Bloom Fi...原创 2019-06-15 21:42:25 · 5838 阅读 · 40 评论 -
redis qsort源码阅读
/* The following is the NetBSD libc qsort implementation modified in order to * support partial sorting of ranges for Redis. * * Copyright(C) 2009-2012 Salvatore Sanfilippo. All rights reserved. ...原创 2019-10-09 21:19:14 · 2935 阅读 · 27 评论