1.Maven
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.0.0</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
2.在多线程下使用Jedis
池化使用Jedis,Jedis使用commons-pool完成池化实现。
先做个配置文件:Properties
#最大分配的对象数
redis.pool.maxActive=1024
#最大能够保持idel状态的对象数
redis.pool.maxIdle=200
#当池内没有返回对象时,最大等待时间
redis.pool.maxWait=1000
#当调用borrow Object方法时,是否进行有效性检查
redis.pool.testOnBorrow=true
#当调用return Object方法时,是否进行有效性检查
redis.pool.testOnReturn=true
#IP
redis.ip=10.11.20.140
#Port
redis.port=6379
在静态代码段中完成初始化:
private static JedisPool pool;
static {
ResourceBundle bundle = ResourceBundle.getBundle("redis");
if (bundle == null) {
throw new IllegalArgumentException(
"[redis.properties] is not found!");
}
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxActive(Integer.valueOf(bundle
.getString("redis.pool.maxActive")));
config.setMaxIdle(Integer.valueOf(bundle
.getString("redis.pool.maxIdle")));
config.setMaxWait(Long.valueOf(bundle.getString("redis.pool.maxWait")));
config.setTestOnBorrow(Boolean.valueOf(bundle
.getString("redis.pool.testOnBorrow")));
config.setTestOnReturn(Boolean.valueOf(bundle
.getString("redis.pool.testOnReturn")));
pool = new JedisPool(config, bundle.getString("redis.ip"),
Integer.valueOf(bundle.getString("redis.port")));
}
然后,修改前面那段jedis操作Redis
// 从池中获取一个Jedis对象
Jedis jedis = pool.getResource();
String keys = "name";
// 删数据
jedis.del(keys);
// 存数据
jedis.set(keys, "snowolf");
// 取数据
String value = jedis.get(keys);
System.out.println(value);
// 释放对象池
pool.returnResource(jedis);
3.一致性哈希
Memcached完全基于分布式集群,而Redis是Master-Slave,如果想把Reids,做成集群模式,无外乎多做几套Master-Slave,每套Master-Slave完成各自的容灾处理,通过Client工具,完成一致性哈希。
PS:Memcached是在Server端完成Sharding,Redis只能依靠各个Client做Sharding。可能会在Redis
3.0系列支持Server端Sharding。
保留前面的JedisPoolConfig,新增两个Redis的IP(redis1.ip,redis2.ip),完成两个JedisShardInfo实例,并将其丢进List中:
JedisShardInfo jedisShardInfo1 = new JedisShardInfo(bundle.getString("redis1.ip"), Integer.valueOf(bundle .getString("redis.port")));
JedisShardInfo jedisShardInfo2 = new JedisShardInfo(bundle.getString("redis2.ip"), Integer.valueOf(bundle .getString("redis.port")));
List<JedisShardInfo> list = new LinkedList<JedisShardInfo>();
list.add(jedisShardInfo1);
list.add(jedisShardInfo2);
初始化ShardedJedisPool代替JedisPool:
ShardedJedisPool pool = new ShardedJedisPool(config, list);
改由ShardedJedis,获取Jedis对象:
// 从池中获取一个Jedis对象
ShardedJedis jedis = pool.getResource();
String keys = "name";
String value = "snowolf";
// 删数据
jedis.del(keys);
// 存数据
jedis.set(keys, value);
// 取数据
String v = jedis.get(keys);
System.out.println(v);
// 释放对象池
pool.returnResource(jedis);
4.redis高并发访问读取超时异常
可能是由于服务器fork函数造成
5.linux中fork()函数详解
一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。
一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。
分享到:
相关推荐
在Java环境中与Redis进行交互,我们通常会使用客户端库,其中Jedis是最常用的一个。本篇将深入探讨`redis java 客户端`,特别是Jedis的使用以及与其相关的`commons-pool-1.5.6.jar`。 **Jedis** Jedis是Java语言...
Redisson是一款功能强大的Java客户端,它为Redis提供了全面的支持,包括数据结构操作、分布式服务、锁、队列等。这款客户端旨在简化与Redis服务器的交互,同时提供了多种编程模型,如同步、异步、反应式(RxJava)和...
对于Java开发者来说,选择一个合适的Redis Java客户端至关重要,因为它直接影响到应用程序的性能和可扩展性。本篇文章将对一些主流的Redis Java客户端进行对比分析,探讨它们在分布式和线性可伸缩性方面的表现。 1....
**Redis的Java客户端Jedis详解** Redis是一款高性能的键值对数据存储系统,常用于缓存、消息中间件等场景。而Jedis是Redis官方推荐的Java语言客户端,提供了丰富的API来与Redis服务器进行交互。在2018年6月10日,...
一个简单java客户端Jedis,大家可以到https://github.com/xetorthio/jedis这网址下载相关源码 这里对其进行一个简单封转 包括key valye set list hashset的封装
《庖丁解架构之RedisJava客户端Lettuce架构解剖与源码精读》 在IT行业中,Redis作为一款高性能的内存数据结构存储系统,被广泛应用于缓存、消息队列等多个场景。而Java作为企业级开发的主要语言,自然需要与Redis...
Redis的官方推荐Java客户端——Jedis 此Jar包为Jedis 2.9.0版(2016年7月22日发布) 支持Redis 3.0 (亲测有效) 使用方法: import redis.clients.jedis.Jedis; Jedis jedis = new Jedis("localhost"); jedis.set...
Java客户端Jedis是Redis官方推荐的Java语言接口库,它提供了丰富的API来操作Redis服务器。Jedis 2.9.0是该库的一个稳定版本,适用于各种Java项目与Redis服务器进行交互。 在Jedis 2.9.0版本中,主要包含了以下功能...
Jedis是较早的Redis Java客户端,轻量级且性能较好,但对Redis新特性的支持可能稍有滞后。Lettuce则是异步、基于Netty的客户端,适合处理高并发场景,且对Redis协议和新特性支持更全面。 在使用Spring Data Redis时...
RedisClient是Redis客户端的GUI工具,使用Java swt和jedis编写,可以方便开发者浏览Redis数据库。该软件支持简体中文,非常适合国内用户使用,不需要汉化就可以直接使用。RedisClient将redis数据以资源管理器的界面...
Jedis是Redis的Java客户端,它提供了一个丰富的API来操作Redis数据存储系统。Redis是一个高性能的键值数据库,常用于缓存、消息中间件以及数据结构服务器等场景。Jedis作为Java开发者与Redis交互的主要工具,使得在...
【Lettuce-Redis高级客户端详解1】 Lettuce是一个高度优化的Java编写的Redis驱动程序,它在Redis社区中获得了广泛的认可,特别是在Spring生态体系中。作为Spring-Data-Redis的一部分,Lettuce取代了早期版本的Jedis...
同时,它利用Jedis这个Java客户端库连接并操作Redis服务器,确保了高效稳定的性能。 4. **功能全面**:作为一个客户端工具,RedisClient通常会包含如键的查看、添加、删除、修改,以及对集合、哈希表、有序集合等...
Jedis 是一个非常小而理智的 Redis Java 客户端。 Jedis 被认为易于使用。 Jedis 与 redis 2.8.x、3.xx 及以上版本完全兼容。 支持的功能包括排序、连接处理、操作任何类型值的命令、操作字符串值的命令、操作哈希的...
Redis与Java客户端的交互是通过Java Redis客户端库实现的,如Jedis和Lettuce。Jedis是较早且被广泛使用的Redis客户端,它支持所有Redis命令,适用于简单易用的API接口。Lettuce则是一个更现代的客户端,它提供了基于...
RedisDesktopManager作为Redis的可视化客户端,它的主要功能和特性包括: - **多语言支持**:支持多种语言界面,方便不同地区的用户使用。 - **连接管理**:可以添加、编辑和保存多个Redis服务器的连接信息,方便...
Redisson-Redis Java客户端具有内存中数据网格的功能 | | | | | 基于高性能的异步和无锁Java Redis客户端和框架。 JDK兼容性:1.8-15,Android 产品特点 Redis复制设置(包括对和) Redis群集设置(包括对和) ...
Lettuce是另一个流行的Redis Java客户端,它提供了更现代的API和异步支持。在Maven中添加Lettuce依赖: ```xml <groupId>io.lettuce <artifactId>lettuce-core <version>6.1.4.RELEASE ``` 使用Lettuce的基本...
如果Redis客户端是用Java编写的,那么这个JRE可能是客户端运行的必要条件,确保用户系统上可以执行Java代码。 综合以上信息,我们可以预想这个Redis桌面客户端应该具备以下功能: - 连接和管理多个Redis服务器,...