Jedis API操作Redis数据库入门

半路出家菜码农,裸辞找工迷茫中;面试碰壁知不足,归家勤学记此中。

前段时间看完了csdn上的redis入门相关视频,现在来学在java项目中操作redis的API,Jedis。文中代码是模仿网上各大侠的,并无什么亮点。志在记录自己学习的点滴,踏出的每步。

一、操作Redis的库及其他基本资料:
1.官网上的各种语言操作Redis的库的介绍:https://redis.io/clients(注意官方推荐的java库是Jedis)。
2.网上找到的Jedis API文档:http://tool.oschina.net/uploads/apidocs/ (2.1.0版英文,中文我暂时没找到)。
3.Jedis包:http://files.cnblogs.com/liuling/jedis-2.1.0.jar.zip
4.Redis连接池的包:http://files.cnblogs.com/liuling/commons-pool-1.5.4.jar.zip


二、启动redis(案例中redis在本机)

Jedis API操作Redis数据库入门_第1张图片


二、导入Jedis包以及Redis连接池:

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

三、Jedis对象生成

Jedis对象有各种对Redis的基本操作,包括对Redis支持的String、List等对象的基本增删查改(与Redis操作命令基本一样)。代码中以JUnit测试:

public void testClient() {
	jedisCli = new Jedis("127.0.0.1", 6379); //新建Jedis对象
	jedisCli.select(2); //切换Redis数据库
	jedisCli.set("firstJedis", "hello,Jedis"); //与Redis命令行操作基本一致
}

再举Jedis对Map的操作的例子:
@Test
public void testMap() {
	jedisCli = new Jedis("127.0.0.1", 6379); 
	jedisCli.select(2);
	jedisCli.hset("family", "lbq", "65"); //同Redis命令行中的hset操作,如名为family的set不存在,则创建set并放入名为lbq的元素,值为65
	jedisCli.hset("family", "zjz", "62"); //Redis不支持int类型,如不传String则会报错。
	System.out.println(jedisCli.hmget("family","lbq","zjz"));
		
	Map testMap1 = new HashMap();
	testMap1.put("num1", "1"); //此处同上面,不能传非String型
	testMap1.put("num2", "15");
	testMap1.put("num3", "606");
	testMap1.put("num4", "1024");
	jedisCli.hmset("testMap1", testMap1); //传入整个map对象入redis
	System.out.println(jedisCli.hmget("testMap1", "num1","num2","num3","num4"));
}

四、使用Redis连接池:

与关系型的数据库一样,大型项目中使用连接池,能够有效管理利用redis连接,避免连接资源不及时回收重用造成的浪费和对数据库的影响。

代码如下:

1.在测试类中新建线程池私有静态变量与各种配置属性:

	private Jedis jedisCli;
	private static JedisPool pool; //线程池对象
	
	private static String ADDR = "127.0.0.1"; 	//redis所在服务器地址(案例中是在本机)
	private static int PORT = 6379; 		//端口号
	private static String AUTH = "";		//密码(我没有设置)
	private static int MAX_IDLE = 10;		//连接池最大空闲连接数(最多保持空闲连接有多少
	private static int MAX_ACTIVE = 50;		//最大激活连接数(能用的最多的连接有多少)
	private static int MAX_WAIT = 100000;		//等待可用连接的最大时间(毫秒),默认值-1,表示永不超时。若超过等待时间,则抛JedisConnectionException
	private static int TIMEOUT = 10000;		//链接连接池的超时时间#使用连接时,检测连接是否成功
	private static boolean TEST_ON_BORROW = true;	//使用连接时,测试连接是否可用
	private static boolean TEST_ON_RETURN = true;			//返回连接时,测试连接是否可用

静态块加载连接属性:

static{
	JedisPoolConfig config = new JedisPoolConfig();
	config.setMaxIdle(MAX_IDLE);
	config.setMaxActive(MAX_ACTIVE);
	config.setMaxWait(MAX_WAIT);
	config.setTestOnBorrow(TEST_ON_BORROW);
	config.setTestOnReturn(TEST_ON_RETURN);
	pool = new JedisPool(config, ADDR, PORT, TIMEOUT); //新建连接池,如有密码最后加参数
}

获取连接资源以及回收使用完的连接的方法:

	//获取连接方法
	public static Jedis getJedisResource () {
		try {
			if (pool!=null) {
				Jedis resource = pool.getResource();
				return resource;
			} 
			return null;
		} catch(Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	
	//回收连接方法	
	public static void returnResource (Jedis used) {
		
		if(pool!=null){
			pool.returnResource(used);
		}
		
	}
	
}
JUnit测试方法

@Test
	public void testPool() {
		Jedis resource = getJedisResource();
		resource.select(2);
		resource.lpush("Countries", "USA");	//redis对list头的插入元素操作
		resource.lpush("Countries", "UK");
		resource.lpush("Countries", "CHINA");
		System.out.println(resource.rpop("Countries"));	//list末尾弹出元素
		returnResource(resource);
	}




你可能感兴趣的:(后端,数据库,NOSQL,Redis)