jedis

Jedis源码分析

我们两清 提交于 2019-11-27 20:43:06
/*--> */ /*--> */ /*--> */ /*--> */ /*--> */ /*--> */ Jedis源码分析 Jedis继承关系     Jedis提供了redis的客户端的连接和命令查询.从jedis继承关系中,Jedis实现很多的命令接口,每个接口都定义了不同的操作形式,这符合面向对象开发原则中的接口隔离原则和单一职责原则。下面的接口声明了相关的redis命令操作,每个接口都负责对一部分的命令进行方法声明。 下列接口由父类BinaryJedis所依赖的接口 BasicCommands:提供基础的查询命令,如ping,quit,flushdb BinaryJedisCommands:提供了针对redis数据结构的CURD等操作,其中参数(K-V)必须以byte数组形式提供 MultiKeyBinaryCommands:提供了针对redis数据结构的CURD等批量操作,其中参数(K-V)必须以byte数组形式提供 AdvancedBinaryJedisCommands:提供高级操作redis的命令,如config相关,slowlog,client等命令,其中参数(K-V)必须以byte数组形式提供 BinaryScriptingCommands:提供Lua脚本运行命令,命令必须以byte数组形式提供。 Jedis所依赖的接口 JedisCommands

redis07

点点圈 提交于 2019-11-27 20:39:42
redis的规范与运维 Key设计 1.可读性和可管理性 - 以业务名(或数据库名)为前缀(防止key冲突),用冒号分割分割,例如 业务名:表名:id,如 ugc:video:1 2.简洁性 保证语义的情况下,控制key的长度,当key较多时,内存占用也不容忽视 例如 user:{uid}:friends:messages:{mid} 可以简化为 u:{uid}:fri:mes:{mid} 3.不要包含特殊字符 反例:包含空格、换行、单双引号以及其他转义字符 Value设计 1.避免bigkey string类型控制在10KB以内 hash、list、set、zset元素个数不要超过5000个 反例:一个包含几百万个元素的list、hash等,一个巨大的json字符串 2.bigkey的危害 网络阻塞 Redis阻塞 会形成慢查询阻塞其他命令 集群节点数据不均衡 频繁序列化:应用服务器CPU消耗 Redis客户端本身不负责序列化 应用频繁序列化和反序列化bigkey:本地缓存或Redis缓存 发现bigkey的方法 使用应用的监控异常对其发现 JedisConnectionException:Read timed out Could not get a resource from the pool 在从节点上执行 redis-cli --bigkeys scan + debug

阿里云Redis开发规范

独自空忆成欢 提交于 2019-11-27 20:39:00
摘要: 本文介绍了在使用阿里云Redis的开发规范,从键值设计、命令使用、客户端使用、相关工具等方面进行说明,通过本文的介绍可以减少使用Redis过程带来的问题。 一、键值设计 1. key名设计 (1)【建议】: 可读性和可管理性 以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:id ugc:video:1 (2)【建议】:简洁性 保证语义的前提下,控制key的长度,当key较多时,内存占用也不容忽视,例如: user:{uid}:friends:messages:{mid}简化为u:{uid}:fr:m:{mid}。 (3)【强制】:不要包含特殊字符 反例:包含空格、换行、单双引号以及其他转义字符 2. value设计 (1)【强制】:拒绝bigkey(防止网卡流量、慢查询) string类型控制在10KB以内,hash、list、set、zset元素个数不要超过5000。 反例:一个包含200万个元素的list。 非字符串的bigkey,不要使用del删除,使用hscan、sscan、zscan方式渐进式删除,同时要注意防止bigkey过期时间自动删除问题(例如一个200万的zset设置1小时过期,会触发del操作,造成阻塞,而且该操作不会不出现在慢查询中(latency可查)), 查找方法 和 删除方法 (2)【推荐】:选择适合的数据类型。

Jedis, Cannot get jedis connection: cannot get resource from pool

跟風遠走 提交于 2019-11-27 16:25:16
问题 I have seen answers in couple of threads but didn't work out for me and since my problem occurs occasionally, asking this question if any one has any idea. I am using jedis version 2.8.0, Spring Data redis version 1.7.5. and redis server version 2.8.4 for our caching application. I have multiple cache that gets saved in redis and get request is done from redis. I am using spring data redis APIs to save and get data. All save and get works fine, but getting below exception occasionally: Cannot

如何伪装成一个服务端开发(八) -- Redis

醉酒当歌 提交于 2019-11-27 09:54:37
目录 如何伪装成一个服务端开发(一) 如何伪装成一个服务端开发(二) 如何伪装成一个服务端开发(三) 如何伪装成一个服务端开发(四) 如何伪装成一个服务端开发(五) 如何伪装成一个服务端开发(六) 如何伪装成一个服务端开发(七) 前言 如果你想在网上再找一个这么详细的入门 Spirng Boot + redis的项目,那你可得费点力气了……因为我就尝试过…… NoSQL 我们知道数据库连接和调用是耗时的(包括连接,查询等操作)。而且在高并发的情况下会出现明显的瓶颈。所以如何减少数据库访问就逐渐成为互联网系统加速的重要优化点。为此NoSQL诞生了,其中使用广泛的就是Redis和MongoDB。这里先介绍一下Redis。 Redis 是一种运行在内存的数据库,很多时候我们都会把从数据库查询出来的数据放入Redis,当用户再次查询相同数据的时候,优先使用Redis中存在的数据,因为是存放在内存中,所以速度很快。另外Redis还可以将数据持久化到磁盘中,很多网站甚至放弃了后台数据库,完全使用Redis来进行数据存储。 安装Redis 笔者为了学(fan)习(qiang),特地买了一个廉价的VPS,这里正好利用起来,在服务器上安装了mariadb 和 redis。这里不详细介绍安装流程,大家可以本机安装,网上资料很多。 PS 笔者使用的是centos7 对于安全的限制很严

