Jedis操作Redis

Redis各特性的应用场景:[url]http://www.cnblogs.com/markhe/p/5689356.html[/url]
Redis中7种集合类型应用场景:[url]http://www.t086.com/article/4902[/url]
Jedis API:[url]http://tool.oschina.net/uploads/apidocs/[/url]
利用JAVA操作Redis:[url]http://flychao88.iteye.com/blog/1527163[/url]
需要引入的包:

[img]http://dl2.iteye.com/upload/attachment/0122/1560/a378f9c4-c3da-38cf-89b7-a1b39ebf0f30.png[/img]

测试主类:
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import entity.User;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.Tuple;

public class RedisTest {
private static JedisPoolConfig jConfig = null;
private static JedisPool pool = null;
private static Jedis jedis = null;
static {
jConfig = new JedisPoolConfig();
}
public static void init() {
pool = new JedisPool(jConfig,"192.168.126.128",6379);
jedis = pool.getResource();
jedis.auth("redis");
//测试是否连接成功
System.out.println("Connecting redis......."+jedis.ping());
}
public static void main(String[] args) throws InterruptedException {
init();
// testBasicString();
// testKeyTTL();
// testHash();
// testMap();
// testSet();
// testZSet();
// testList();
// testListSort();
//手机验证码
jedis.set("13697082168", "705634");
jedis.expire("13697082168", 60);
//存储用户信息
Map<String ,String> uMap = new HashMap<String ,String>();
uMap.put("name", "donald");
uMap.put("sex", "man");
uMap.put("age", "23");
jedis.hmset(uMap.get("name"), uMap);
System.out.println(jedis.hgetAll(uMap.get("name")));

//用list存储用户信息
User user = new User();
user.setAge(18);
user.setName("lucy");
user.setSex("female");
String userJson = JsonUtil.toJson(user);
jedis.lpush("usersInfo", userJson);
String uInfo = jedis.rpop("usersInfo");
System.out.println("=====userJson:"+uInfo);
User userx = JsonUtil.fromJson(uInfo, User.class);
System.out.println("=====userInfo:"+userx.getName()+","+userx.getSex()+","+userx.getAge());

//List,可用于消息队列,生产者生产消息放进List,消费者消费消息,这里就不添加实例了

//游戏排名
jedis.zadd("plays", 500000, "战神");
jedis.zadd("plays", 489000, "射手");
jedis.zadd("plays", 300000, "巫师");
System.out.println(jedis.zrevrangeByScore("plays", 500000, 300000));
//返回有序集合中给定的分数区间的所有成员及分数,分数从高到低
Set<Tuple> rankPlay= jedis.zrevrangeByScoreWithScores("plays", 500000, 300000);
for(Tuple t : rankPlay){
System.out.print("ScoreS:"+t.getScore()+","+"playsName:"+t.getElement());
System.out.print(";");
}


//切换数据库
// jedis.select(0);
//删除当前数据库所有keys,慎用
//将缓存写到AOP
// jedis.bgrewriteaof();
//dump 到rdb文件
// jedis.bgsave();
// System.out.println("====key sizes:"+jedis.dbSize());
jedis.flushDB();
//删除当前所有数据库所有keys,慎用
// jedis.flushAll();
}
/**
* Redis存储初级的字符串
* CRUD
*/
public static void testBasicString(){
//-----添加数据----------
jedis.set("name","donald");//向key-->name中放入了value-->donald
System.out.println(jedis.get("name"));//执行结果:donald
//-----修改数据-----------
//1、在原来基础上修改
jedis.append("name","han"); //很直观,将'han' append到已经有的value之后
System.out.println(jedis.get("name"));//执行结果:donaldhan
//2、直接覆盖原来的数据
jedis.set("name","rain");
System.out.println(jedis.get("name"));//执行结果:rain
//删除key对应的记录
jedis.del("name");
System.out.println(jedis.get("name"));//执行结果:null
/**
* mset相当于设置多个k-v值对
* jedis.set("name","jamel");
* jedis.set("sex","man");
*/
jedis.mset("name","jamel","sex","man");
System.out.println(jedis.mget("name","sex"));
//删除多个key
jedis.del(new String[]{"name","sex"});
System.out.println(jedis.mget("name","sex"));

}
/**
* 测试key生存时间,获取指定模式的keys集合,
* @throws InterruptedException
*/
public static void testKeyTTL() throws InterruptedException {
jedis.del(new String[]{"name","sex"});
jedis.set("name","donald");
jedis.set("sex","man");
System.out.println(jedis.get("name"));//执行结果:donald
//keys中传入的可以用通配符
System.out.println(jedis.keys("*")); //返回当前库中所有的key
System.out.println(jedis.keys("*name"));//返回的sname [sname, name]
System.out.println(jedis.ttl("name"));//返回给定key的有效时间,如果是-1则表示永远有效
// jedis.expire("name", 10);
jedis.setex("name", 10, "rain");//通过此方法,可以指定key的存活(有效时间) 时间为秒 ,并重新设值
Thread.sleep(5000);//睡眠5秒后,剩余时间将为<=5
System.out.println(jedis.ttl("name")); //输出结果为5
System.out.println(jedis.get("name"));//执行结果:rain
jedis.setex("name", 1, "jamel"); //设为1后,下面再看剩余时间就是1了
System.out.println(jedis.ttl("name")); //输出结果为1
System.out.println(jedis.get("name"));//执行结果:jamel
System.out.println(jedis.exists("name"));//检查key是否存在
System.out.println(jedis.rename("name","namex")); //重命名key
System.out.println(jedis.get("name"));//因为移除,返回为null
System.out.println(jedis.get("namex")); //因为将name 重命名为namex 所以可以取得值 jamel
jedis.del(new String[]{"name","sex"});
System.out.println(jedis.mget("name","sex"));
}
/**
* 哈希操作
*/
public static void testHash(){
//设值hash field value
jedis.hset("user", "name", "donlad");
jedis.hset("user", "sex", "man");
jedis.hset("user", "age", "12");
System.out.println(jedis.hget("user", "name"));//获取user的name值
System.out.println(jedis.hexists("user", "name"));//判断user的name是否存在
System.out.println(jedis.hlen("user"));//判断user的field的数量
System.out.println(jedis.hgetAll("user"));//获取user的所有field
System.out.println(jedis.hkeys("user"));//获取user的所有keys
System.out.println(jedis.hvals("user"));//获取user的所有values
jedis.hdel("user","age");//删除user的age属性
System.out.println(jedis.hgetAll("user"));
jedis.hsetnx("user","age", "30");//如果user的属性存在,则重新设值
System.out.println(jedis.hgetAll("user"));
jedis.del("user");
}
/**
* jedis操作Map
*/
public static void testMap(){
Map<String,String> user = new HashMap<String,String>();
user.put("name","donald");
user.put("sex","man");
jedis.hmset("user",user);
//取出user中的name,执行结果:[minxr]-->注意结果是一个泛型的List
//第一个参数是存入redis中map对象的key,后面跟的是放入map中的对象的key,后面的key可以跟多个,是可变参数
List<String> rsmap = jedis.hmget("user", new String[]{"name","sex"});
System.out.println(rsmap);
//删除map中的某个键值
jedis.hdel("user","sex");
System.out.println(jedis.hmget("user", "sex")); //因为删除了,所以返回的是null
System.out.println(jedis.hlen("user")); //返回key为user的键中存放的值的个数1
System.out.println(jedis.exists("user"));//是否存在key为user的记录 返回true
System.out.println(jedis.hgetAll("user"));//获取user的所有k-v对
System.out.println(jedis.hkeys("user"));//返回map对象中的所有key
System.out.println(jedis.hvals("user"));//返回map对象中的所有value
Iterator<String> iter=jedis.hkeys("user").iterator();
while (iter.hasNext()){
String key = iter.next();
System.out.println(key+":"+jedis.hmget("user",key));
}
jedis.del("user");

}
/**
* jedis操作Set
*/
public static void testSet(){
//添加
jedis.del("name");
jedis.sadd("name","donald");
jedis.sadd("name","rain");
jedis.sadd("name","jamel");
System.out.println(jedis.sismember("name", "donald"));//判断 donald 是否是name集合的元素
System.out.println(jedis.scard("name"));//返回集合的元素个数
System.out.println(jedis.srandmember("name")); //从集合中,随机获取一个元素
System.out.println(jedis.smembers("name"));//获取所有加入的value
Set<String> nameSet = jedis.smembers("name");
int i =0;
int size = jedis.scard("name").intValue();
for(String name : nameSet){
System.out.print(name);
if(i<(size-1)){
System.out.print(",");
}
i++;
}
System.out.println();
//移除noname
jedis.srem("name","donald");
System.out.println(jedis.scard("name"));//返回集合的元素个数
System.out.println(jedis.smembers("name"));//获取所有加入的value
//新建集合name1
jedis.sadd("name1","jamel");
jedis.sadd("name1","han");
//差集
System.out.println(jedis.sdiff("name","name1"));//name 与name1的差集
jedis.sdiffstore("name2", "name","name1");//将name 与name1的差集存储在name2
System.out.println(jedis.smembers("name2"));
//交集
System.out.println(jedis.sinter("name","name1"));//name 与name1的交集
jedis.sinterstore("name3","name","name1");//将name 与name1的交集存储在name3
System.out.println(jedis.smembers("name3"));
//合集
System.out.println(jedis.sunion("name","name1"));
jedis.sunionstore("name4","name","name1");
System.out.println(jedis.smembers("name4"));
jedis.del("name","name1","name2","name3","name4");
}
/**
* 测试Zset
*
*/
public static void testZSet(){
Map<Double,String> name = new HashMap<Double,String>();
name.put(1.0, "donald");
name.put(3.0, "rain");
name.put(1.5, "jamel");
jedis.zadd("name", name);
//获取集合中成员数
System.out.println(jedis.zcard("name"));
//获取集合中分数在1和2之间的成员数
System.out.println(jedis.zcount("name", "1", "2"));
//获取donald在集合中的分数(权重)
System.out.println(jedis.zscore("name", "donald"));
jedis.zincrby("name", 0.2, "donald");
System.out.println(jedis.zscore("name", "donald"));
//获取donald在集合中的索引
System.out.println(jedis.zrank("name", "donald"));
System.out.println(jedis.zrange("name", 0, -1));
//返回有序集合中给定的分数区间的所有成员,从低到高
System.out.println(jedis.zrangeByScore("name", 1, 2));
//返回有序集合中给定的分数区间的所有成员及分数,从低到高
Set<Tuple> rScores= jedis.zrangeByScoreWithScores("name", 1, 2);
for(Tuple t : rScores){
System.out.print("Score:"+t.getScore()+","+"name:"+t.getElement());
System.out.print(";");
}
System.out.println();
//通过索引,返回有序集合中给定的索引区间的所有成员,分数从高到低
System.out.println(jedis.zrevrange("name", 0, 2));
System.out.println(jedis.zrevrangeByScore("name", 3, 1));
//返回有序集合中给定的分数区间的所有成员及分数,分数从高到低
Set<Tuple> rScoresx= jedis.zrevrangeByScoreWithScores("name", 3, 1);
for(Tuple t : rScoresx){
System.out.print("Score:"+t.getScore()+","+"name:"+t.getElement());
System.out.print(";");
}
System.out.println();

//移除jamel成员
jedis.zrem("name", "jamel");
System.out.println(jedis.zrange("name", 0, -1));
//新建集合
jedis.zadd("name1", 1.0, "donald");
jedis.zadd("name1", 4.0, "han");
//将name与name1的交集存储到name2中
jedis.zinterstore("name2", "name","name1");
System.out.println(jedis.zrange("name2", 0, -1));
//将name与name1的并集存储到name3中
jedis.zunionstore("name3", "name","name1");
System.out.println(jedis.zrange("name3", 0, -1));

jedis.zadd("name1", 2.0, "jack");
jedis.zadd("name1", 3.0, "mark");
jedis.zadd("name1", 5.0, "james");

System.out.println(jedis.zrange("name1", 0, -1));
//根据索引移除成员
jedis.zremrangeByRank("name1", 0, 1);
System.out.println(jedis.zrange("name1", 0, -1));
//根据分数移除成员
jedis.zremrangeByScore("name1",3 , 4);
System.out.println(jedis.zrange("name1", 0, -1));
jedis.del("name","name1","name2","name3");
}
/**
* jedis操作List
*/
public static void testList(){
//开始前,先移除所有的内容
jedis.del("name");
//先向key name中存放三条数据
jedis.lpush("name","donald");
jedis.lpush("name","jamel");
jedis.lpush("name","rain");
jedis.lpush("name","mark");
//再取出所有数据jedis.lrange是按范围取出,
// 第一个是key,第二个是起始位置,第三个是结束位置,jedis.llen获取长度 -1表示取得所有
System.out.println(jedis.lrange("name",0,-1));
System.out.println(jedis.lindex("name", 0));
System.out.println(jedis.llen("name"));
System.out.println(jedis.lpop("name"));
System.out.println(jedis.lrange("name",0,-1));
jedis.lset("name", 0, "mark");
System.out.println(jedis.lrange("name",0,-1));
jedis.rpush("name", "jack");
System.out.println(jedis.lrange("name",0,-1));
jedis.rpop("name");
System.out.println(jedis.lrange("name",0,-1));
jedis.blpop(5000, "name");
System.out.println(jedis.lrange("name",0,-1));
jedis.brpop(5000, "name");
System.out.println(jedis.lrange("name",0,-1));
jedis.del("name");
}
/**
* 测试List排序
* @throws InterruptedException
*/
public static void testListSort() throws InterruptedException {
//jedis 排序
//注意,此处的rpush和lpush是List的操作。是一个双向链表(但从表现来看的)
jedis.del("age");//先清除数据,再加入数据进行测试
jedis.rpush("age", "1");
jedis.lpush("age","6");
jedis.lpush("age","3");
jedis.lpush("age","9");
System.out.println(jedis.lrange("age",0,-1));// [9, 3, 6, 1]
System.out.println(jedis.sort("age")); //[1, 3, 6, 9] //输入排序后结果
System.out.println(jedis.lrange("age",0,-1));
jedis.del("age");
}
}


