Redis

你知道Redis可以实现延迟队列吗?

旧时模样 提交于 2020-08-19 00:52:12
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 最近,又重新学习了下Redis,深深被Redis的魅力所折服,我才知道Redis不仅能快还能慢(我想也这么优秀o(╥﹏╥)o),简直是个利器呀。 好了,接下来回到我们的话题,我们都知道Redis是一种基于内存的单进程单线程数据库(Redis6.0开始之后支持多线程啦!),处理速度都非常快。那么为何Redis又能慢呢?原来,这里说的慢是指Redis可以设置一些参数达到慢处理的结果。(这就是为什么Redis既能快又能慢啦!) 那接下来开始讲讲我们的楷模Redis在队列中如何实现延时的情况: 在我们日常生活中,我们可以发现, 在淘宝、京东等购物平台上下单,超过一定时间未付款,订单会自动取消。 打车的时候,在规定时间没有车主接单,平台会取消你的单并提醒你暂时没有车主接单。 点外卖的时候,如果商家在10分钟还没接单,就会自动取消订单。 收快递的时候,如果我们没有点确认收货,在一段时间后程序会自动完成订单。 在平台完成订单后,如果我们没有在规定时间评论商品,会自动默认买家不评论。 .......还有很多这样的场景。 这时,我们可以想想为什么要这样做? 因为这样可以保证商品的库存可以释放给其他人购买,你可以不用一直等待打车却得不到回复,你可以及时换一家店点到外卖。

Python 程序报错崩溃后,如何倒回到崩溃的位置?

流过昼夜 提交于 2020-08-18 23:31:15
假设我们有一段程序,从 Redis 中读取数据,解析以后提取出里面的 name 字段: 很多人学习python,不知道从何学起。 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。 很多已经做案例的人,却不知道如何去学习更加高深的知识。 那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码! QQ群:1097524789 import json import redis client = redis.Redis() def read (): while True: data = client.lpop( 'info') if data: yield json.loads(data) else: break def parse (): for data in self.read(): print(data[ 'name']) if __name__ == '__main__': parse() 代码的逻辑本身很简单,从 Redis 中一条一条读取数据,读到的数据是 JSON 字符串,所以先使用json.loads解析成字典。然后读取字典中的name对应的值。一直读到Redis 列表为空。 我们运行一下看看: 报错了,说明Redis 中的某一条数据有问题。你想看看这条有问题的数据,但是现在程序已经崩溃了,进程结束了

Docker学习笔记

佐手、 提交于 2020-08-18 23:29:38
五、Docker 1、简介 Docker 是一个开源的应用容器引擎;是一个轻量级容器技术; Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像; 运行中的这个镜像称为容器,容器启动是非常快速的。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1hzHsWsw-1592984462082)(E:/springboot核心篇+整合篇-尚硅谷/01尚硅谷SpringBoot核心技术篇/Spring Boot 笔记+课件/images/搜狗截图20180303145450.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LhbSvZKc-1592984462085)(E:/springboot核心篇+整合篇-尚硅谷/01尚硅谷SpringBoot核心技术篇/Spring Boot 笔记+课件/images/搜狗截图20180303145531.png)] 2、核心概念 docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统之上); docker客户端(Client):连接docker主机进行操作; docker仓库(Registry):用来保存各种打包好的软件镜像; docker镜像(Images):软件打包好的镜像

.Net core+Reds如何实现Aop缓存

