目录
1、jedis单例连接池和操作String和map类型的Value的实战
5、set集合类型
6、有序set集合类型
1、jedis单例连接池和操作String和map类型的Value的实战
public class CustomJedisPoolUtils {
private static CustomJedisPool jedisPool = null;
public static CustomJedisPool getJedisPool() {
if (jedisPool == null) {
synchronized (CustomJedisPoolUtils.class) {
if (jedisPool == null) {
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setNumTestsPerEvictionRun(-1);// 这个配置项可以不用显式指定,jedispoolConfig默认给的是-1,这里写出来只是为了解释下-1的含义:对连接池中的所有空闲连接进行检查
poolConfig.setTimeBetweenEvictionRunsMillis(300000); // 5分钟
poolConfig.setMinEvictableIdleTimeMillis(1800000);//逐出连接的最小空闲时间 默认1800000毫秒(30分钟)
poolConfig.setMaxTotal(30); // 设置最大连接数
poolConfig.setTestWhileIdle(true);//在空闲时检查有效性, 默认false
final ApiInfo apiInfo = ApiInfo.build().
setUrl("http")
.setRole(Role.MASTER).create();
jedisPool = new CustomJedisPool(poolConfig, apiInfo, "aa");
}
}
}
return jedisPool;
}
public static void returnJedisPool() {
jedisPool.close();
}
}
import com.sohu.jedis.ApiInfo;
import com.sohu.jedis.CustomJedis;
import com.sohu.jedis.CustomJedisPool;
import com.sohu.jedis.Role;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import redis.clients.jedis.JedisPoolConfig;
import java.util.Map;
public class RedisUtilsClass {
public static final int CACHE_SECONDS = 604800;//7天
private static final Log logger = LogFactory.getLog(RedisUtilsClass.class);
CustomJedisPool jedisPool=null;
private CustomJedis jedis = null;
public RedisUtilsClass(CustomJedisPool jedisPool) {
this.jedisPool=jedisPool;
this.jedis=jedisPool.getResource();
}
//String类型的set/get
public void setExKey(String key, String value) {
int tryTime = Config.tryTime;
while(tryTime > 0) {
tryTime--;
try {
this.jedis.setex(key, CACHE_SECONDS, value);
logger.info("set_into_redis key : " + key + " , value: " + value);
break;
} catch (Exception e) {
e.printStackTrace();
this.jedis.close();
this.jedis=this.jedisPool.getResource();
logger.info("setExKey get new jedis connection");
}
}
}
public String getExKey(String key) {
String value=null;
int tryTime = Config.tryTime;
while(tryTime > 0){
tryTime--;
try {
value=this.jedis.get(key);
break;
} catch (Exception e) {
e.printStackTrace();
this.jedis.close();
this.jedis=this.jedisPool.getResource();
logger.info("getExKey get new jedis connection");
}
}
return value;
}
}
每个线程一个链接
RedisUtilsClass redisUtils = new RedisUtilsClass(CustomJedisPoolUtils.getJedisPool());
2、String类型
@Test
public void testString(){
//设置键 获取键 get set
jedis.set("steve","stevetao");
System.out.println("设置后值:"+jedis.get("steve"));
//追加键 append
jedis.append("steve"," Is Good Man");
System.out.println("追加后值:"+jedis.get("steve"));
//删除操作 del
jedis.del("steve");
System.out.println("删除后值:"+jedis.get("steve"));
//不存在就保存, setnx msetnx
jedis.setnx("steve","stevetao");
System.out.println("设置后值:"+jedis.get("steve"));
System.out.println("再次设置后值:"+jedis.setnx("steve","stevetao"));
//截取字符串 substr
System.out.println("截取后值:"+jedis.substr("steve",0,4));
//设置多个键值对 mset mget
jedis.mset(new String[]{"zhangsan","123","lisi","1234"});
System.out.println("多次设置后值:"+jedis.mget("zhangsan","lisi"));
//递增递减 incr decr incrby decrby
jedis.incr("zhangsan");
jedis.decr("lisi");
System.out.println("递增递减后值:"+jedis.mget("zhangsan","lisi"));
jedis.incrBy("zhangsan",6);
jedis.decrBy("lisi",3);
System.out.println("递增递减后值:"+jedis.mget("zhangsan","lisi"));
}
3、List类型
@Test
public void testList(){
//尾添加 rpush 头添加 lpush
jedis.lpush("books","java","C++","Ruby","Scala","python");
jedis.rpush("language","java","C++","Ruby","Scala","python");
// -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
System.out.println("头添加后books值:"+jedis.lrange("books",0,-1));
System.out.println("尾添加后language值:"+jedis.lrange("language",0,-1));
//尾部删除 rpop 头部删除 lpop
System.out.println("删除的值为:"+jedis.lpop("books"));
System.out.println("删除的值为:"+jedis.rpop("language"));
System.out.println("头部删除后books值:"+jedis.lrange("books",0,-1));
System.out.println("尾部删除后language值:"+jedis.lrange("language",0,-1));
//尾部删除并头添加 rpoplpush
jedis.rpoplpush("language","books");
System.out.println("尾部删除并头添加后books值:"+jedis.lrange("books",0,-1));
System.out.println("尾部删除并头添加后language值:"+jedis.lrange("language",0,-1));
//区别: 只能给存在的list做添加,不能项lpush那样能新增list
jedis.lpushx("books","php");
jedis.lpushx("book","php");
System.out.println("头添加后books值:"+jedis.lrange("books",0,-1));
System.out.println("头添加后book值:"+jedis.lrange("book",0,-1));
//获取集合长度 llen 指定索引的值 lindex 保留截取的值 ltrim
System.out.println("books集合长度:"+jedis.llen("books"));
System.out.println("books集合第二个数值:"+jedis.lindex("books",1));
jedis.ltrim("books",0,2);
System.out.println("截取后books值:"+jedis.lrange("books",0,-1));
}
4、Hash类型
@Test
public void testHash(){
//适合字段:设值hset 取值hget(如果value是json字符串,类似保存对象)
jedis.hset("student","name","zhangsan");
System.out.println("student中name的值为:"+jedis.hget("student","name"));
//适合对象:设值hmset 取值hmget
Map<String,String> map = new HashMap<String,String>();
map.put("name", "lisi");
map.put("age", "36");
jedis.hmset("teacher",map);
System.out.println("teacher中name、age的值为:"+jedis.hmget("teacher","name","age"));
//teacher是否存在键age hexists
if(jedis.hexists("teacher","age")){
//给指定值增加4 hincrBy
jedis.hincrBy("teacher","age",4);
System.out.println("teacher中name、age的值为:"+jedis.hmget("teacher","name","age"));
}
//返回key的个数hlen 返回值hvals 返回键hkeys 键值对hgetAll
jedis.hset("student","age","13");
jedis.hset("student","qq","2246920330");
jedis.hset("student","address","beijing");
System.out.println("student中键的个数为:"+jedis.hlen("student"));
System.out.println("student中所有的键为:"+jedis.hkeys("student"));
System.out.println("student中所有的值为:"+jedis.hvals("student"));
System.out.println("student中所有的键值对为:"+jedis.hgetAll("student"));
//删除 hdel
jedis.hdel("student",new String[]{"address","qq","age"});
System.out.println("删除后,student中所有的键值对为:"+jedis.hgetAll("student"));
}
5、set集合类型
6、有序集合