本文概览:jedis作为使用java连接redis的客户端。本文介绍了直接创建jedis对象、通过连接池获取jedis对象和客户端分片。
1 maven
在pom.xml引入如下配置
1 2 3 4 5 |
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.8.1</version> </dependency> |
2 直接创建jedis对象
有点类似java连接mysql时,直接使用Jdbc来进行操作。代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
public class RedisBase { public void test(){ // 1.创建jedis Jedis jedis = new Jedis("127.0.0.1",6379); // 2.使用 // 2.1 String jedis.set("key_string","100"); // 加1 jedis.incr("key_string"); String value = jedis.get("key_string"); System.out.println("string获取一个元素:"+value); // 2.2 List jedis.lpush("key_list","dd"); jedis.lpush("key_list","cc"); value = jedis.lindex("key_list",0); List<String> valueList = jedis.lrange("key_list",0,1); System.out.println("List获取一个元素:"+value); System.out.println("List获取一个集合"+valueList.toString()); // 2.3 Set jedis.sadd("key_set","dd"); Set<String> valueSet = jedis.smembers("key_set"); System.out.println("Set只能获取一个key所有元素:"+valueSet); // 2.4 Map Map<String,String> element = Maps.newHashMap(); element.put("name","db"); jedis.hmset("key_map",element); List<String> result = jedis.hmget("key_map","name"); System.out.println("map,获取value:"+result.toString()); //2.5 SortedList jedis.zadd("key_sortedList",1.1,"lei"); jedis.zadd("key_sortedList",1.2,"db"); Set<String> sortedList = jedis.zrange("key_sortedList",0,1); System.out.println("有序表:"+sortedList.toString()); // 3.关闭jedis jedis.close(); } public static void main(String[] args){ RedisBase redisBase = new RedisBase(); redisBase.test(); } } |
执行结果为
string获取一个元素:101
List获取一个元素:cc
List获取一个集合[cc, dd]
Set只能获取一个key所有元素:[dd]
map,获取value:[db]
有序表:[lei, db]
3 使用Jedis连接池
jedis连接池,类似于数据库的连接池,不需要每一次都建立连接,由连接池来维护连接的创建和关闭,可以减少每一次创建连接的时间。代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
public class RedisFactory { private JedisPool pool; public RedisFactory() { initPool(); } /** * 初始化线程持仓 */ private void initPool() { // 1.连接池配 JedisPoolConfig config = new JedisPoolConfig(); // 1.1 最大连接数 config.setMaxTotal(20); // 1.2 最大空闲连接数 config.setMaxIdle(10); // 创建连接池 pool = new JedisPool(config, "127.0.0.1", 6379); } /** * 获取一个redis连接 * * @return */ public Jedis getResource() { return pool.getResource(); } public static void main(String[] args) { RedisFactory factory = new RedisFactory(); Jedis jedis = factory.getResource(); jedis.set("key", "hello pool"); System.out.println(jedis.get("key")); } } |
执行结果为
hello pool
4 客户端分片
对于redis服务器,一般都是集群的形式。此时Jedis采用一致性hash算法来实现key存储到Redis集群中哪一个机器上。此时在创建Jedis对象时就需要连接多个机器上,前两节介绍的都是基于一台机器的,
- 创建Jedis对象
1 |
Jedis jedis = new Jedis("127.0.0.1",6379); |
- 创建jedis连接池
1 |
pool = new JedisPool(config, "127.0.0.1", 6379); |
当需要连接到Redis集群时,创建一个jedis对象和jedis连接池的代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
public class ShardRedis { /** * 创建一个jedis对象 */ public void generateRedis() { // 创建redis对象 ShardedJedis shardedJedis = new ShardedJedis(buildShardInfos()); } /** * 创建一个redis连接池 */ public void generatePool() { // 1.连接池配 JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(20); config.setMaxIdle(10); // 2.创建连接池 ShardedJedisPool pool = new ShardedJedisPool(config,buildShardInfos()); } /** * 加载redis集群信息 * * @return */ public List<JedisShardInfo> buildShardInfos() { List<JedisShardInfo> shardInfos = Lists.newArrayList(); // 第一台 JedisShardInfo first = new JedisShardInfo("123.3.4.2", 6379); first.setPassword("111"); shardInfos.add(first); // 第二台 JedisShardInfo second = new JedisShardInfo("222.31.4.2", 6379); second.setPassword("111"); shardInfos.add(first); return shardInfos; } } |
(全文完)