您的位置:首页 > 数据库 > Redis

Redis客户端之Jedis

2014-08-22 09:33 127 查看
Redis客户端之Jedis

package com.jredis.demo;

import java.util.List;
import java.util.Set;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.SortingParams;

public class JedisDemo {

////
public static void Hello() {
Jedis jedis = new Jedis("localhost", 6379);
try {
// 向key-->name中放入了value-->Hello
jedis.set("name", "Hello");
String ss = jedis.get("name");
System.out.println("---开始-----"+ss);

// 很直观,类似map 将HinsChan append到已经有的value之后
jedis.append("name", ",HinsChan");
ss = jedis.get("name");
System.out.println("---拼接-----"+ss);

// 2、直接覆盖原来的数据
jedis.set("name", "Navigation");
System.out.println("---覆盖-----"+jedis.get("name"));

// 删除key对应的记录
jedis.del("name");
System.out.println("---已删除-----"+jedis.get("name"));// 执行结果:null

/**
* mset相当于 jedis.set("key1","minxr"); jedis.set("key2","aaa");
* MSET key value [key value ...]
同时设置一个或多个 key-value 对。
如果某个给定 key 已经存在,那么 MSET 会用新值覆盖原来的旧值,如果这不是你所希望的效果,请考虑使用 MSETNX 命令:它只会在所有给定 key 都不存在的情况下进行设置操作。
MSET 是一个原子性(atomic)操作,所有给定 key 都会在同一时间内被设置,某些给定 key 被更新而另一些给定 key 没有改变的情况,不可能发生。
*/
jedis.mset("key1", "张三", "key2", "李四");
System.out.println();
System.out.println(jedis.mget("key2"));
System.out.println(jedis.mget("key1", "key2"));
} catch (Exception e) {
e.printStackTrace();
} finally {
// RedisUtil.getPool().returnResource(jedis);
System.out.println("00");
}

}

//////jedis ----key
public static void testKey() {
Jedis jedis = new Jedis("127.0.0.1", 6379);
System.out.println("=============key==========================");
// 清空数据
System.out.println("------清空数据--------"+jedis.flushDB());
System.out.println(jedis.echo("-------打印---------"+"foo"));//ECHO message 打印一个特定的信息 message ,测试时使用。
// 判断key否存在
System.out.println("-----判断key否存在----------"+jedis.exists("foo"));
jedis.set("key", "values");
System.out.println("-----判断key否存在----------"+jedis.exists("key"));
}

///jedis字符串
public static void testString() {
System.out.println("==String==");
Jedis jedis = new Jedis("127.0.0.1", 6379);
try {
// String
jedis.set("key", "Hello World!");
String value = jedis.get("key");
System.out.println(value);
} catch (Exception e) {
e.printStackTrace();
} finally {
// jedis.flushDB();
}

System.out.println("=============String==========================");
// 清空数据
System.out.println(jedis.flushDB());
// 存储数据
jedis.set("foo", "bar");
System.out.println(jedis.get("foo"));
// 若key不存在,则存储
jedis.setnx("foo", "foo not exits");
System.out.println(jedis.get("foo"));
// 覆盖数据
jedis.set("foo", "foo update");
System.out.println(jedis.get("foo"));
// 追加数据
jedis.append("foo", " hello, world");
System.out.println(jedis.get("foo"));
// 设置key的有效期,并存储数据 ,有效时间为2秒
jedis.setex("foo", 2, "foo not exits");
System.out.println(jedis.get("foo"));
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
}
System.out.println(jedis.get("foo"));
// 获取并更改数据
jedis.set("foo", "foo update");
System.out.println(jedis.getSet("foo", "foo modify"));//先获取,再更新
System.out.println("--------"+jedis.get("foo"));
// 截取value的值
System.out.println(jedis.getrange("foo", 1, 3));

//一次性设置多个值
System.out.println(jedis.mset("mset1", "mvalue1", "mset2", "mvalue2",
"mset3", "mvalue3", "mset4", "mvalue4"));
System.out.println(jedis.mget("mset1", "mset2", "mset3", "mset4"));

//删除,参数可以是一个字符串数组
System.out.println(jedis.del(new String[] { "foo", "foo1", "foo3" }));
}

