Java操作Redis

Redis的Java客户端Jedis

Jedis所需的jar包:commons-pool-1.6.jar和jedis-2.1.0.jar

源码地址:http://download.csdn.net/download/qq_36135928/10216836点击打开链接

测试连通性:

public class TestPing {

         publicstatic void main(String[] args) {

                   //连接 Redis 服务

                   Jedisjedis = new Jedis("192.168.237.131",6379);

                   //查看服务是否运行,打出PONG表示OK

                   System.out.println(jedis.ping());

         }

}

++++++

一个key加五大数据类型

public class TestDataType {

         publicstatic void main(String[] args) {

                   Jedisjedis = new Jedis("192.168.237.131",6381);

             //key

             Set<String> keys =jedis.keys("*");

             for (Iterator iterator = keys.iterator();iterator.hasNext();) {

               String key = (String) iterator.next();

               System.out.println(key);

             }

             //String

            jedis.set("name","clare");

                   System.out.println(jedis.get("name"));

                   jedis.mset("str1","v1","str2","v2","str3","v3");

            System.out.println(jedis.mget("str1","str2","str3"));

             //list

            jedis.lpush("mylist","v1","v2","v3","v4","v5");

             List<String> list =jedis.lrange("mylist",0,-1);

             for (String element : list) {

               System.out.println(element);

             }

           //set

             jedis.sadd("orders","jd001");

             jedis.sadd("orders","jd002");

             jedis.sadd("orders","jd003");

              Set<String> set1 =jedis.smembers("orders");

              for (Iterator iterator = set1.iterator();iterator.hasNext();) {

                String string = (String) iterator.next();

                System.out.println(string);

              }

             jedis.srem("orders","jd002");

             System.out.println(jedis.smembers("orders").size());

              //hash

             jedis.hset("hash1","userName","lisi");

              System.out.println(jedis.hget("hash1","userName"));

              Map<String,String> map = newHashMap<String,String>();

             map.put("telphone","1111111111");

             map.put("address","iponkan");

             map.put("email","[email protected]");

              jedis.hmset("hash2",map);

              List<String> result =jedis.hmget("hash2", "telphone","email");

              for (String element : result) {

                System.out.println(element);

              }

              //zset

             jedis.zadd("zset01",60d,"v1");

             jedis.zadd("zset01",70d,"v2");

              jedis.zadd("zset01",80d,"v3");

             jedis.zadd("zset01",90d,"v4");

             

              Set<String> s1 =jedis.zrange("zset01",0,-1);

              for (Iterator iterator = s1.iterator();iterator.hasNext();) {

                String string = (String)iterator.next();

                System.out.println(string);

              }

         }

}

+++++++

事务提交:

日常

public class TestTransaction {

           public boolean transMethod() {

                     Jedis jedis = newJedis("192.168.237.131",6381);

                     int balance;// 可用余额

                     int debt;// 欠额

                     int amtToSubtract = 10;// 实刷额度

                     jedis.watch("balance");

                    //jedis.set("balance","5");

                     balance =Integer.parseInt(jedis.get("balance"));

                     if (balance < amtToSubtract) {

                       jedis.unwatch();

                       System.out.println("modify");

                       return false;

              } else {

                System.out.println("***********transaction");

                Transaction transaction = jedis.multi();

                transaction.decrBy("balance",amtToSubtract);

                transaction.incrBy("debt",amtToSubtract);

                transaction.exec();

                balance =Integer.parseInt(jedis.get("balance"));

                debt =Integer.parseInt(jedis.get("debt"));

                System.out.println("*******" +balance);

                System.out.println("*******" +debt);

                return true;

              }

           }

           public static void main(String[] args) {

                     TestTransaction test = new TestTransaction();

               boolean retValue = test.transMethod();

               System.out.println("mainretValue-------: " + retValue);

           }

}

加锁

public class TestWatch {

         publicstatic void main(String[] args) {

                   Jedisjedis = new Jedis("192.168.237.131",6381);

                    //监控key,如果该动了事务就被放弃

              jedis.watch("serialNum");

             jedis.set("serialNum","s#####################");

              jedis.unwatch();

              Transaction transaction = jedis.multi();//被当作一个命令进行执行

              Response<String> response =transaction.get("serialNum");

             transaction.set("serialNum","s002");

              response =transaction.get("serialNum");

             transaction.lpush("list3","a");

             transaction.lpush("list3","b");

             transaction.lpush("list3","c");

              transaction.exec();

              //2 transaction.discard();

             System.out.println("serialNum***********"+response.get()); 

         }

}

  /**

   * 通俗点讲,watch命令就是标记一个键,如果标记了一个键, 在提交事务前如果该键被别人修改过,那事务就会失败,这种情况通常可以在程序中

   * 重新再尝试一次。

   * 首先标记了键balance,然后检查余额是否足够,不足就取消标记,并不做扣减; 足够的话,就启动事务进行更新操作,

   * 如果在此期间键balance被其它人修改, 那在提交事务(执行exec)时就会报错, 程序中通常可以捕获这类错误再重新执行一次,直到成功。

   */

主从复制:

 publicclass TestMasterSlave {

         publicstatic void main(String[] args) throws InterruptedException {

                   Jedisjedis_M = new Jedis("192.168.237.131",6381);

             Jedis jedis_S = newJedis("192.168.237.131",6379);

            jedis_S.slaveof("192.168.237.131",6381);

             jedis_M.set("k6","v6");

             Thread.sleep(500);

            System.out.println(jedis_S.get("k6"));

         }

}

JedisPool:

获取Jedis实例需要从JedisPool中获取;用完Jedis实例需要返还给JedisPool;如果Jedis在使用过程中出错,则也需要还给JedisPool。

配置总结all:

JedisPool的配置参数大部分是由JedisPoolConfig的对应项来赋值的。

public class JedisPoolUtil {

         privatestatic volatile JedisPool jedisPool = null;//被volatile修饰的变量不会被本地线程缓存,对该变量的读写都是直接操作共享内存。

           private JedisPoolUtil() {}

           public static JedisPoolgetJedisPoolInstance()

          {

              if(null == jedisPool)

             {

                synchronized (JedisPoolUtil.class)

               {

                   if(null == jedisPool)

                  {

                    JedisPoolConfig poolConfig = newJedisPoolConfig();

                    poolConfig.setMaxActive(1000);

                    poolConfig.setMaxIdle(32);

                    poolConfig.setMaxWait(100*1000);

                    poolConfig.setTestOnBorrow(true);

                    

                    jedisPool = newJedisPool(poolConfig,"192.168.237.131",6381);

                  }

               }

             }

              return jedisPool;

          }

           public static void release(JedisPooljedisPool,Jedis jedis)

          {

              if(null != jedis)

             {

               jedisPool.returnResourceObject(jedis);

             }

          }

}

public class TestPollUtil {

         publicstatic void main(String[] args) {

                    JedisPool jedisPool =JedisPoolUtil.getJedisPoolInstance();

              Jedis jedis = null;

              try

              {

                jedis = jedisPool.getResource();

               jedis.set("k8","v8");  

              } catch (Exception e) {

                e.printStackTrace();

              }finally{

                JedisPoolUtil.release(jedisPool, jedis);

              }

         }

}

猜你喜欢

转载自blog.csdn.net/qq_36135928/article/details/79121620