一、Redis的Java客户端Jedis
1 安装JDK
tar -zxvf jdk-7u67-linux-i586.tar.gz
vi /etc/profile
重启一次Centos
编码验证
2 安装eclipse
Jedis所需要的jar包
commons-pool-1.6.jar
jedis-2.1.0.jar
3 Jedis常用操作
测试连通性
@Test
public void test() {
Jedis jedis = new Jedis("192.168.163.131",6379);
Transaction transaction = jedis.multi();
transaction.exec();
System.out.println(jedis.ping());
}
一个key
五大数据类型
@Test
public void test2() {
Jedis jedis = new Jedis("192.168.163.131",6379);
//key
Set<String> keys = jedis.keys("*");
for(Iterator<String> iterator = keys.iterator();iterator.hasNext();){
System.out.println(iterator.next());
}
Long size = jedis.dbSize();
Boolean det = jedis.exists("det");
System.out.println("size:"+size);
System.out.println("det:"+det);
//String
Long aLong = jedis.append("k1", "jedis");
System.out.println(aLong);
String mset = jedis.mset("k4", "v4", "k5", "v5","k6","v6");
System.out.println(jedis.mget("k4","k5","k6"));
//List
jedis.lpush("list01","v1","v2","v3","v4","v5");
List<String> list01 = jedis.lrange("list01", 0, -1);
for(String s :list01){
System.out.println(s);
}
//Set
jedis.sadd("set01","jd001","jd001");
jedis.sadd("set01","jd003","jd004","jd005");
Set<String> set01 = jedis.smembers("set01");
for(Iterator<String> iterator=set01.iterator();iterator.hasNext();){
System.out.println(iterator.next());
}
Long srem = jedis.srem("set01", "jd002");
System.out.println(srem);
//hash
jedis.hset("hash01","userName","lisi");
String hget = jedis.hget("hash01", "userName");
System.out.println(hget);
Map<String,String> map = new HashMap<>();
map.put("age","22");
map.put("address","atgugu" );
map.put("telephone","23232");
String hash02 = jedis.hmset("hash02", map);
List<String> hmget = jedis.hmget("hash02", "age", "address", "telephone");
for(String s:hmget){
System.out.println(s);
}
//Zset
jedis.zadd("zset01",60d,"v1");
jedis.zadd("zset01",70d,"v2");
jedis.zadd("zset01",80d,"v3");
jedis.zadd("zset01",90d,"v4");
jedis.zadd("zset01",100d,"v5");
Set<String> zset01 = jedis.zrange("zset01", 0, -1);
for(Iterator<String> iterator1 = zset01.iterator();iterator1.hasNext();){
System.out.println(iterator1.next());
}
}
事务提交
日常
//事务
@Test
public void test3(){
Jedis jedis = new Jedis("192.168.163.131",6379);
Transaction transaction = jedis.multi();
Response<String> set = transaction.set("k44", "v9");
Response<String> set1 = transaction.set("k55", "v10");
// transaction.exec();
String discard = transaction.discard();
String k10 = jedis.get("k44");
System.out.println(k10);
}
加锁
@Test
public void test4 () {
boolean b = transacMethod();
System.out.println(b);
}
public boolean transacMethod(){
Jedis jedis = new Jedis("192.168.163.131",6379);
Integer balance;
Integer det;
//消费金额
Integer mntToSubstract = 10;
jedis.watch("balance");//类似于乐观锁,保证操作在一个事务中
balance = Integer.parseInt(jedis.get("balance"));
if(balance.compareTo(mntToSubstract) < 0){
jedis.unwatch();
return false;
}else {
Transaction transaction = jedis.multi();
transaction.decrBy("balance",mntToSubstract);
transaction.incrBy("det",mntToSubstract);
transaction.exec();
balance = Integer.parseInt(jedis.get("balance"));
det = Integer.parseInt(jedis.get("det"));
System.out.println("balance:"+balance+",det:"+det);
return true;
}
}
主从复制
6379,6380启动,先各自先独立
主写
从读
//主从复制
@Test
public void test5() {
Jedis jedis_M = new Jedis("192.168.163.131",6379);
Jedis jedis_S = new Jedis("192.168.163.131",6380);
jedis_M.slaveofNoOne();
jedis_S.slaveofNoOne();
jedis_S.slaveof("192.168.163.131",6379);
jedis_M.set("km","testMaster_Slave");
String km = jedis_S.get("km");
System.out.println(km);
}
4 JedisPool
获取Jedis实例需要从JedisPool中获取
用完Jedis实例需要返还给JedisPool
如果Jedis在使用过程中出错,则也需要还给JedisPool
案例见代码
JedisPoolUtil
public class JedisPollUtil {
//被volatile 修饰的变量不会被本地线程缓存,对该变量的读写都是直接操作在共享内存中
private static volatile JedisPool jedisPool = null;
public JedisPollUtil() {
}
public static JedisPool getJedisPoolInstance() {
if(jedisPool != null) {
synchronized(JedisPollUtil.class) {
if(jedisPool != null) {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(32);
config.setMaxWaitMillis(100*1000);
config.setTestOnBorrow(true);
jedisPool = new JedisPool(config,"6379");
}
}
}
return jedisPool;
}
}
Demo5
jedisPool.getResource();
配置总结all