RedisClient

一次依赖注入不慎引发的一连串事故

只愿长相守 提交于 2020-07-27 05:13:12
一次依赖注入不慎引发的一连串事故 起因和现象 偶尔会看到线上服务启动的时候第一波流量进来之后, 迟迟没有任何的响应,同时服务的监控检查接口正常, 所以 K8S 集群认为服务正常,继续放入流量。 查看日志基本如下: [2020-06-05T13:00:30.7080743+00:00 Microsoft.AspNetCore.Hosting.Diagnostics INF] Request starting HTTP/1.0 GET http://172.16.2.52/v1/user/test [2020-06-05T13:00:30.7081525+00:00 Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware DBG] The request path /v1/user/test/account-balance does not match a supported file type [2020-06-05T13:00:31.7074253+00:00 Microsoft.AspNetCore.Server.Kestrel DBG] Connection id "0HM09A1MAAR21" started. [2020-06-05T13:00:31.7077051+00:00 Microsoft.AspNetCore

一次依赖注入不慎引发的一连串事故

天涯浪子 提交于 2020-07-24 00:32:39
一次依赖注入不慎引发的一连串事故 起因和现象 偶尔会看到线上服务启动的时候第一波流量进来之后, 迟迟没有任何的响应,同时服务的监控检查接口正常, 所以 K8S 集群认为服务正常,继续放入流量。 查看日志基本如下: [2020-06-05T13:00:30.7080743+00:00 Microsoft.AspNetCore.Hosting.Diagnostics INF] Request starting HTTP/1.0 GET http://172.16.2.52/v1/user/test [2020-06-05T13:00:30.7081525+00:00 Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware DBG] The request path /v1/user/test/account-balance does not match a supported file type [2020-06-05T13:00:31.7074253+00:00 Microsoft.AspNetCore.Server.Kestrel DBG] Connection id "0HM09A1MAAR21" started. [2020-06-05T13:00:31.7077051+00:00 Microsoft.AspNetCore

redis详解(包含使用场景)

