Redis入门——Jedis的基本使用
Posted zylhxd
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis入门——Jedis的基本使用相关的知识,希望对你有一定的参考价值。
Redis入门(九)——Jedis的基本使用
目录
- Jedis简介与安装
- Jedis的常用API
- Jedis事物
- Jedis连接池
1.Jedis简介与安装
Jedis简介:
Jedis Client是Redis官网推荐的一个面向java客户端,库文件实现了对redis各类API进行封装调用。
Jedis的安装:Java操作Redis之前,首先需要确保已经安装了 redis 服务及 Java redis 驱动。并开启redis服务。
然后新建一个maven工程,在pom文件中添加对Jedis的依赖。等待maven下载完Jedis的jar包后,就可以使用Jedis了。
下面我们来写一个测试程序测试Jedis是否可以正常使用。测试代码如下:
package com.zyl.demo.JedisDemo; import junit.framework.TestCase; import redis.clients.jedis.Jedis; public class JedisTest extends TestCase public void testJedis() Jedis jedis = new Jedis("127.0.0.1", 6379); System.out.println(jedis.ping());
此时可见程序最后输出PONG。表示我们已经成功连上redis服务。接下来可以通过Java代码操作redis数据库了。
2.Jedis的常用API
使用Jedis操作redis数据库跟直接操作redis的方式相同。下面的代码使用其中部分命令。(本程序中采用了TestNG测试框架)
package com.zyl.demo.JedisDemo; import org.testng.annotations.Test; import redis.clients.jedis.Jedis; import org.testng.annotations.BeforeSuite; import java.util.HashMap; import java.util.List; import java.util.Map; import org.testng.annotations.AfterSuite; public class JedisAPITest private Jedis jedis; /** * Jedis操作字符串 */ @Test public void testString() System.out.println("test Sting"); //添加数据 jedis.set("k1", "v1"); System.out.println("k1:"+jedis.get("k1")); //在k1后面追加新的值 jedis.append("k1", "new"); System.out.println("k1:"+jedis.get("k1")); //删除k1 jedis.del("k1"); System.out.println("k1:"+jedis.get("k1")); //设置多个k-v对 jedis.mset("name", "Ann","age","20","sex","F"); jedis.incr("age"); jedis.incrBy("age", 2); System.out.println("Student:"+jedis.mget("name","age","sex")); /** * jedis操作List */ @Test public void testList() System.out.println("====================================="); System.out.println("test List"); jedis.lpush("Fruits", "apple","orange","banana"); System.out.println("length:"+jedis.llen("Fruits")); System.out.println("Fruits:"+jedis.lrange("Fruits", 0, -1)); System.out.println("the frist fruit:"+jedis.lpop("Fruits")); /** * jedis操作Map */ @Test public void testMap() System.out.println("====================================="); System.out.println("test Map"); Map<String, String> map = new HashMap<String, String>(); map.put("id","1"); map.put("name","Lily"); map.put("email","Lily@abc.com"); jedis.hmset("user",map); List<String> list = jedis.hmget("user", "id","name"); System.out.println(list); System.out.println("user的键中存放的值的个数:" + jedis.hlen("user")); //返回key为user的键中存放的值的个数2 System.out.println("是否存在key为user的记录:" + jedis.exists("user"));//是否存在key为user的记录 返回true System.out.println("user对象中的所有key:" + jedis.hkeys("user"));//返回user对象中的所有key System.out.println("user对象中的所有value:" + jedis.hvals("user"));//返回map对象中的所有value
System.out.println("user对象中的所有value:" + jedis.hgetAll("user")); /** * jedis操作Map */ public void testSet() System.out.println("====================================="); System.out.println("test set"); jedis.sadd("set1", "member1"); jedis.sadd("set1", "member2"); jedis.sadd("set1", "member3"); jedis.srem("set1", "member3"); System.out.println("set1中全部的值:" + jedis.smembers("se1")); System.out.println("abc是否是set1中的元素:"+jedis.sismember("set1","abc"));//判断chx是否是user集合中的元素 System.out.println("集合中的一个随机元素:"+jedis.srandmember("set1"));//返回集合中的一个随机元素 System.out.println("set1中元素的个数:"+jedis.scard("set1")); /** * jedis操作Map */ @Test public void testZset() System.out.println("====================================="); System.out.println("test zset"); Map<String,Double> map = new HashMap<String,Double>(); map.put("ksy1",(double) 100); map.put("key2",(double) 80); map.put("key3",(double) 60); map.put("key4",(double) 40); jedis.zadd("zset1", map); System.out.println("大于等于60小于等于100的元素个数"+jedis.zcount("zset1", 60, 100)); System.out.println("key3排在第四位"+jedis.zrank("zset1","key3")); System.out.println("key4的分数"+jedis.zscore("zset1", "keys4")); System.out.println("大于等于60小于等于90的元素"+jedis.zrangeByScore("zset1",60,90)); System.out.println("删除key4"+jedis.zrem("zset1", "keys4")); @BeforeSuite public void beforeSuite() System.out.println("start to connect jedis......."); this.jedis = new Jedis("127.0.0.1", 6379); System.out.println(jedis.ping()); @AfterSuite public void afterSuite() jedis.close();
相应的输出结果如下
3.Jedis事物
package com.zyl.demo.JedisDemo; import java.util.ArrayList; import java.util.List; import redis.clients.jedis.Jedis; import redis.clients.jedis.Transaction; public class TestTX public boolean transMethon() throws InterruptedException Jedis jedis = new Jedis("127.0.0.1", 6379); int balance = 100;//余额 int debt = 0;//欠额 int amtToSubtract = 10;//消费额 List<Object> result = new ArrayList<Object>(); jedis.watch("balance"); System.out.println("*********watching balance*****************"); Thread.sleep(10000);//这里预留时间可以去修改balance的值 balance = Integer.parseInt(jedis.get("balance")); if (balance < amtToSubtract) jedis.unwatch(); System.out.println("not enough money"); jedis.close(); return false; else System.out.println("*********transaction**************"); Transaction transaction= jedis.multi(); transaction.decrBy("balance", amtToSubtract); transaction.incrBy("debt",amtToSubtract); transaction.exec(); //result = transaction.exec(); balance = Integer.parseInt(jedis.get("balance")); debt = Integer.parseInt(jedis.get("debt")); System.out.println("balance:"+Integer.parseInt(jedis.get("balance"))); System.out.println("debt:"+Integer.parseInt(jedis.get("debt"))); jedis.close(); return true; public static void main(String[] args) throws InterruptedException // TODO Auto-generated method stub boolean reValue; TestTX testTX = new TestTX(); reValue = testTX.transMethon(); System.out.println("reValue:"+reValue);
4. Jedis连接池
JedisPool在创建时初始化一些连接资源存储到连接池中,使用Jedis连接资源时不需要创建,而是从连接池中获取一个资源进行redis的操作,使用完毕后,不需要销毁该jedis连接资源,而是将该资源归还给连接池,供其他请求使用。
下面通过一个简单的程序说明Jedis连接池的使用。首先利用单例模式来写一个获取Jedis池的工具类。
package com.zyl.demo.JedisDemo; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; public class JedisPoolUitl private static volatile JedisPool jedisPool = null; private JedisPoolUitl() public static JedisPool getJedisPoolInstance() if (null == jedisPool) synchronized(JedisPoolUitl.class) if (null == jedisPool) //双端检索机制 JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMaxTotal(1000); poolConfig.setMaxIdle(32); poolConfig.setMaxWaitMillis(100*1000); poolConfig.setTestOnBorrow(true); jedisPool = new JedisPool(poolConfig,"127.0.0.1",6379); return jedisPool; public static void release(final Jedis jedis)//释放资源 if (null != jedis) jedis.close();
然后通过Jedis池新建Jedis实例,通过实例往redis写入数据。
package com.zyl.demo.JedisDemo; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; public class TestJedisPool public static void main(String[] args) // TODO Auto-generated method stub JedisPool jedisPool = JedisPoolUitl.getJedisPoolInstance(); //JedisPool jedisPool1 = JedisPoolUitl.getJedisPoolInstance(); //System.out.println(jedisPool == jedisPool1); Jedis jedis = new Jedis(); try jedis = jedisPool.getResource(); if (null != jedis.get("aa")) jedis.del("aa"); System.out.println("aa:"+jedis.get("aa")); jedis.set("aa", "bb"); Thread.sleep(2000);//暂停两秒。保证数据已经成功写入redis System.out.println("aa:"+jedis.get("aa")); catch (Exception e) e.printStackTrace(); finally JedisPoolUitl.release(jedis);
以上是关于Redis入门——Jedis的基本使用的主要内容,如果未能解决你的问题,请参考以下文章
Redis使用 Jedis 操作 Redis 数据库 ② ( Jedis API 规律 | Redis 命令与 Jedis 函数名称基本一致 | Jedis API 使用示例 )