匆匆过客 提交于 2020-08-18 23:28:37
.Net core+Reds如何实现Aop缓存 前言 在实际开发的场景中,有很多需要缓存的数据,为了减少重复代码的编写,想采用Aop的方式来实现切面编程减少对以有业务代码的改动和侵入性。 在传统的 .Net Framework项目中实现Aop有很多简单的方式,但是在 .Net Core中尤其是1.X版本笔者没有找到比较好的解决方案采用了一个三方开源的Aop库,下面会写出来。 准备 本次采用的环境是 .Net Core 1.1版本 本次使用的Aop 开源库是 AspectCore 0.1.2版本 实践 Aop顾名思义面向切面编程,是一种通过预编译和运行时动态代理来实现的一种技术,本文中采用了三方开源的Aop库 AspectCore 是.Net Core 中一个轻量级和模块化的Aop 解决方案 首先创建一个 缓存特性 CacheAttribute 继承 AspectCore中的 InterceptorAttribute并且重写 InterceptorAttribute中的 Invoke方法 代码 如下 1 public async override Task Invoke(AspectContext context, AspectDelegate next) 2 { 3 try 4 { 5 // 用方法名称+入参 生成Key 6 string key = context.Proxy

Redis错误配置详解

无人久伴 提交于 2020-08-18 23:22:22
Redis提供了许多提高和维护高效内存数据库使用的工具。在无需额外配置应用层的前提下,Redis独特的数据类型、指令和命令调优就可以满足应用的需求,但是错误的配置,更确切的说那些机外设备可能导致操作麻烦和性能问题。虽然导致了一些令人头疼的问题,但是解决方案是存在的,而且解决方案可能比我们预期的简单。 本系列文章介绍了使用Redis时遇到的一些令人头疼的问题,以及该解决这些问题。这些内容基于我们在运行上千个Redis数据库实例时的真实经历。 复制缓冲区限制 复制缓冲区主从服务器同步数据时保存数据的内存区域。在一个完整的主从同步中,初始化阶段同步时,主服务器在复制缓冲区中保存数据的变化。初始化阶段完成后,缓冲的内容发送到从服务器。这个过程可能会遇到缓冲区的容量限制,达到最大容量时复制会重新开始。为了避免这种情况,缓冲区需要依据复制过程中变化的类型和数量进行初始化配置。例如,一个小缓冲区可以存储少量的变化数据,但当变化比较多、比较大时,我们需要大缓冲区。一个更复杂的解决方案会更详细的设置缓冲区,避免冗长、大的复杂过程耗尽缓冲区(如果缓冲区太小)。最终,这个解决方案需要微调特定的数据库。 当256MB的硬限制到达时,或者软限制到达且持续60秒时,默认的复制链路会断裂(导致同步从头开始)。许多情况下,特别是写负载高和从服务器带宽不足的情况下,负载过程都无法结束。这可能导致无限循环

关于对redis 高并发和性能优秀的理解(自己的理解,原创,比较形象的总结,如果有不足的地方欢迎指出)

此生再无相见时 提交于 2020-08-18 21:35:18
线程安全: 一个线程执行了判断 还没来得及执行逻辑 另一个线程就开始进入线程判断。 所以说使用redis来执行逻辑操作。因为redis是单线程 并且储存在磁盘响应快 执行多少次就减多少次。 Redis有没有线程安全问题。Redis是分布式的 ,有可能两个redis 的decr num得到同样的结果??? 不会,redis是单线程 单进程的软件 , 非阻塞线程(简单理解 就是一个进程进去可以服务多个) 单线程 性能略低 吞吐量比多线程少 (redis我把他看成是高铁,在单一轨道上高速行驶–单线程,且不会和其他车撞车,到达同一个地方肯定是有先后顺序的。而且可以拉很多人—非阻式。 而mysql数据库相当于是摩托车在公路上行驶,并排可以有很多摩托车,速度相对来说慢,而且有可能同时到达终点站,如果要解决同时到达终点站的问题,就需要上同步锁,让一个摩托到达终点然后再让下一个摩托到达终点,这样就很慢了。) 但是redis的吞吐量 无论是多线程还是单线程的频静不在redis本身 在网络带宽,所以单线程就足够了,而且单线程不用考虑线程安全 浪费cpu的切换资源 。 所以在处理大量增删数据的时候,使用redis单线程和非阻式等特性去处理集中的访问,然后再通过redis去同步到mysql或者其他关系型数据库中。 就像去存100万块钱一样,在外面数钱不安全,先在家把钱数好100万,再去银行一次性存进去

4.监控Redis

柔情痞子 提交于 2020-08-18 21:33:33
prometheus监控redis需要用到redis_exporter。 redis_exporter 项目地址: https://github.com/oliver006/redis_exporter 1、安装部署 我这里的redis部署在192.168.0.254之上,而prometheus服务端是在192.168.75.11上,这个时候,监控的工具redis_exporter可以部署在这两台主机任一一台上,只不过需要注意的是,在配置prometheus.yaml添加监控目标的时候,注意填写对应ip即可。 我这里则部署在了Prometheus Server之上。 cd /usr/local/src wget https://github.com/oliver006/redis_exporter/releases/download/v1.6.1/redis_exporter-v1.6.1.linux-amd64.tar.gz tar -zxv -f redis_exporter-v1.6.1.linux-amd64.tar.gz -C /usr/local/ cd /usr/local/ mv redis_exporter-v1.6.1.linux-arm64/ redis_exporter 2、redis_exporter 用法 解压后只有一个二进制程序就叫 redis

Docker运行Django

↘锁芯ラ 提交于 2020-08-18 21:31:10
编写Dockerfile FROM python:3.6.4 RUN mkdir /code \ &&apt-get update \ &&apt-get -y install freetds-dev \ &&apt-get -y install unixodbc-dev COPY app /code COPY requirements.txt /code RUN pip install -r /code/requirements.txt -i https://pypi.douban.com/simple WORKDIR /code CMD ["/bin/bash","run.sh"] FROM:Dockerfile中的一个非常重要的命令,作用是指定一个基础镜像来进行构建流程。比如上面指定了python3.6.4作为基础镜像,后续的一切操作都会以这个镜像作为基础来进行定制,如果不存在,会从官网下载。FROM必须是Dockerfile首个命令。 RUN :Dockerfile执行命令最核心的部分,在构建镜像的过程中执行参数。 COPY:复制文件。COPY <源路径> <目标路径> WORKDIR:工作目录,若不存在,会自动帮你创建。 CMD:容器启动命令,Docker 不是虚拟机,容器就是进程。既然是进程,那么在启动容器的时候,需要指定所运行的程序及参数。 CMD

日均20亿流量:携程机票查询系统的架构升级

假装没事ソ 提交于 2020-08-18 21:01:59
携程机票查询系统,日均20亿流量,且要求高吞吐,低延迟的架构设计。于是,提升缓存的效率以及实时计算模块长尾延迟,成为制约机票查询系统性能的关键。本文是携程集团机票业务技术总监宋涛在「云加社区沙龙online」的分享整理,着重介绍了携程机票查询系统在缓存和实时计算两个领域的架构提升。 携程是OTA行业内首屈一指的互联网企业,而在携程内部,机票搜索又是使用最频繁的服务(没有之一)。所以,我们所面对的一些技术问题,可能会对很多中型企业有一些借鉴作用,希望今天的分享能给大家带来一些收获。 点击视频,查看完整直播回放 一、 机票搜索服务概述 1. 携程机票搜索的业务特点 首先简单介绍一下机票的搜索业务:大家可能都用过携程,当你去输入目的地,然后点击搜索的时候,我们的后台就开始了紧张的工作。我们基本上会在一两秒的时间,将最优的结果反馈给用户。这个业务存在以下业务特点。 (1)高流量、低延时、高成功率 首先,我们不得不面对非常高的流量,同时,我们对搜索结果要求也很高——成功率要高,不能说查询失败,或者强说成功,我们希望能够反馈给用户最优质最新鲜的数据。 (2)多引擎聚合,SLA不一 携程机票搜索的数据来源于哪儿呢?有很大一部分结果来源于我们自己的机票运价引擎。除此之外,为了补充产品丰富性,我们还引入了国际上的一些GDS、SLA,比如我们说的联航。我们将外部的引擎

springboot application.yml的常用配置

孤人 提交于 2020-08-18 20:39:24
原文地址: https://blog.csdn.net/lxh18682851338/article/details/78661607 1. application.yml # mysql 的数据库配置 spring: datasource: url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8 username: root password: driver-class-name: com.mysql.jdbc.Driver server: port: 8081 context-path: /spring-boot-demo # 访问地址:http://localhost:8081/spring-boot-demo/hi # tomcat: # uri-encoding: UTF-8 # session: # timeout: # jsp # mvc: # view: # prefix: /WEB-INF/ # 页面默认前缀目录 # suffix: .jsp # 响应页面默认后缀 #热部署 devtools: restart: enabled: true #热部署生效 #设置重启的目录 additional-paths: src