实例类:
package entity;
import java.io.Serializable;

public class User implements Serializable {

/**
*
*/
private static final long serialVersionUID = -6599570969298034702L;
private String name;
private String sex;
private int age;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

}


Json工具类:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
/**
*
* @author donald
*
*/
public class JsonUtil {
/**
* 对象转换成JSON字符串 obj
* @param obj 需要转换的对象
* @return 对象的string字符
*/
public static String toJson(Object obj) {
JSONObject jSONObject = JSONObject.fromObject(obj);
return jSONObject.toString();
}
/**
* just for String[]
* @param obj
* @return
*/
public static String ArraytoJson(Object obj) {
JSONArray jsonArr = JSONArray.fromObject(obj);
return jsonArr.toString();
}
/**
* JSON字符串转换成对象
* @param jsonString 需要转换的字符串
* @param type 需要转换的对象类型
* @return 对象
*/
@SuppressWarnings("unchecked")
public static <T> T fromJson(String jsonString, Class<T> type) {
JSONObject jsonObject = JSONObject.fromObject(jsonString);
return (T) JSONObject.toBean(jsonObject, type);
}
public static <T> String ListToJson(List<T> lobj){
JSONArray jsonArr = JSONArray.fromObject(lobj);
return jsonArr.toString();
}
/**
* 根据json String 返回List
* @param json
* @return
*/
public static List<Object> jsonToList(String json){
JSONArray jsonArr = JSONArray.fromObject(json);
return jsonToList(jsonArr);
}
/**
* 将Json String转化为 bean list
* @param jsonArray
* @param clazz
* @return
*/
@SuppressWarnings({ "rawtypes" })
public static List jsonToList(String json,Class clazz){
JSONArray jsonArr = JSONArray.fromObject(json);
return jsonToList(jsonArr,clazz);
}
/**
* 将JSONArray转化为 bean list
* @param jsonArray
* @param clazz
* @return
*/
@SuppressWarnings({ "rawtypes", "deprecation" })
public static List jsonToList( JSONArray jsonArray,Class clazz){
if(jsonArray!=null){
try{
List list = JSONArray.toList(jsonArray,clazz);
return list;
}catch(Exception e){
return null;
}
}else{
return null;
}
}
/**
* 将JSONArray对象转换成list集合 map
* @param jsonArr
* @return
*/
public static List<Object> jsonToList(JSONArray jsonArr) {
List<Object> list = new ArrayList<Object>();
for (Object obj : jsonArr) {
if (obj instanceof JSONArray) {
list.add(jsonToList((JSONArray) obj));
} else if (obj instanceof JSONObject) {
list.add(jsonToMap((JSONObject) obj));
} else {
list.add(obj);
}
}
return list;
}

/**
* 将json字符串转换成map对象
*
* @param json
* @return
*/
public static Map<String, Object> jsonToMap(String json) {
JSONObject obj = JSONObject.fromObject(json);
return jsonToMap(obj);
}

/**
* 将JSONObject转换成map对象
*
* @param json
* @return
*/
public static Map<String, Object> jsonToMap(JSONObject obj) {
Set<?> set = obj.keySet();
Map<String, Object> map = new HashMap<String, Object>(set.size());
for (Object key : obj.keySet()) {
Object value = obj.get(key);
if (value instanceof JSONArray) {
map.put(key.toString(), jsonToList((JSONArray) value));
} else if (value instanceof JSONObject) {
map.put(key.toString(), jsonToMap((JSONObject) value));
} else {
map.put(key.toString(), obj.get(key));
}

}
return map;
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值