Redis

跳跃表(Skip Links)实现(Golang版)

柔情痞子 提交于 2020-12-28 01:22:33
目录 跳跃表(Skip Links)实现(Golang版) 1. 介绍 2. 跳跃表在Redis中的应用 3. 跳跃表实现(Golang版) 3.1 实现介绍 3.2 实现源码 附录 参考文档 跳跃表(Skip Links)实现(Golang版) 1. 介绍 跳跃表(Skip Lists)是一种随机化的数据, 由 William Pugh 在论文 《Skip lists: a probabilistic alternative to balanced trees》 中提出, 跳跃表以有序的方式在层次化的链表中保存元素, 效率和平衡树媲美 —— 查找、删除、添加等操作都可以在对数期望时间下完成, 并且比起平衡树来说, 跳跃表的实现要简单直观得多。 本文注重跳跃表的实现,关于跳跃表的原理介绍,网上有很多优质的介绍文档,这里就不再介绍跳跃表的实现原理了。 2. 跳跃表在Redis中的应用 Redis的有序集合(sorted set)是基于跳跃表实现的,相比 William Pugh 论文中描述的跳跃表,Redis做了一些修改,其中包括: 允许重复的 score 值:多个不同的 member 的 score 值可以相同。 进行对比操作时,不仅要检查 score 值,还要检查 member :当 score 值可以重复时,单靠 score 值无法判断一个元素的身份,所以需要连 member

2020技能大赛改革赛云计算赛项 先电2.4 paas 容器部分记录

六眼飞鱼酱① 提交于 2020-12-28 01:20:05
1.部分 (1) 任务1 Docker CE及私有仓库安装任务(5分) 1.在master、node1、node2、cicd-node各节点中分别安装DockerCE和docker-compose。(1分) 懒得写 2.在cicd-node节点安装Registry私有仓库,导入/opt/containerk8s/docker/images目录下所有镜像,并推送到Registry私有仓库。 懒得写 3.在node1节点上从仓库中拉取mysql:latest和wordpress:latest镜像,创建/root/wproject/docker-compse.yaml文件,编排部署wordpress,并设置 restart策略。 version: '2' services: mysql: image: mysql:5.6 expose: - "3306" restart: always environment: - MYSQL_ROOT_PASSWORD=123456 wordpress: image: wordpress:latest ports: - "82:80" restart: always environment: - WORDPRESS_DB_HOST=mysql - WORDPRESS_DB_USER=root - WORDPRESS_DB_PASSWORD=123456

Redis~分布式事务和分布式事务锁

≡放荡痞女 提交于 2020-12-28 01:17:20
文章目录 前话 讲分布式事务锁前的几个概念 Redis分布式事务锁原理 核心思想 问题一 问题一 问题三 前话 大家都知道redis是一个可以高速运行在缓存级别的数据库, 他的高速原因主要有几个原因 绝大部分请求是纯粹的内存操作(非常快速),避免了与硬盘的接触 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除 使用大量的hash思想的k v键值对, 获取效率为O(1) 依靠非阻塞的IO多路复用原则,使redis形成单线程去执行命令的服务器, 避免了不必要的阻塞和上下文切换和竞争条件 redis采用IO复用实现单线程的方式, 将命令任务分装在队列中让一个线程去串行化执行, 自然避免了线程安全问题, 这也是为什么我们常说redis是基于原子操作的原因 跟多线程相比较,线程切换需要切换到内核进行线程切换,需要消耗时间和资源.而I/O多路复用不需要切换线/进程,效率相对较高,特别是对高并发的应用nginx就是用I/O多路复用,故而性能极佳 但是还有一个问题, 上面说redis是单线程的, 那么就不会有线程安全问题, 那为什么还有让redis支持事务, 还要 要求他使用redis分布式事务锁 没错,大家所熟知的 Redis 确实是单线程模型, 指的是执行 Redis 命令的核心模块是单线程的 ,而不是整个 Redis 实例就一个线程, Redis

redis之BGSAVE堵塞redis原因(fork)

陌路散爱 提交于 2020-12-28 01:14:13
Fork 是造成 BGSAVE 堵塞Redis的主要原因: https://redis.io/topics/latency#latency-generated-by-fork 屏幕快照 2018-07-16 上午11.31.26.png Fork 的机制: Fork 会拷贝父进程的所有状态,包括已分配的内存: “ … the operating system will create a new process that is exactly the same as the parent process. This means all the state that was talked about previously is copied, including open files, register state and all memory allocations, which includes the program code. The return value from the system call is the only way the process can determine if it was the existing process or a new one. The return value to the parent process will be the

Failed to start redis.service: Unit redis-server.service is masked

a 夏天 提交于 2020-12-27 08:33:41
问题 I Installed Redis Server on ubuntu 16.04. but when I try to start the redis service as $ sudo systemctl start redis I receive message: Failed to start redis.service: Unit redis-server.service is masked. I don't have any idea about this error. 回答1: I found the solution. I think it will help for others | systemctl unmask servicename $ sudo systemctl unmask redis-server.service 回答2: if redis.service file is missed in directory path /etc/systemd/system/redis.service so we have to create file into

Failed to start redis.service: Unit redis-server.service is masked

我的未来我决定 提交于 2020-12-27 08:32:25
问题 I Installed Redis Server on ubuntu 16.04. but when I try to start the redis service as $ sudo systemctl start redis I receive message: Failed to start redis.service: Unit redis-server.service is masked. I don't have any idea about this error. 回答1: I found the solution. I think it will help for others | systemctl unmask servicename $ sudo systemctl unmask redis-server.service 回答2: if redis.service file is missed in directory path /etc/systemd/system/redis.service so we have to create file into