北战南征 提交于 2020-05-08 23:49:45
本文围绕以下几点进行阐述 1、为什么使用redis 2、使用redis有什么缺点 3、单线程的redis为什么这么快 4、redis的数据类型,以及每种数据类型的使用场景 5、redis的过期策略以及内存淘汰机制 6、redis和数据库双写一致性问题 7、如何应对缓存穿透和缓存雪崩问题 8、如何解决redis的并发竞争问题 1、为什么使用redis 分析:博主觉得在项目中使用redis,主要是从两个角度去考虑:性能和并发。当然,redis还具备可以做分布式锁等其他功能,但是如果只是为了分布式锁这些其他功能,完全还有其他中间件(如zookpeer等)代替,并不是非要使用redis。因此,这个问题主要从性能和并发两个角度去答。 回答:如下所示,分为两点 (一)性能 如下图所示,我们在碰到需要执行耗时特别久,且结果不频繁变动的SQL,就特别适合将运行结果放入缓存。这样,后面的请求就去缓存中读取,使得请求能够迅速响应。 (二)并发 如下图所示,在大并发的情况下,所有的请求直接访问数据库,数据库会出现连接异常。这个时候,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问数据库。 2、使用redis有什么缺点 分析:大家用redis这么久,这个问题是必须要了解的,基本上使用redis都会碰到一些问题,常见的也就几个。 回答:主要是四个问题 (一

三点须知:当我们在开发过程中需要用到分布式缓存Redis的时候

☆樱花仙子☆ 提交于 2020-05-08 23:48:24
当我们在开发过程中需要用到 分布式缓存Redis 的时候,我们首先要明白缓存在系统中用来做什么? 1. 少量数据存储,高速读写访问。通过数据全部in-momery 的方式来保证高速访问,同时提供数据落地的功能,实际这正是Redis最主要的适用场景。 2. 海量数据存储,分布式系统支持,数据一致性保证,方便的集群节点添加/删除。Redis3.0以后开始支持集群,实现了半自动化的数据分片,不过需要smart-client的支持。 华为云分布式缓存Redis ,目前已经进入 Redis5.0 公测阶段,公测阶段注册既能免费使用,那么我们在开发过程中需要用到Redisde 时候,需要明白哪些问题呢? 下面小编给大家一一道来。 一、为什么使用 Redis? 我觉得在项目中使用 Redis,主要是从两个角度去考虑:性能和并发。 当然,Redis 还具备可以做分布式锁等其他功能,但是如果只是为了分布式锁这些其他功能,完全还有其他中间件,如 ZooKpeer 等代替,并不是非要使用 Redis。因此,这个问题主要从性能和并发两个角度去答。 性能: 如下图所示,我们在碰到需要执行耗时特别久,且结果不频繁变动的 SQL,就特别适合将运行结果放入缓存。这样,后面的请求就去缓存中读取,使得请求能够迅速响应。 题外话:忽然想聊一下这个迅速响应的标准。根据交互效果的不同,这个响应时间没有固定标准。

Docker安装Redis并介绍漂亮的可视化客户端进行操作

末鹿安然 提交于 2020-05-03 13:49:58
原文: Docker安装Redis并介绍漂亮的可视化客户端进行操作 1 简介 Redis 是使用 ANSI C 语言开发的基于 Key-Value 的高性能 NoSQL 数据库,在解决高并发、高可用等一系列问题中,它扮演着重要的角色。它的优势主要有: 速度快。 持久化。 原子性。 数据结构丰富。 多语言支持。 本文将简单介绍如何通过 Docker 安装 Redis ,并简单使用与操作。 2 Docker安装与使用 2.1 Docker安装 拉取 Redis 镜像,选择目前最新的稳定版本 5.0.8 : $ docker pull redis:5.0.8 建议配置成阿里云的镜像,速度会快很多。拉取成功后,可以通过下面命令检查: $ docker images |grep redis 启动 Redis : $ docker run -itd --name redis -p 6379:6379 redis:5.0.8 通过下面命令检查是否启动成功: $ docker ps|grep redis 进入容器里面: $ docker exec -it redis /bin/bash 在容器里面通过 Redis 命令行工具连接到数据库: $ redis-cli -h localhost -p 6379 当然,也可以不指定 hostname 和 port ,默认就是 127.0.0.1:6379

使用redis+flask维护动态代理池

孤人 提交于 2020-05-01 14:41:08
在进行网络爬虫时,会经常有封ip的现象。可以使用代理池来进行代理ip的处理。 代理池的要求:多站抓取,异步检测。定时筛选,持续更新。提供接口,易于提取。 代理池架构:获取器,过滤器,代理队列,定时检测。 使用https://github.com/Germey/ProxyPool/tree/master/proxypool代码进行分析。 run.py里面的代码 from proxypool.api import app from proxypool.schedule import Schedule def main(): s = Schedule() s.run() app.run() if __name__ == ' __main__ ' : main() 首先运行了一个调度器,接着运行了一个接口。 调度器schedule.py代码 import time from multiprocessing import Process import asyncio import aiohttp try : from aiohttp.errors import ProxyConnectionError,ServerDisconnectedError,ClientResponseError,ClientConnectorError except : from aiohttp import

【高频 Redis 面试题】Redis 事务是否具备原子性?

北城余情 提交于 2020-04-28 05:22:01
一、Redis 事务的实现原理 一个事务从开始到结束通常会经历以下三个阶段: 1、事务开始 客户端发送 MULTI 命令,服务器执行 MULTI 命令逻辑。 服务器会在客户端状态(redisClient)的 flags 属性打开 REDIS_MULTI 标识,将客户端从非事务状态切换到事务状态。 void multiCommand(redisClient *c) { // 不能在事务中嵌套事务 if (c->flags & REDIS_MULTI) { addReplyError(c,"MULTI calls can not be nested"); return; } // 打开事务 FLAG c->flags |= REDIS_MULTI; addReply(c,shared.ok); } 2、命令入队 接着,用户可以在客户端输入当前事务要执行的多个命令。 当客户端切换到事务状态时,服务器会根据客户端发来的命令来执行不同的操作。 如果客户端发送的命令为 EXEC、DISCARD、WATCH、MULTI 四个命令的其中一个,那么服务器立即执行这个命令。 与此相反,如果客户端发送的命令是 EXEC、DISCARD、WATCH、MULTI 四个命令以外的其他命令,那么服务器并不立即执行这个命令。 首先检查此命令的格式是否正确,如果不正确,服务器会在客户端状态(redisClient

Docker安装Redis并介绍漂亮的可视化客户端进行操作

拜拜、爱过 提交于 2020-04-22 01:19:11
1 简介 Redis 是使用 ANSI C 语言开发的基于 Key-Value 的高性能 NoSQL 数据库,在解决高并发、高可用等一系列问题中,它扮演着重要的角色。它的优势主要有: 速度快。 持久化。 原子性。 数据结构丰富。 多语言支持。 本文将简单介绍如何通过 Docker 安装 Redis ,并简单使用与操作。 2 Docker安装与使用 2.1 Docker安装 拉取 Redis 镜像,选择目前最新的稳定版本 5.0.8 : $ docker pull redis:5.0.8 建议配置成阿里云的镜像,速度会快很多。拉取成功后,可以通过下面命令检查: $ docker images |grep redis 启动 Redis : $ docker run -itd --name redis -p 6379:6379 redis:5.0.8 通过下面命令检查是否启动成功: $ docker ps|grep redis 进入容器里面: $ docker exec -it redis /bin/bash 在容器里面通过 Redis 命令行工具连接到数据库: $ redis-cli -h localhost -p 6379 当然,也可以不指定 hostname 和 port ,默认就是 127.0.0.1:6379 。 连接成功后就可以操作了: 通过下面命令,可以对所安装的

C#两大知名Redis客户端连接哨兵集群的姿势

戏子无情 提交于 2020-04-17 08:28:24
【推荐阅读】微服务还能火多久?>>> 原文: C#两大知名Redis客户端连接哨兵集群的姿势 前言 前面利用《Docker-Compose搭建Redis高可用哨兵集群》, 我们的思路是将Redis、Sentinel、Redis Client App链接到同一个网桥网络,这个网桥内的Redis Client App就可以使用ContainerIP访问网桥内任意redis节点。 同一网桥网络访问 规避了Docker上发生的NAT,端口映射的复杂性, 但实际上并不是最常规的做法(今天咱们也不说Docker host形式部署Redis-Sentinel了)。 Redis Client App独立组网遇到的问题 很多时候,Redis-Sentinel与Redis Client App独立组网,涉及Docker宿主机NAT转换和 Port映射。 Sentinel,Docker或其他形式的网络地址转换或端口映射应谨慎混合。 我实际测试发现,如果将前文Sentinel.conf中Master(ContainerIP,Port) 换成(宿主机IP,映射Port), 确实会引起混乱,无法找到正确的Slaves, 无法正常故障转移。 为了解决Redis-Sentinel在Docker环境下因为NAT,Forward Port导致的无法正确获知Slaves和正确故障转移的问题。 Redis3.2之后可以

Redis高级客户端Lettuce详解

六眼飞鱼酱① 提交于 2020-04-16 08:35:22
【推荐阅读】微服务还能火多久?>>> 前提 Lettuce 是一个 Redis 的 Java 驱动包,初识她的时候是使用 RedisTemplate 的时候遇到点问题 Debug 到底层的一些源码,发现 spring-data-redis 的驱动包在某个版本之后替换为 Lettuce 。 Lettuce 翻译为 生菜 ,没错,就是吃的那种生菜,所以它的 Logo 长这样: 既然能被 Spring 生态所认可, Lettuce 想必有过人之处,于是笔者花时间阅读她的官方文档,整理测试示例,写下这篇文章。编写本文时所使用的版本为 Lettuce 5.1.8.RELEASE , SpringBoot 2.1.8.RELEASE , JDK [8,11] 。超长警告:这篇文章断断续续花了两周完成,超过4万字..... Lettuce简介 Lettuce 是一个高性能基于 Java 编写的 Redis 驱动框架,底层集成了 Project Reactor 提供天然的反应式编程,通信框架集成了 Netty 使用了非阻塞 IO , 5.x 版本之后融合了 JDK1.8 的异步编程特性,在保证高性能的同时提供了十分丰富易用的 API , 5.1 版本的新特性如下: 支持 Redis 的新增命令 ZPOPMIN, ZPOPMAX, BZPOPMIN, BZPOPMAX 。 支持通过 Brave