1. jedis其实就是java链接redis的驱动。
2. 启动redis服务端,可以代码进行测试
2.1 引入依赖:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
2.2 代码测试:
Jedis jedis = new Jedis("localhost");
jedis.ping();
2.3 jedis抽象封装成三部分:
2.3.1 对象池设计:pool、jedisPool、JedisFactory
2.3.2 redis操作封装:jedisCommands、BinaryJedis、jedis
2.3.4 面向redis服务器的操作封装:Commands、Client、BinaryClient
3. 测试
3.1 字符串:
存:jedis.set(key,value);
取: jedis.get(key);
3.2 列表
存:jedis.lpush(key,value1);
jedis.lpush(key,value2);
取:List<String> list = jedis.lrange(key,0,-1);
for(int i = 0; i<list.size(); i++){
list.get(i);
}
3.3 set:
存:jedis.sadd(key,member1,member2,member3);
取:Set<String> smembers = jedis.smembers(key);
for(String str : smembers){
str
}
3.4 hash:
存: jedis.hset(key,field1,field1_value);
jedis.hset(key.field2,field2_value);
取:Map<String,String> map = jedis.hgetAll(key);
Set<Entry<String,String>> entrySet = map.entrySet();
for(Entry<String,String> entry : entrySet){
entry.getKey()+entry.getValue()
}
3.5 zset:
存:Map<String,String> map = new HashMap<String,String>();
map.put(name1,value1);
map.put(name2,value2);
jedis.zadd(key,map);
取:Set<String> zrange = jedis.zrange(key,0,-1);
for(String member : zrange){
member
jedis.zscore(key,member);
}
3.6 取所有键:
jedis.keys("*");
4. jedis通知:
4.1 订阅(覆盖JedisPubSub中的onMessage方法) :
JedisPubSub pubSub = new JedisPubSub(){
@Override
public void onMessage(String channel,String message){
}
};
jedis.subscribe(pubSub,"channel2");
发布:
jedis.publish("channel2",message);
5. 队列:
5.1 向队列中放入消息:
jedis.lpush("queue","queue_message1","queue_message2");
5.2 从队列中取消息:
List<String> brpop = jedis.brpop(0,"queue");
for(String str : brpop){
}
5.3 命令行从队列取消息:
brpop queue 0
5.4 5.2中接受到一条消息后就会跳出阻塞状态,如果需要不断的循环监听,则要使用while(true) 接受所有消息
6. 一次发送一批redis命令
存:Pipeline p = jedis.pipelined();
p.set("testStr","hi");
p.zadd("testZset",0,"value1");
p.zadd("testZset",1,"value2");
Response<String> pipeStr = p.get("testStr",0,-1);
Response<Set<String>> sose = p.zrange("testZset",0,-1);
p.sync();(同步主从服务器)
int soseSize = sose.get().size();
Set<String> setBack = sose.get();
7. 希望命令一起执行不被干扰,可以通过transaction将命令打包到一起执行:
jedis.watch(key1,key2,...);
BinaryTransaction t = jedis.multi();
t.set("test","testValue");
t.exec();(执行所有事务块内的内容)
取得返回值:
Transaction t = jedis.multi();
t.set("fool","bar");
Response<String> result1 = t.get("fool");
t.zadd("foo",1,"hi");
t.zadd("foo",1,"hello");
Response<Set<String>> sose = t.zrange("foo",0,-1);
t.exec();
String foolbar = result1.get();
int soseSize = sose.get().size();