秒发4000万数据的缓存方案以及消息优先消费

…衆ロ難τιáo~ 提交于 2020-12-27 00:29:56
诱发问题:MQ是否设置了消息消费顺序? 我发现在mq并发进入消费时并不能保证消息的消费顺序,此时如果同时一万线程对 一个 生产者 一个 消费者的 一个 队列业务互斥进行消费,此时的消费顺序是无序的,同一时刻会造成互斥数据同时存在多份,且发生率高达10%,而目前能想到的解决方案是,redis的消息是存取很快,且有顺序的,所以把mq消费的方法加了分布式锁,但是这效率能不能再次保证呢?不能的,因为你mq存在的意义就是异步消费,如果不是互斥线程,那锁起来反而影响了性能,此时,就要看此时的数据显示重不重要?如果数据重要就锁,如果不重要,最终数据一致就可以了。 那么当每秒4000万数据进行消费,且此时需要对数据进行过滤时如何设计? L1缓存:Springcache+j2cache L2缓存:redis 由于大量的缓存读取会导致 L2 的网络成为整个系统的瓶颈,因此 L1 的目标是降低对 L2 的读取次数, 读取顺序 -> L1 -> L2 -> DB J2Cache 默认使用 Caffeine 作为一级缓存,使用 Redis 作为二级缓存 但是由于此类数据中是存在部分黑名单数据的,此时需要将数据过滤后才能缓存然后消费。 过滤大key数据 放入缓存key分片 队列+mq根据消息优先级去消费 二级缓存 过滤大key数据 由于瞬时数据将达到4000万,一开始的想法是能不能用bitmap去存放数据

Java Web从前端到后台常用框架介绍

拜拜、爱过 提交于 2020-12-26 19:06:12
一、SpringMVC Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。 模型(Model ) 封装了应用程序的数据和一般他们会组成的POJO。 视图(View) 是负责呈现模型数据和一般它生成的HTML输出,客户端的浏览器能够解释。 控制器(Controller ) 负责处理用户的请求,并建立适当的模型,并把它传递给视图渲染。 Spring的web模型 - 视图 - 控制器(MVC)框架是围绕着处理所有的HTTP请求和响应的DispatcherServlet的设计。 Spring Web MVC处理请求的流程 具体执行步骤如下 : 1、 首先用户发送请求————>前端控制器,前端控制器根据请求信息(如URL)来决定选择哪一个页面控制器进行处理并把请求委托给它,即以前的控制器的控制逻辑部分;图2-1中的1、2步骤; 2、 页面控制器接收到请求后,进行功能处理,首先需要收集和绑定请求参数到一个对象,这个对象在Spring Web MVC中叫命令对象,并进行验证,然后将命令对象委托给业务对象进行处理;处理完毕后返回一个ModelAndView

2020复盘58/字节/流利说/百度/搜狐面试!附上我的大厂面经!都得给我冲!

守給你的承諾、 提交于 2020-12-26 17:39:03
前言 其实鄙人不善言辞,这个面经也是随性发挥,想到啥说些啥,更多是对自己开发历程的一些感受和自己学习的方法。不过,最后我想表达的是,在开发过程中每一行代码,每一种设计模式的使用,思考的重点和角度都会有所不同。所以,能够尝试不同的技术栈,从不同的视角来思考并解决问题,融会贯通,才是我个人追求的技术之“道”。 以下内容中,我谈及到的学习方法、学习面试资料,均可以免费分享给大家,希望大家在今年的金九银十里能够发挥顺利,进到自己想进的公司,共勉! 另外我这里为大家准备了一线大厂面试资料和我原创的超硬核PDF技术文档,以及我为大家精心准备的多套大厂面试题(不断更新中) 资料获取方式:转发和评论这篇文章,然后关注小编,点击 传送门 即可打包带走所有资料~ 58 一面 40min 挂 自我介绍 离职原因?为什么这个时候离职? http1.1 http1.0 http2.0 区别 redis长度过长怎么优化?哪个api,数据量超过多少效率会变低? MySQL做过哪些优化?覆盖索引?limit两个参数区别?MySQL分页优化的其他方法 concurrenthashmap如何保证线程安全,说说你的理解 arraylist linkedlist 使用场景 本地线程和守护线程的区别,Thread.setDemon(); 线程状态 线程池参数?线程池为什么用new的不好? 项目:前台如何调后台接口?rpc

Redis平滑升级

牧云@^-^@ 提交于 2020-12-26 17:05:53
先下载新版redis wget http://download.redis.io/releases/redis-6.0.5.tar.gz 解压 tar -zxvf redis-6.0.5.tar.gz 因为我将redis.conf 和 redis-6.0.5 解压后的文件夹分开放的所以不用动直接将redis干掉 注:如果将redis.conf放在了旧的redis-5.0.5目录在一起,你需要将redis_cluster这个目录移出来,编译好后放到redis-6.0.5新版目录中 pkill redis-server 查看下是否干掉了 ps -ef | grep redis 进到存活的服务器里查看集群状态,这个时候集群已经显示有个别redis挂了 redis-cli -c -h (你的reids服务器ip) -p 7001 -a "密码" cluster nodes 更新gcc因为6版本以上的redis需要新版gcc yum -y install gcc sudo yum install -y centos-release-scl sudo yum install -y devtoolset-7 sudo scl enable devtoolset-7 bash 直接进入文件夹编译 cd redis-6.0.9 make && make install 编译成功会提示: Hint: