package test;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import redis.clients.jedis.Jedis;
/**
*
* redis是键值对的数据库,有5中主要数据类型:
* 字符串类型(string),散列类型(hash),列表类型(list),集合类型(set),有序集合类型(zset)
*
*/
public class RedisTest {
public static void main(String[] args) {
//连接本地的 Redis 服务
Jedis jedis = new Jedis("");
//查看服务是否运行
System.out.println("服务正在运行: "+jedis.ping());
//1、字符串
jedis.set("a", "aaa");
System.out.println("连接成功"+jedis.get("a")+"--");
//2、Hash 对于某些不定项操作可以利用哈希扩展
jedis.hset("tom", "name", "aa");
jedis.hset("tom", "age", "12");
System.out.println(jedis.hmget("tom","age"));
System.err.println(jedis.hgetAll("tom"));
//3、List列表
jedis.lpush("push", "push1");
jedis.lpush("push", "push2");
jedis.lpush("push", "push3");
jedis.lpush("push", "push2");
// 获取存储的数据并输出
List<String> list = jedis.lrange("push", 0 ,jedis.llen("push"));
for(int i=0; i<list.size(); i++) {
System.out.println("列表项为: "+list.get(i));
}
//4、Set 集合 不能添加重复元素
jedis.sadd("fruit", "苹果","香蕉","橘子");
jedis.sadd("zoo", "狗", "猫", "猪", "橘子");
System.out.println(jedis.smembers("friut")+"随机:"+jedis.srandmember("friut"));
//fruit与zoo的交集
System.out.println("含有相同元素:"+jedis.sinter("friut","zoo"));
//5、有序集合zset
jedis.zadd("setTest",2,"set2");
jedis.zadd("setTest",1,"set1");
jedis.zadd("setTest",3,"set3");
jedis.zadd("setTest",4,"set4");
Set<String> set = jedis.zrange("setTest",0,-1);
Iterator<String> it = set.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
Redis连接池:
1 package com.test; 2 3 import redis.clients.jedis.Jedis; 4 import redis.clients.jedis.JedisPool; 5 import redis.clients.jedis.JedisPoolConfig; 6 7 public final class RedisUtil { 8 9 //Redis服务器IP 10 private static String ADDR = "192.168.0.100"; 11 12 //Redis的端口号 13 private static int PORT = 6379; 14 15 //访问密码 16 private static String AUTH = "admin"; 17 18 //可用连接实例的最大数目,默认值为8; 19 //如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。 20 private static int MAX_ACTIVE = 1024; 21 22 //控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。 23 private static int MAX_IDLE = 200; 24 25 //等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException; 26 private static int MAX_WAIT = 10000; 27 28 private static int TIMEOUT = 10000; 29 30 //在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的; 31 private static boolean TEST_ON_BORROW = true; 32 33 private static JedisPool jedisPool = null; 34 35 /** 36 * 初始化Redis连接池 37 */ 38 static { 39 try { 40 JedisPoolConfig config = new JedisPoolConfig(); 41 config.setMaxActive(MAX_ACTIVE); 42 config.setMaxIdle(MAX_IDLE); 43 config.setMaxWait(MAX_WAIT); 44 config.setTestOnBorrow(TEST_ON_BORROW); 45 jedisPool = new JedisPool(config, ADDR, PORT, TIMEOUT, AUTH); 46 } catch (Exception e) { 47 e.printStackTrace(); 48 } 49 } 50 51 /** 52 * 获取Jedis实例 53 * @return 54 */ 55 public synchronized static Jedis getJedis() { 56 try { 57 if (jedisPool != null) { 58 Jedis resource = jedisPool.getResource(); 59 return resource; 60 } else { 61 return null; 62 } 63 } catch (Exception e) { 64 e.printStackTrace(); 65 return null; 66 } 67 } 68 69 /** 70 * 释放jedis资源 71 * @param jedis 72 */ 73 public static void returnResource(final Jedis jedis) { 74 if (jedis != null) { 75 jedisPool.returnResource(jedis); 76 } 77 } 78 }