redis02

流过昼夜 提交于 2019-11-27 09:53:52
客户端的使用 jedis maven 1 <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> 2 <dependency> 3 <groupId>redis.clients</groupId> 4 <artifactId>jedis</artifactId> 5 <version>2.9.0</version> 6 </dependency> jedis直连 使用简单 适用于少量长期连接的场景 存在每次新建/关闭TCP连接的开销 <br/> 资源无法控制,存在连接泄露的风险, Jedis对象线程不安全 jedis连接池 Jedis对象预先生成,降低使用开销 连接池的形式保护和控制资源的使用 相对于直连,使用相对麻烦 尤其在资源的管理上需要许多参数保证 一旦参数不合理会出现很多问题 1 @Test 2 public void test1() throws Exception { 3 22 23 24 // Jedis jedis = new Jedis("192.168.239.149",6379); 25 // jedis.auth("redis"); 26 // 27 // //选择操作的数据库 28 // 29 // jedis.select(1); 30 // jedis.set("welcome",

阿里云Centos7安装Redis4.0.8

别来无恙 提交于 2019-11-27 09:03:11
一、软件安装 1、进入官网下载Redis4.0.8 https://redis.io/download 官网也附有安装教程。 shell>wget http://download.redis.io/releases/redis-4.0.2.tar.gz 2、解压压缩文件 shell>tar -zxvf redis-4.0.8.tar.gz 3、在“/usr/local”目录下创建redis目录: shell>cd ../ shell>mkdir redis 4、进入redis-4.0.8目录 使用make命令编译redis shell>cd /usr/local/webtools/redis-4.0.8 shell>make 等几分钟,过程可能比较慢,正常情况下是不会报错的,如下图: 5、在redis-4.0.8目录中 使用makePREFIX=/usr/local/redis/redis-4.0.8 install命令安装redis到/usr/local/redis/redis-4.0.8中 shell>make PREFIX=/usr/local/redis/redis-4.0.8 install 二、修改配置 前台启动:./redis-server 后台启动:复制redis.conf (在/redis-4.0.8源码下,就是解压的那个文件夹)到redis的安装目录

Spark 系列(十四)—— Spark Streaming 基本操作

假如想象 提交于 2019-11-27 08:34:53
一、案例引入 这里先引入一个基本的案例来演示流的创建:获取指定端口上的数据并进行词频统计。项目依赖和代码实现如下: <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-streaming_2.12</artifactId> <version>2.4.3</version> </dependency> import org.apache.spark.SparkConf import org.apache.spark.streaming.{Seconds, StreamingContext} object NetworkWordCount { def main(args: Array[String]) { /*指定时间间隔为 5s*/ val sparkConf = new SparkConf().setAppName("NetworkWordCount").setMaster("local[2]") val ssc = new StreamingContext(sparkConf, Seconds(5)) /*创建文本输入流,并进行词频统计*/ val lines = ssc.socketTextStream("hadoop001", 9999) lines.flatMap(_.split(" "))

Redis分布式锁——悲观锁实现,以秒杀系统为例

冷暖自知 提交于 2019-11-27 08:06:55
Redis分布式锁——悲观锁实现,以秒杀系统为例 分布式锁 Redis命令介绍 代码实现 AbstractLock基类 实现类 上面使用到的Redis工具类 测试 输出结果 分布式锁 分布式锁是一种用来安全访问分布式机器上变量的安全方案,一般用在全局id生成、秒杀系统、全局变量共享、分布式事务等。一般会有两种实现方案,一种是悲观锁的实现,一种是乐观锁的实现。悲观锁的并发性能差,但是能保证发生脏数据的可能性小一点。 Redis命令介绍 使用Redis实现分布式锁,有两个重要函数需要介绍: SETNX命令 ( SET if N ot e X ists) 语法: SETNX key value 功能: 当前仅当key不存在,将key的值设为value,并返回1;若给定的key已经存在,则SETNX不做任何动作,并返回0。 GETSET命令 (这是一个原子命令!) 语法: GETSET key value 功能: 将给定key的值设为value,并返回key的旧值(old value);当key存在但不是字符串类型时,返回一个错误;当key不存在时,返回nil。 GET命令 语法: GET key 功能: 返回key所关联的字符串值,如果key不存在那么返回特殊值nil,如果key 储存的值不是字符串类型,返回一个错误。 DEL命令 语法: DEL key [key…] 功能:

springboot 2.0 Redis command timed out的解决

≡放荡痞女 提交于 2019-11-27 07:21:10
环境:springboot 2.0.7 spring data redis springboot从1.x升级到2.x后,spring data redis使用的redis客户端驱动从1.x的jedis换到lettuce 使用过程中,出现Redis command timed out报错,网上搜索后,很多文章都说配置项spring.redis.timeout在1.x可以设为0代表无限超时时间,而2.x必须要设置一个大于0的数,按此配置后确实正常了一段时间,但还是偶尔出现这问题 此时问题的症状是: timed out报错的时机不确定,但一个较高几率的情况是,功能很久没用时,第一次用报错几率很高,然后第二次以后就正常 报错时一触发功能就报错,根本不像是超时,要等待一段时间才报错 最终解决方法是,把redis驱动换回jedis ,具体方法请百度这里不展开 PS:在lettuce的github的issue有几个此问题的讨论,很多人跟我的情况也是一样出现timed out但都找不到规律和原因,而且讨论到结尾也没结果,只能认为是lettuce的bug. 来源: oschina 链接: https://my.oschina.net/u/1251858/blog/3033013