java 实现redis缓存

   Redis 是一个NoSQL数据库,也是一个高性能的key-value数据库。一般大家在做Java项目的时候,通常会了加快查询效率,减少和数据库的连接次数,我们都会在代码中加入缓存功能。

注意:启动redis服务器

  一. 导入相关的jar包

   

  二. 写RedisUtil连接池

package com.hlx.redis.javaredis;

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

/**
 * java实现redis缓存技术
 * 
 */
public class RedisUtil {
	// Redis服务器IP
	private static final String HOST = "localhost";
	// Redis的端口号
	private static final int PORT = 6379;
	// 访问密码
	private static final String AUTH = "XXXX";
	// 可用连接实例的最大数目,默认值为8;
	// 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。
	private static final int MAX_TOTAL = 1024;
	// 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。
	private static final int MAX_IDLE = 200;
	// 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException;
	private static final long MAX_WAIT = 10000;
	// 最大延迟时间
	private static final int TIMEOUT = 10000;
	// 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
	private static final boolean TEST_ON_BORROW = true;

	private static JedisPool jedisPool = null;

	// 静态块
	static {
		try {
			// 1> 连接池配置对象
			JedisPoolConfig config = new JedisPoolConfig();

			// 2>配置
			config.setMaxIdle(MAX_IDLE);
			config.setMaxWaitMillis(MAX_WAIT);
			config.setTestOnBorrow(TEST_ON_BORROW);
			config.setMaxTotal(MAX_TOTAL);

			// 3>连接池对象
			jedisPool = new JedisPool(config, HOST, PORT, TIMEOUT, AUTH);

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 获得Jedis对象
	public synchronized static Jedis getJedis() {

		try {
			// 判断
			if (jedisPool != null) {
				// 获得Jedis
				Jedis jedis = jedisPool.getResource();
				return jedis;

			} else {
				return null;
			}

		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			return null;
		}

	}

	/**
	 * 释放资源
	 * 
	 * @param jedis
	 */
	public synchronized static void backResouce(final Jedis jedis) {
		if (jedis != null)
			jedis.close();
	}

}
三.测试

public class TestRedis {

	/**
	 * String set() get()
	 */
	@Test
	public void testString() {

		// 单个
		for (int i = 1; i <= 10; i++) {

			// 获得资源
			Jedis jedis = RedisUtil.getJedis();
			// 设置字符串值
			jedis.set("mike" + i, i + "");

			System.out.println(jedis.get("mike" + i));

			// 关闭资源
			RedisUtil.backResouce(jedis);
		}
	}

	/**
	 * Map hmset() hmget() hkeys() hvals()
	 */
	@Test
	public void testMap() {
		Map<String, String> map = new HashMap<String, String>();
		// 添加数据
		map.put("name", "陈泽璐");
		map.put("age", "24");
		map.put("sex", "male");

		// 获得资源
		Jedis jedis = RedisUtil.getJedis();

		// 添加到redis中
		jedis.hmset("info", map);

		System.out.println("添加Map数据:"
				+ jedis.hmget("info", "name", "age", "sex") + "\n");

		// 删除数据
		// jedis.hdel("info", "sex");

		// 返回key=Information的值的个数
		System.out.println(jedis.hlen("info"));

		// 判断是否存在key=Information的对象
		System.out.println(jedis.exists("info"));

		// 返回map对象中的所有key值
		System.out.println(jedis.hkeys("info"));

		// 返回map对象中的所有value值
		System.out.println(jedis.hvals("info"));

		// 循环迭代key
		Iterator<String> it = jedis.hkeys("info").iterator();
		while (it.hasNext()) {
			String key = it.next();
			System.out.println(key + "=>" + jedis.hmget("info", key));
		}

		// 关闭资源
		RedisUtil.backResouce(jedis);

	}

	/**
	 * List del() lpush() lrange()
	 */
	@Test
	public void testList() {

		// 获得资源
		Jedis jedis = RedisUtil.getJedis();

		// 1>清空info
		jedis.del("info");

		// 2>通过遍历查看
		System.out.println(jedis.hlen("info"));

		// 3>存放数据
		jedis.lpush("info", "陈泽璐");
		jedis.lpush("info", "24");
		jedis.lpush("info", "male");

		// 4查看
		System.out.println(jedis.lrange("info", 0, -1));

		// 5>清空List
		jedis.del("info");

		// 3>存放数据
		jedis.lpush("info", "陈泽璐2");
		jedis.lpush("info", "22");
		jedis.lpush("info", "femal");

		// 4查看
		System.out.println(jedis.lrange("info", 0, -1));

		// 关闭资源
		RedisUtil.backResouce(jedis);
	}

	/**
	 * Set sadd() smembers(); srem(); scard(); sismember() srandmember()
	 */
	@Test
	public void testSet() {

		// 获得资源
		Jedis jedis = RedisUtil.getJedis();

		// 1>清空info
		jedis.del("info");

		// 2>通过遍历查看
		System.out.println(jedis.hlen("info"));

		// 3>存放数据
		jedis.sadd("info", "陈泽璐set");
		jedis.sadd("info", "24set");
		jedis.sadd("info", "maleset");

		// 删除元素
		// jedis.srem("info", "24set");

		// 4查看
		System.out.println(jedis.smembers("info"));

		// 判断值是否存在
		System.out.println(jedis.sismember("info", "24set"));

		// 返回集合元素的个数
		System.out.println(jedis.scard("info"));

		// 返回随机元素
		System.out.println(jedis.srandmember("info"));

		// 关闭资源
		RedisUtil.backResouce(jedis);
	}

	/**
	 * zset(sorted set:有序集合) 
	 * 
	 * jedis 排序
	 */
	@Test
	public void testSort() {
		// 获得资源
		Jedis jedis = RedisUtil.getJedis();
		
		//清空
		jedis.del("sort");
		
		// 添加元素
		jedis.rpush("sort", "1");
		jedis.lpush("sort", "12");
		jedis.lpush("sort", "30");
		jedis.lpush("sort", "4");
		System.out.println("元素:" + jedis.lrange("sort", 0, -1) + "\n");
		// 排序
		System.out.println("排序:" + jedis.sort("sort") + "\n");
		// jedis.sort("sort");
		// 再输出一次
		// System.out.println("元素:" + jedis.lrange("sort", 0, -1) + "\n");

		// 关闭资源
		RedisUtil.backResouce(jedis);
	}

}

 

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值