RedisClient

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

半腔热情 提交于 2020-08-13 18:44:40
一次依赖注入不慎引发的一连串事故 起因和现象 偶尔会看到线上服务启动的时候第一波流量进来之后, 迟迟没有任何的响应,同时服务的监控检查接口正常, 所以 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

【原创】强撸基于 .NET 的 Redis Cluster 集群访问组件

与世无争的帅哥 提交于 2020-08-11 04:04:23
  Hello 大家好,我是TANZAME,我们又见面了。今天我们来聊聊怎么手撸一个 Redis Cluster 集群客户端,纯手工有干货,您细品。   随着业务增长,线上环境的QPS暴增,自然而然将当前的单机 Redis 切换到群集模式。燃鹅,我们悲剧地发现,ServiceStack.Redis这个官方推荐的 .NET 客户端并没有支持集群模式。一通度娘翻墙无果后,决定自己强撸一个基于ServiceStack.Redis的Redis集群访问组件。   话不多说,先上运行效果图:   Redis-Cluster集群使用 hash slot 算法对每个key计算CRC16值,然后对16383取模,可以获取key对应的 hash slot。Redis-Cluster中每个master都会持有部分 slot,在访问key时根据计算出来的hash slot去找到具体的master节点,再由当前找到的节点去执行具体的 Redis 命令(具体可查阅 官方说明文档 )。   由于 ServiceStack.Redis已经实现了单个实例的Redis命令,因此我们可以将即将要实现的 Redis 集群客户端当做一个代理,它只负责计算 key 落在哪一个具体节点(寻址)然后将Redis命令转发给对应的节点执行即可。   ServiceStack.Redis的RedisClient是非线程安全的

【原创】强撸基于 .NET 的 Redis Cluster 集群访问组件

核能气质少年 提交于 2020-08-11 02:45:00
  Hello 大家好,我是TANZAME,我们又见面了。今天我们来聊聊怎么手撸一个 Redis Cluster 集群客户端,纯手工有干货,您细品。   随着业务增长,线上环境的QPS暴增,自然而然将当前的单机 Redis 切换到群集模式。燃鹅,我们悲剧地发现,ServiceStack.Redis这个官方推荐的 .NET 客户端并没有支持集群模式。一通度娘翻墙无果后,决定自己强撸一个基于ServiceStack.Redis的Redis集群访问组件。   话不多说,先上运行效果图:   Redis-Cluster集群使用 hash slot 算法对每个key计算CRC16值,然后对16383取模,可以获取key对应的 hash slot。Redis-Cluster中每个master都会持有部分 slot,在访问key时根据计算出来的hash slot去找到具体的master节点,再由当前找到的节点去执行具体的 Redis 命令(具体可查阅 官方说明文档 )。   由于 ServiceStack.Redis已经实现了单个实例的Redis命令,因此我们可以将即将要实现的 Redis 集群客户端当做一个代理,它只负责计算 key 落在哪一个具体节点(寻址)然后将Redis命令转发给对应的节点执行即可。   ServiceStack.Redis的RedisClient是非线程安全的

redis 队列实现

