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);
}
}