下载redis windows版:
redis-2.4.5-win32-win64.zip
开启 redis-server 服务
1.pom.xml
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <!--Redis --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.0.0</version> <type>jar</type> <scope>compile</scope> </dependency> </dependencies>
2.JedisPool
/** * jedis池使用 * */ public class MyJedisPool { // jedis池 private static JedisPool pool; // jedis实例 private static Jedis jedis; // 静态代码初始化池配置 static { // 加载redis配置文件 ResourceBundle bundle = ResourceBundle.getBundle("redis"); if (bundle == null) { throw new IllegalArgumentException("[redis.properties] is not found!"); } // 创建jedis池配置实例 JedisPoolConfig config = new JedisPoolConfig(); // 设置池配置项值 config.setMaxActive(Integer.valueOf(bundle.getString("redis.pool.maxActive"))); config.setMaxIdle(Integer.valueOf(bundle.getString("redis.pool.maxIdle"))); config.setMaxWait(Long.valueOf(bundle.getString("redis.pool.maxWait"))); config.setTestOnBorrow(Boolean.valueOf(bundle.getString("redis.pool.testOnBorrow"))); config.setTestOnReturn(Boolean.valueOf(bundle.getString("redis.pool.testOnReturn"))); // 根据配置实例化jedis池 pool = new JedisPool(config, bundle.getString("redis.ip"), Integer.valueOf(bundle.getString("redis.port"))); // 从jedis池中获取一个jedis实例 jedis = pool.getResource(); } /** * 测试jedis池方法 */ @Test public void test1() { // 获取jedis实例后可以对redis服务进行一系列的操作 jedis.set("name", "xmong"); System.out.println(jedis.get("name")); jedis.del("name"); System.out.println(jedis.exists("name")); // 释放对象池,即获取jedis实例使用后要将对象还回去 pool.returnResource(jedis); } /** * Redis存储初级的字符串 CRUD */ @Test public void testBasicString() { // -----添加数据---------- jedis.set("name", "minxr");// 向key-->name中放入了value-->minxr System.out.println(jedis.get("name"));// 执行结果:minxr // -----修改数据----------- // 1、在原来基础上修改 jedis.append("name", "jarorwar"); // 很直观,类似map 将jarorwar append到已经有的value之后 System.out.println(jedis.get("name"));// 执行结果:minxrjarorwar // 2、直接覆盖原来的数据 jedis.set("name", "闵晓荣"); System.out.println(jedis.get("name"));// 执行结果:闵晓荣 // 删除key对应的记录 jedis.del("name"); System.out.println(jedis.get("name"));// 执行结果:null /** * mset相当于 jedis.set("name","minxr"); jedis.set("jarorwar","闵晓荣"); */ jedis.mset("name", "minxr", "jarorwar", "闵晓荣"); System.out.println(jedis.mget("name", "jarorwar")); } /** * jedis操作Map */ @Test public void testMap() { Map<String, String> user = new HashMap<String, String>(); user.put("name", "minxr"); user.put("pwd", "password"); jedis.hmset("user", user); // 取出user中的name,执行结果:[minxr]-->注意结果是一个泛型的List // 第一个参数是存入redis中map对象的key,后面跟的是放入map中的对象的key,后面的key可以跟多个,是可变参数 List<String> rsmap = jedis.hmget("user", "name"); System.out.println(rsmap); // 删除map中的某个键值 // jedis.hdel("user","pwd"); System.out.println(jedis.hmget("user", "pwd")); // 因为删除了,所以返回的是null System.out.println(jedis.hlen("user")); // 返回key为user的键中存放的值的个数1 System.out.println(jedis.exists("user"));// 是否存在key为user的记录 返回true System.out.println(jedis.hkeys("user"));// 返回map对象中的所有key [pwd, name] System.out.println(jedis.hvals("user"));// 返回map对象中的所有value [minxr, password] Iterator<String> iter = jedis.hkeys("user").iterator(); while (iter.hasNext()) { String key = iter.next(); System.out.println(key + ":" + jedis.hmget("user", key)); } } /** * jedis操作List */ @Test public void testList() { // 开始前,先移除所有的内容 jedis.del("java framework"); System.out.println(jedis.lrange("java framework", 0, -1)); // 先向key java framework中存放三条数据 jedis.lpush("java framework", "spring"); jedis.lpush("java framework", "struts"); jedis.lpush("java framework", "hibernate"); // 再取出所有数据jedis.lrange是按范围取出, // 第一个是key,第二个是起始位置,第三个是结束位置,jedis.llen获取长度 -1表示取得所有 System.out.println(jedis.lrange("java framework", 0, -1)); } /** * jedis操作Set */ @Test public void testSet() { // 添加 jedis.sadd("sname", "minxr"); jedis.sadd("sname", "jarorwar"); jedis.sadd("sname", "闵晓荣"); jedis.sadd("sname", "noname"); // 移除noname jedis.srem("sname", "noname"); System.out.println(jedis.smembers("sname"));// 获取所有加入的value System.out.println(jedis.sismember("sname", "minxr"));// 判断 minxr 是否是sname集合的元素 System.out.println(jedis.srandmember("sname")); System.out.println(jedis.scard("sname"));// 返回集合的元素个数 } @Test public void test() throws InterruptedException { // keys中传入的可以用通配符 System.out.println(jedis.keys("*")); // 返回当前库中所有的key [sose, sanme, name, jarorwar, foo, sname, java framework, // user, braand] System.out.println(jedis.keys("*name"));// 返回的sname [sname, name] System.out.println(jedis.del("sanmdde"));// 删除key为sanmdde的对象 删除成功返回1 删除失败(或者不存在)返回 0 System.out.println(jedis.ttl("sname"));// 返回给定key的有效时间,如果是-1则表示永远有效 jedis.setex("timekey", 10, "min");// 通过此方法,可以指定key的存活(有效时间) 时间为秒 Thread.sleep(5000);// 睡眠5秒后,剩余时间将为<=5 System.out.println(jedis.ttl("timekey")); // 输出结果为5 jedis.setex("timekey", 1, "min"); // 设为1后,下面再看剩余时间就是1了 System.out.println(jedis.ttl("timekey")); // 输出结果为1 System.out.println(jedis.exists("key"));// 检查key是否存在 System.out.println(jedis.rename("timekey", "time")); System.out.println(jedis.get("timekey"));// 因为移除,返回为null System.out.println(jedis.get("time")); // 因为将timekey 重命名为time 所以可以取得值 min // jedis 排序 // 注意,此处的rpush和lpush是List的操作。是一个双向链表(但从表现来看的) jedis.del("a");// 先清除数据,再加入数据进行测试 jedis.rpush("a", "1"); jedis.lpush("a", "6"); jedis.lpush("a", "3"); jedis.lpush("a", "9"); System.out.println(jedis.lrange("a", 0, -1));// [9, 3, 6, 1] System.out.println(jedis.sort("a")); // [1, 3, 6, 9] //输入排序后结果 System.out.println(jedis.lrange("a", 0, -1)); } }
3. redis.properties
#最大分配的对象数 redis.pool.maxActive=1024 #最大能够保错误的Unicode字符串! redis.pool.maxIdle=200 #当池内没有返回对象时,最大等待时间 redis.pool.maxWait=1000 #当调错误的Unicode字符串! redis.pool.testOnBorrow=true #当调错误的Unicode字符串! redis.pool.testOnReturn=true #IP redis.ip=127.0.0.1 #Port redis.port=6379
另外,补充 redis 的工具类
JedisUtil
import java.util.ResourceBundle; import org.apache.log4j.Logger; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; public final class JedisUtil { private static final Logger LOGGER = Logger.getLogger(JedisUtil.class); private static int DEFAULT_DB_INDEX = 0; private static JedisPool jedisPool = null; private JedisUtil() { // private constructor } private static void initialPool() { try { ResourceBundle bundle = ResourceBundle.getBundle("redis"); if (bundle == null) { throw new IllegalArgumentException("[redis.properties] is not found!"); } // 创建jedis池配置实例 JedisPoolConfig config = new JedisPoolConfig(); // 设置池配置项值 String address = bundle.getString("redis.ip"); int port = Integer.valueOf(bundle.getString("redis.port")); LOGGER.info("Redis server info: " + address + ":" + port); String strDbIndex = bundle.getString("redis.db_index"); if (strDbIndex != null) { DEFAULT_DB_INDEX = Integer.valueOf(strDbIndex); } String strMaxActive = bundle.getString("redis.pool.maxActive"); if (strMaxActive != null) { config.setMaxActive(Integer.valueOf(strMaxActive)); } String strMaxIdle = bundle.getString("redis.pool.maxIdle"); if (strMaxIdle != null) { config.setMaxIdle(Integer.valueOf(strMaxIdle)); } String strMaxWait = bundle.getString("redis.pool.maxWait"); if (strMaxWait != null) { config.setMaxWait(Long.valueOf(strMaxWait)); } String strTestOnBorrow = bundle.getString("redis.pool.testOnBorrow"); if (strTestOnBorrow != null) { config.setTestOnBorrow(Boolean.valueOf(strTestOnBorrow)); } String strTestOnReturn = bundle.getString("redis.pool.testOnReturn"); if (strTestOnReturn != null) { config.setTestOnReturn(Boolean.valueOf(strTestOnReturn)); } String strTimeout = bundle.getString("redis.pool.timeout"); int timeout = 2000;// 默认2000 if (strTimeout != null) { timeout = Integer.valueOf(strTimeout); } // 根据配置实例化jedis池 jedisPool = new JedisPool(config, address, port, timeout); } catch (Exception e) { e.printStackTrace(); } finally { } } public synchronized static Jedis getJedisInstance() { if (jedisPool == null) { initialPool(); } try { if (jedisPool != null) { Jedis resource = jedisPool.getResource(); resource.select(DEFAULT_DB_INDEX); return resource; } else { return null; } } catch (Exception e) { e.printStackTrace(); return null; } } public synchronized static Jedis getJedisInstance(final int dbIndex) { if (jedisPool == null) { initialPool(); } try { if (jedisPool != null) { Jedis resource = jedisPool.getResource(); resource.select(dbIndex); return resource; } else { return null; } } catch (Exception e) { e.printStackTrace(); return null; } } public static void returnResource(final Jedis jedis) { if (jedis != null) { jedisPool.returnResource(jedis); } } }