爱⌒轻易说出口 提交于 2020-08-10 04:19:16
现有项目需要做一个长连接通讯,我打算采用netty+通讯队列实现, 通讯队列最初打算用rabbitMQ或者kafaka,但是考虑到实施的同事的项目部署的问题,就该为现有的redis了,采用的是redis队列 @Component public class RedisClient { private static Logger logger = LoggerFactory.getLogger(RedisClient.class); @Autowired private RedisTemplate<Object, Object> redisTemplate; /** ---------------------------------- redis消息队列 ---------------------------------- */ /** * 存值 * @param key 键 * @param value 值 * @return */ public boolean lpush(String key, Object value) { try { redisTemplate.opsForList().leftPush(key, value); return true; } catch (Exception e) { logger.error("e:",e); return false; }

Redis学习笔记(十) 客户端

白昼怎懂夜的黑 提交于 2020-08-06 21:23:12
Redis服务器是典型的一对多服务器程序:一个服务器可以与多个客户端建立网络连接,每个客户端可以向服务器发送命令请求,而服务器则接收并处理客户端发送的命令请求,并向客户端返回命令回复。 通过使用由I/O多路复用技术实现的文件事件处理器,Redis服务器使用单线程单进程的方式处理命令请求,并于多个客户端进行网络通信。 每个与服务器进行连接的客户端,服务端都为这些客户端建立相应的redisClient结构(客户端状态),保存客户端当前的状态信息,以及执行相关功能时需要用到的数据结构。 Redis服务器状态结构的clients属性是一个链表,这个链表保存了所有与服务器连接的客户端的状态结构,对客户端执行批量操作,或者查找某个指定的客户端,都可以通过遍历clients链完成。 struct redisServer{ // 一个链表,保存了所有客户端状态 list * clients; } 1、客户端状态的fd属性记录了客户端正在使用的套接字描述符 typedef struct redisClient{ int fd; } redisClient; 根据客户端的类型不同fd的属性值可以是-1,或者是大于-1的整数:伪客户端fd属性为-1;普通客户端的fd属性值为大于-1的整数。 2、默认情况下一个连接到服务器的客户端是没有名称的, 可以使用Client setname

c# 操作Redis的五种基本类型总结

江枫思渺然 提交于 2020-08-06 05:10:33
在我们的项目中,通常会把数据存储到关系型数据库中,比如Oracle,SQL Server,Mysql等,但是关系型数据库对于并发的支持并不是很强大,这样就会造成系统的性能不佳,而且存储的数据多为结构化数据,对于非结构数据(比如文本)和半结构化数据(比如JSon) 就显得不够灵活,而非关系型数据库则很好的弥补了这两点, 我们通常把读操作频繁的数据写入Redis中,以Key-value的方式存储来提高性能。 Redis支持5种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。以下介绍了.net中操作redis五种数据类型的基本语法。 一、String数据类型的应用场景 1. 简介 string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。 string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。 string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。 2.使用场景 存储简单的键值对,比如我们需要统计某个网站的点击量,关注量、粉丝量等 3. C#使用操作举例 现在需要保存一个Webservice接口的参数,让其实现可配置

Redis监控命令详解

喜夏-厌秋 提交于 2020-08-05 07:52:47
bigkeys redis-client.exe --bigkeys PS D:\RedisCache> .\redis-cli.exe -- bigkeys # Scanning the entire keyspace to find biggest keys as well as # average sizes per key type. You can use -i 0.1 to sleep 0.1 sec # per 100 SCAN commands (not usually needed). [ 00.00%] Biggest hash found so far 'bigkeys1' with 7135 fields [ 00.00%] Biggest hash found so far 'bigkeys2' with 2555363 fields -------- summary ------- Sampled 17 keys in the keyspace! Total key length in bytes is 268 (avg len 15.76 ) Biggest hash found 'bigkeys2' has 2555363 fields 0 strings with 0 bytes (00.00% of keys, avg size 0.00 ) 0

RedisTimeoutException: Unable to send command

寵の児 提交于 2020-08-04 15:06:17
应用访问redis报错如下: org.redisson.client.RedisTimeoutException: Unable to send command! Try to increase 'nettyThreads' and/or connection pool size settings Node source: NodeSource [slot=0, addr=null, redisClient=null, redirect=null, entry=MasterSlaveEntry [masterEntry=[freeSubscribeConnectionsAmount=0, freeSubscribeConnectionsCounter=value:49:queue:0, freeConnectionsAmount=18, freeConnectionsCounter=value:9994:queue:0, freezed=false, freezeReason=null, 解决方法: 设置/etc/security/limits.conf soft nofile 65535 hard nofile 65535 soft nproc 65535 hard nproc 65535 来源: oschina 链接: https://my.oschina.net/u

Redis 中的 Java 客户端(Jedis / Lettuce)

喜夏-厌秋 提交于 2020-07-29 09:49:30
本文学习使用 Java 客户端( Jedis / Lettuce ) 操作 Redis 。 1 开启远程连接 Redis 默认是不支持远程连接的,需要手动开启,修改 redis.conf ,主要有 3 个地方改动: vi /usr/local/redis-5.0.8/redis.conf # bind 127.0.0.1 protected-mode no requirepass 123456 之后重新启动 Redis 。 2 Jedis 2.1 基本使用 Jedis 的 GitHub 地址: https://github.com/xetorthio/jedis 。 首先创建一个普通的 Maven 项目 redis-jedis ,项目创建成功后,添加 Jedis 依赖: <dependencies> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.2.0</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13<

c# 操作Redis的五种基本类型总结

耗尽温柔 提交于 2020-07-28 19:45:26
在我们的项目中,通常会把数据存储到关系型数据库中,比如Oracle,SQL Server,Mysql等,但是关系型数据库对于并发的支持并不是很强大,这样就会造成系统的性能不佳,而且存储的数据多为结构化数据,对于非结构数据(比如文本)和半结构化数据(比如JSon) 就显得不够灵活,而非关系型数据库则很好的弥补了这两点, 我们通常把读操作频繁的数据写入Redis中,以Key-value的方式存储来提高性能。 Redis支持5种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。以下介绍了.net中操作redis五种数据类型的基本语法。 一、String数据类型的应用场景 1. 简介 string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。 string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。 string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。 2.使用场景 存储简单的键值对,比如我们需要统计某个网站的点击量,关注量、粉丝量等 3. C#使用操作举例 现在需要保存一个Webservice接口的参数,让其实现可配置