///redis ---list
public static void testList() {
System.out.println("==List==");
Jedis jedis = new Jedis("127.0.0.1", 6379);
try {
// 开始前,先移除所有的内容
jedis.del("messages");
jedis.rpush("messages", "Hello how are you?");
jedis.rpush("messages", "Fine thanks. I'm having fun with redis.");
jedis.rpush("messages", "I should look into this NOSQL thing ASAP");

// 再取出所有数据jedis.lrange是按范围取出,
// 第一个是key,第二个是起始位置,第三个是结束位置,jedis.llen获取长度 -1表示取得所有
List<String> values = jedis.lrange("messages", 0, -1);
System.out.println(values);

} catch (Exception e) {
e.printStackTrace();
} finally {
// RedisUtil.getPool().returnResource(jedis);
}

// 清空数据
System.out.println(jedis.flushDB());
// 添加数据
jedis.lpush("lists", "vector");
jedis.lpush("lists", "ArrayList");
jedis.lpush("lists", "LinkedList");
// 数组长度
System.out.println("------长度---------"+jedis.llen("lists"));
// 排序
/*
* list中存字符串时必须指定参数为alpha,如果不使用SortingParams,而是直接使用sort("list"),
* 会出现"ERR One or more scores can't be converted into double"
*/
SortingParams sortingParameters = new SortingParams();
sortingParameters.alpha();
sortingParameters.limit(0, 3);
System.out.println("------排序---------"+jedis.sort("lists",sortingParameters));
// 字串 数组[0]、[1]
System.out.println("------指定输出的个数---------"+jedis.lrange("lists", 0, 1));
// 修改列表中单个值
jedis.lset("lists", 0, "hello list!");
System.out.println("------修改列表中单个值 ---------"+jedis.lrange("lists", 0, -1));
// 获取列表指定下标的值
System.out.println("------获取第二个---------"+jedis.lindex("lists", 1));
// 删除列表指定下标的值
System.out.println("------删除第一个---------"+jedis.lrem("lists", 1, "vector"));
// 删除区间以外的数据
System.out.println("------删除区间以外的数据 ---------"+jedis.ltrim("lists", 0, 1));
// 列表出栈
System.out.println("------列表出栈 ---------"+jedis.lpop("lists"));
// 整个列表值
System.out.println("------输出list的值---------"+jedis.lrange("lists", 0, -1));
}

////----jedis-set
public static void testSet() {
System.out.println("==Set==");
Jedis jedis = new Jedis("127.0.0.1", 6379);
try {
jedis.sadd("myset", "1");
jedis.sadd("myset", "2");
jedis.sadd("myset", "3");
jedis.sadd("myset", "4");
Set<String> setValues = jedis.smembers("myset");
System.out.println(setValues);

// 移除noname
jedis.srem("myset", "4");
System.out.println(jedis.smembers("myset"));// 获取所有加入的value
System.out.println(jedis.sismember("myset", "4"));// 判断 minxr
// 是否是sname集合的元素
System.out.println(jedis.scard("sname"));// 返回集合的元素个数
} catch (Exception e) {
e.printStackTrace();
} finally {
//RedisUtil.getPool().returnResource(jedis);
}

// 清空数据
System.out.println(jedis.flushDB());
// 添加数据
jedis.sadd("sets", "HashSet");
jedis.sadd("sets", "SortedSet");
jedis.sadd("sets", "TreeSet");
// 判断value是否在列表中
System.out.println(jedis.sismember("sets", "TreeSet"));
;
// 整个列表值
System.out.println(jedis.smembers("sets"));
// 删除指定元素
System.out.println(jedis.srem("sets", "SortedSet"));
// 出栈
System.out.println(jedis.spop("sets"));
System.out.println(jedis.smembers("sets"));
//
jedis.sadd("sets1", "HashSet1");
jedis.sadd("sets1", "SortedSet1");
jedis.sadd("sets1", "TreeSet");
jedis.sadd("sets2", "HashSet2");
jedis.sadd("sets2", "SortedSet1");
jedis.sadd("sets2", "TreeSet1");
// 交集
System.out.println(jedis.sinter("sets1", "sets2"));
// 并集
System.out.println(jedis.sunion("sets1", "sets2"));
// 差集
System.out.println(jedis.sdiff("sets1", "sets2"));
}

public static void main(String args[]){
/**
* 在不同的线程中使用相同的Jedis实例会发生奇怪的错误。但是创建太多的实现也不好因为这意味着会建立很多sokcet连接,
* 也会导致奇怪的错误发生。单一Jedis实例不是线程安全的。为了避免这些问题,可以使用JedisPool,
* JedisPool是一个线程安全的网络连接池。可以用JedisPool创建一些可靠Jedis实例,可以从池中拿到Jedis的实例。
* 这种方式可以解决那些问题并且会实现高效的性能
*/
//Hello();
//testKey();
//testString();
//testList();
testSet();

}

}//////////////////////////////////////
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: