redis命令介绍(常见的操作命令)及其实例客户端的写法[张振华-Jack]



http://redis.io/commands
  • BLPOP key [key ...] timeout删除,并获得该列表中的第一元素,或阻塞,直到有一个可用
  • BRPOP key [key ...] timeout删除,并获得该列表中的最后一个元素,或阻塞,直到有一个可用
  • BRPOPLPUSH source destination timeout弹出一个列表的值,将它推到另一个列表,并返回它;或阻塞,直到有一个可用
  • LINDEX key index获取一个元素,通过其索引列表
二:redis的使用实例:
1)pom.xml里面引用 jedis的包即可:
                 <!-- redis -->
                 < dependency >
                        < groupId >   redis.clients </ groupId   >
                        < artifactId >   jedis </ artifactId   >
                        < version >   2.6.0 </   version >
                        < type >   jar </   type >
                        < scope >   compile </   scope >
                 </ dependency >
2) RedisClient代码如下:注意细细体会 shardedJedisPool  和  jedisPool  的用法

package   apptools.tdt.util;

import   java.util.ArrayList;
import   java.util.Iterator;
import   java.util.List;
import   java.util.Set;

import   redis.clients.jedis.Jedis;
import   redis.clients.jedis.JedisPool;
import   redis.clients.jedis.JedisPoolConfig;
import   redis.clients.jedis.JedisShardInfo;
import   redis.clients.jedis.ShardedJedis;
import   redis.clients.jedis.ShardedJedisPool;
import   redis.clients.jedis.SortingParams;

public   class   RedisClient {

          public   static   void   main(String[] args) {
              RedisClient cli =   new   RedisClient();
              cli.show();
       }

          private   final   Jedis   jedis   ; // 非切片额客户端连接
          private   JedisPool   jedisPool   ; // 非切片连接池
          private   final   ShardedJedis   shardedJedis ;   // 切片额客户端连接
          private   ShardedJedisPool   shardedJedisPool   ; // 切片连接池

          public   RedisClient() {
              initialPool();
              initialShardedPool();
                 shardedJedis   =   shardedJedisPool   .getResource();
                 jedis   =   jedisPool .getResource();
                 // jedis.slaveof(host, port);
       }

          /**
        * 初始化非切片池
        */
          private   void   initialPool() {
                 // 池基本配置
              JedisPoolConfig config =   new   JedisPoolConfig();
                 // config.setMaxActive(20);
              config.setMaxIdle(5);
                 // config.setMaxWait(1000l);
              config.setTestOnBorrow(   false );

                 jedisPool   =   new   JedisPool(config,   "10.2.10.29" , 6379);

       }

          /**
        * 初始化切片池
        */
          private   void   initialShardedPool() {
                 // 池基本配置
              JedisPoolConfig config =   new   JedisPoolConfig();
                 // config.setMaxActive(20);
              config.setMaxIdle(5);
                 // config.setMaxWait(1000l);
              config.setTestOnBorrow(   false );
                 // slave链接
              List<JedisShardInfo> shards =   new   ArrayList<JedisShardInfo>();

              shards.add(
  new   JedisShardInfo( "10.2.10.27"   , 6379,   "master1"   ));
              shards.add(   new   JedisShardInfo( "10.2.10.28"   , 6379,   "master2"   ));

                 // 构造池
                 shardedJedisPool   =   new   ShardedJedisPool(config, shards);

                 // shardedJedisPool.getResource().sla
       }

          public   void   show() {
              KeyOperate();
              System.   out .println( "##############################StringOperate#############################################"   );
              StringOperate();
              System.   out .println( "##########################ListOperate#################################################"   );
              ListOperate();
              System.   out .println( "##########################SetOperate#################################################"   );
              SetOperate();
              System.   out .println( "###########################SortedSetOperate################################################"   );
              SortedSetOperate();
              System.   out .println( "###########################HashOperate################################################"   );
              HashOperate();
              System.   out .println( "###########################################################################"   );
                 jedisPool .returnResource( jedis   );
                 shardedJedisPool .returnResource( shardedJedis   );
       }

          private   void   KeyOperate() {
              System.   out .println( "======================key=========================="   );
                 // 清空数据
              System.   out .println( "清空库中所有数据:"   +   jedis   .flushDB());
                 // 判断key否存在
              System.   out .println( "判断key999键是否存在:"   +   shardedJedis .exists( "key999"   ));
              System.   out .println( "新增key001,value001键值对:"   +   shardedJedis .set( "key001"   ,   "value001"   ));
              System.   out .println( "判断key001是否存在:"   +   shardedJedis .exists( "key001"   ));
                 // 输出系统中所有的key
              System.   out .println( "新增key002,value002键值对:"   +   shardedJedis .set( "key002"   ,   "value002"   ));
              System.   out .println( "系统中所有键如下:"   );
              Set<String> keys =   jedis .keys(   "*" );
              Iterator<String> it = keys.iterator();
                 while   (it.hasNext()) {
                     String key = it.next();
                     System.   out .println(key);
              }
                 // 删除某个key,若key不存在,则忽略该命令。
              System.   out .println( "系统中删除key002: "   +   jedis   .del( "key002"   ));
              System.   out .println( "判断key002是否存在:"   +   shardedJedis .exists( "key002"   ));
                 // 设置 key001的过期时间
              System.   out .println( "设置 key001的过期时间为5秒:"   +   jedis .expire( "key001"   , 5));
                 try   {
                     Thread. sleep(2000);
              }   catch   (InterruptedException e) {
              }
                 // 查看某个key的剩余生存时间,单位【秒】.永久生存或者不存在的都返回-1
              System.   out .println( "查看key001的剩余生存时间:"   +   jedis .ttl( "key001"   ));
                 // 移除某个key的生存时间
              System.   out .println( "移除key001的生存时间:"   +   jedis .persist( "key001"   ));
              System.   out .println( "查看key001的剩余生存时间:"   +   jedis .ttl( "key001"   ));
                 // 查看key所储存的值的类型
              System.   out .println( "查看key所储存的值的类型:"   +   jedis .type( "key001"   ));
                 /*
               * 一些其他方法:1、修改键名:jedis.rename("key6", "key0"); 2、将当前db的key移动到给定的 db当中:jedis.move("foo", 1)
               */
       }

          private   void   StringOperate() {
              System.   out .println( "======================String_1=========================="   );
                 // 清空数据
              System.   out .println( "清空库中所有数据:"   +   jedis   .flushDB());

              System.   out .println( "=============增============="   );
                 jedis .set(   "key001" ,   "value001"   );
                 jedis .set(   "key002" ,   "value002"   );
                 jedis .set(   "key003" ,   "value003"   );
              System.   out .println( "已新增的3个键值对如下:"   );
              System.   out .println( jedis   .get( "key001"   ));
              System.   out .println( jedis   .get( "key002"   ));
              System.   out .println( jedis   .get( "key003"   ));

              System.   out .println( "=============删============="   );
              System.   out .println( "删除key003键值对:"   +   jedis   .del( "key003"   ));
              System.   out .println( "获取key003键对应的值:"   +   jedis   .get( "key003"   ));

              System.   out .println( "=============改============="   );
                 // 1、直接覆盖原来的数据
              System.   out .println( "直接覆盖key001原来的数据:"   +   jedis .set( "key001"   ,   "value001-update"   ));
              System.   out .println( "获取key001对应的新值:"   +   jedis   .get( "key001"   ));
                 // 2、直接覆盖原来的数据
              System.   out .println( "在key002原来值后面追加:"   +   jedis .append( "key002"   ,   "+appendString"   ));
              System.   out .println( "获取key002对应的新值"   +   jedis   .get( "key002"   ));

              System.   out .println( "=============增,删,查(多个)============="   );
                 /**
               * mset,mget 同时新增,修改,查询多个键值对 等价于: jedis.set("name","ssss"); jedis.set(" jarorwar","xxxx");
               */
              System.   out .println( "一次性新增key201,key202,key203,key204及其对应值:"   +   jedis   .mset( "key201"   ,   "value201"   ,   "key202"   ,   "value202"   ,   "key203"   ,   "value203"   ,   "key204" ,   "value204"   ));
              System.   out .println( "一次性获取key201,key202,key203,key204各自对应的值:"   +   jedis   .mget( "key201"   ,   "key202"   ,   "key203"   ,   "key204"   ));
              System.   out .println( "一次性删除key201,key202:"   +   jedis   .del( new   String[] {   "key201"   ,   "key202"   }));
              System.   out .println( "一次性获取key201,key202,key203,key204各自对应的值:"   +   jedis   .mget( "key201"   ,   "key202"   ,   "key203"   ,   "key204"   ));
              System.   out .println();

                 // jedis 具备的功能shardedJedis中也可直接使用,下面测试一些前面没用过的方法
              System.   out .println( "======================String_2=========================="   );
                 // 清空数据
              System.   out .println( "清空库中所有数据:"   +   jedis   .flushDB());

              System.   out .println( "=============新增键值对时防止覆盖原先值============="   );
              System.   out .println( "原先key301不存在时,新增key301:"   +   shardedJedis .setnx( "key301"   ,   "value301"   ));
              System.   out .println( "原先key302不存在时,新增key302:"   +   shardedJedis .setnx( "key302"   ,   "value302"   ));
              System.   out .println( "当key302存在时,尝试新增key302:"   +   shardedJedis .setnx( "key302"   ,   "value302_new"   ));
              System.   out .println( "获取key301对应的值:"   +   shardedJedis .get( "key301"   ));
              System.   out .println( "获取key302对应的值:"   +   shardedJedis .get( "key302"   ));

              System.   out .println( "=============超过有效期键值对被删除============="   );
                 // 设置key的有效期,并存储数据
              System.   out .println( "新增key303,并指定过期时间为2秒"   +   shardedJedis .setex( "key303"   , 2,   "key303-2second"   ));
              System.   out .println( "获取key303对应的值:"   +   shardedJedis .get( "key303"   ));
                 try   {
                     Thread. sleep(3000);
              }   catch   (InterruptedException e) {
              }
              System.   out .println( "3秒之后,获取key303对应的值:"   +   shardedJedis .get( "key303"   ));

              System.   out .println( "=============获取原值,更新为新值一步完成============="   );
              System.   out .println( "key302原值:"   +   shardedJedis   .getSet( "key302"   ,   "value302-after-getset"   ));
              System.   out .println( "key302新值:"   +   shardedJedis   .get( "key302"   ));

              System.   out .println( "=============获取子串============="   );
              System.   out .println( "获取key302对应值中的子串:"   +   shardedJedis .getrange( "key302"   , 5, 7));
       }

          private   void   ListOperate() {
              System.   out .println( "======================list=========================="   );
                 // 清空数据
              System.   out .println( "清空库中所有数据:"   +   jedis   .flushDB());

              System.   out .println( "=============增============="   );
                 shardedJedis .lpush( "stringlists"   ,   "vector"   );
                 shardedJedis .lpush( "stringlists"   ,   "ArrayList"   );
                 shardedJedis .lpush( "stringlists"   ,   "vector"   );
                 shardedJedis .lpush( "stringlists"   ,   "vector"   );
                 shardedJedis .lpush( "stringlists"   ,   "LinkedList"   );
                 shardedJedis .lpush( "stringlists"   ,   "MapList"   );
                 shardedJedis .lpush( "stringlists"   ,   "SerialList"   );
                 shardedJedis .lpush( "stringlists"   ,   "HashList"   );
                 shardedJedis .lpush( "numberlists"   ,   "3"   );
                 shardedJedis .lpush( "numberlists"   ,   "1"   );
                 shardedJedis .lpush( "numberlists"   ,   "5"   );
                 shardedJedis .lpush( "numberlists"   ,   "2"   );
              System.   out .println( "所有元素-stringlists:"   +   shardedJedis .lrange( "stringlists"   , 0, -1));
              System.   out .println( "所有元素-numberlists:"   +   shardedJedis .lrange( "numberlists"   , 0, -1));

              System.   out .println( "=============删============="   );
                 // 删除列表指定的值 ,第二个参数为删除的个数(有重复时),后add进去的值先被删,类似于出栈
              System.   out .println( "成功删除指定元素个数-stringlists:"   +   shardedJedis .lrem( "stringlists"   , 2,   "vector"   ));
              System.   out .println( "删除指定元素之后-stringlists:"   +   shardedJedis .lrange( "stringlists"   , 0, -1));
                 // 删除区间以外的数据
              System.   out .println( "删除下标0-3区间之外的元素:"   +   shardedJedis .ltrim( "stringlists"   , 0, 3));
              System.   out .println( "删除指定区间之外元素后-stringlists:"   +   shardedJedis .lrange( "stringlists"   , 0, -1));
                 // 列表元素出栈
              System.   out .println( "出栈元素:"   +   shardedJedis   .lpop( "stringlists"   ));
              System.   out .println( "元素出栈后-stringlists:"   +   shardedJedis .lrange( "stringlists"   , 0, -1));

              System.   out .println( "=============改============="   );
                 // 修改列表中指定下标的值
                 shardedJedis .lset( "stringlists"   , 0,   "hello list!"   );
              System.   out .println( "下标为0的值修改后-stringlists:"   +   shardedJedis .lrange( "stringlists"   , 0, -1));
              System.   out .println( "=============查============="   );
                 // 数组长度
              System.   out .println( "长度-stringlists:"   +   shardedJedis .llen( "stringlists"   ));
              System.   out .println( "长度-numberlists:"   +   shardedJedis .llen( "numberlists"   ));
                 // 排序
                 /*
               * 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( "返回排序后的结果-stringlists:"   +   shardedJedis .sort( "stringlists"   , sortingParameters));
              System.   out .println( "返回排序后的结果-numberlists:"   +   shardedJedis .sort( "numberlists"   ));
                 // 子串: start为元素下标,end也为元素下标;-1代表倒数一个元素,-2代表倒数第二个元素
              System.   out .println( "子串-第二个开始到结束:"   +   shardedJedis .lrange( "stringlists"   , 1, -1));
                 // 获取列表指定下标的值
              System.   out .println( "获取下标为2的元素:"   +   shardedJedis .lindex( "stringlists"   , 2) +   "\n"   );
       }

          private   void   SetOperate() {
              System.   out .println( "======================set=========================="   );
                 // 清空数据
              System.   out .println( "清空库中所有数据:"   +   jedis   .flushDB());

              System.   out .println( "=============增============="   );
              System.   out .println( "向sets集合中加入元素element001:"   +   jedis .sadd( "sets"   ,   "element001"   ));
              System.   out .println( "向sets集合中加入元素element002:"   +   jedis .sadd( "sets"   ,   "element002"   ));
              System.   out .println( "向sets集合中加入元素element003:"   +   jedis .sadd( "sets"   ,   "element003"   ));
              System.   out .println( "向sets集合中加入元素element004:"   +   jedis .sadd( "sets"   ,   "element004"   ));
              System.   out .println( "查看sets集合中的所有元素:"   +   jedis .smembers( "sets"   ));
              System.   out .println();

              System.   out .println( "=============删============="   );
              System.   out .println( "集合sets中删除元素element003:"   +   jedis .srem( "sets"   ,   "element003"   ));
              System.   out .println( "查看sets集合中的所有元素:"   +   jedis .smembers( "sets"   ));
                 /*
               * System.out.println("sets集合中任意位置的元素出栈:"+jedis.spop("sets"));//注:出栈元素位置居然不定?--无实际意义 System.out.println("查看sets集合中的所有元素:"+jedis.smembers("sets"));
               */
              System.   out .println();

              System.   out .println( "=============改============="   );
              System.   out .println();

              System.   out .println( "=============查============="   );
              System.   out .println( "判断element001是否在集合sets中:"   +   jedis .sismember( "sets"   ,   "element001"   ));
              System.   out .println( "循环查询获取sets中的每个元素:"   );
              Set<String> set =   jedis .smembers(   "sets" );
              Iterator<String> it = set.iterator();
                 while   (it.hasNext()) {
                     Object obj = it.next();
                     System.   out .println(obj);
              }
              System.   out .println();

              System.   out .println( "=============集合运算============="   );
              System.   out .println( "sets1中添加元素element001:"   +   jedis .sadd( "sets1"   ,   "element001"   ));
              System.   out .println( "sets1中添加元素element002:"   +   jedis .sadd( "sets1"   ,   "element002"   ));
              System.   out .println( "sets1中添加元素element003:"   +   jedis .sadd( "sets1"   ,   "element003"   ));
              System.   out .println( "sets1中添加元素element002:"   +   jedis .sadd( "sets2"   ,   "element002"   ));
              System.   out .println( "sets1中添加元素element003:"   +   jedis .sadd( "sets2"   ,   "element003"   ));
              System.   out .println( "sets1中添加元素element004:"   +   jedis .sadd( "sets2"   ,   "element004"   ));
              System.   out .println( "查看sets1集合中的所有元素:"   +   jedis .smembers( "sets1"   ));
              System.   out .println( "查看sets2集合中的所有元素:"   +   jedis .smembers( "sets2"   ));
              System.   out .println( "sets1和sets2交集:"   +   jedis   .sinter( "sets1"   ,   "sets2" ));
              System.   out .println( "sets1和sets2并集:"   +   jedis   .sunion( "sets1"   ,   "sets2" ));
              System.   out .println( "sets1和sets2差集:"   +   jedis   .sdiff( "sets1"   ,   "sets2" )); // 差集:set1中有,set2中没有的元素
       }

          private   void   SortedSetOperate() {
              System.   out .println( "======================zset=========================="   );
                 // 清空数据
              System.   out .println( jedis   .flushDB());

              System.   out .println( "=============增============="   );
              System.   out .println( "zset中添加元素element001:"   +   shardedJedis .zadd( "zset"   , 7.0,   "element001"   ));
              System.   out .println( "zset中添加元素element002:"   +   shardedJedis .zadd( "zset"   , 8.0,   "element002"   ));
              System.   out .println( "zset中添加元素element003:"   +   shardedJedis .zadd( "zset"   , 2.0,   "element003"   ));
              System.   out .println( "zset中添加元素element004:"   +   shardedJedis .zadd( "zset"   , 3.0,   "element004"   ));
              System.   out .println( "zset集合中的所有元素:"   +   shardedJedis .zrange( "zset"   , 0, -1)); // 按照权重值排序
              System.   out .println();

              System.   out .println( "=============删============="   );
              System.   out .println( "zset中删除元素element002:"   +   shardedJedis .zrem( "zset"   ,   "element002"   ));
              System.   out .println( "zset集合中的所有元素:"   +   shardedJedis .zrange( "zset"   , 0, -1));
              System.   out .println();

              System.   out .println( "=============改============="   );
              System.   out .println();

              System.   out .println( "=============查============="   );
              System.   out .println( "统计zset集合中的元素中个数:"   +   shardedJedis .zcard( "zset"   ));
              System.   out .println( "统计zset集合中权重某个范围内(1.0——5.0),元素的个数:"   +   shardedJedis   .zcount( "zset"   , 1.0, 5.0));
              System.   out .println( "查看zset集合中element004的权重:"   +   shardedJedis .zscore( "zset"   ,   "element004"   ));
              System.   out .println( "查看下标1到2范围内的元素值:"   +   shardedJedis .zrange( "zset"   , 1, 2));
       }

          private   void   HashOperate() {
              System.   out .println( "======================hash=========================="   );
                 // 清空数据
              System.   out .println( jedis   .flushDB());

              System.   out .println( "=============增============="   );
              System.   out .println( "hashs中添加key001和value001键值对:"   +   shardedJedis .hset( "hashs"   ,   "key001"   ,   "value001"   ));
              System.   out .println( "hashs中添加key002和value002键值对:"   +   shardedJedis .hset( "hashs"   ,   "key002"   ,   "value002"   ));
              System.   out .println( "hashs中添加key003和value003键值对:"   +   shardedJedis .hset( "hashs"   ,   "key003"   ,   "value003"   ));
              System.   out .println( "新增key004和4的整型键值对:"   +   shardedJedis .hincrBy( "hashs"   ,   "key004"   , 4l));
              System.   out .println( "hashs中的所有值:"   +   shardedJedis .hvals( "hashs"   ));
              System.   out .println();

              System.   out .println( "=============删============="   );
              System.   out .println( "hashs中删除key002键值对:"   +   shardedJedis .hdel( "hashs"   ,   "key002"   ));
              System.   out .println( "hashs中的所有值:"   +   shardedJedis .hvals( "hashs"   ));
              System.   out .println();

              System.   out .println( "=============改============="   );
              System.   out .println( "key004整型键值的值增加100:"   +   shardedJedis .hincrBy( "hashs"   ,   "key004"   , 100l));
              System.   out .println( "hashs中的所有值:"   +   shardedJedis .hvals( "hashs"   ));
              System.   out .println();

              System.   out .println( "=============查============="   );
              System.   out .println( "判断key003是否存在:"   +   shardedJedis .hexists( "hashs"   ,   "key003"   ));
              System.   out .println( "获取key004对应的值:"   +   shardedJedis .hget( "hashs"   ,   "key004"   ));
              System.   out .println( "批量获取key001和key003对应的值:"   +   shardedJedis .hmget( "hashs"   ,   "key001"   ,   "key003"   ));
              System.   out .println( "获取hashs中所有的key:"   +   shardedJedis .hkeys( "hashs"   ));
              System.   out .println( "获取hashs中所有的value:"   +   shardedJedis .hvals( "hashs"   ));
              System.   out .println();
       }
}


3)redis的server配置方案

172 redis 和 171 redis 做切片
170 redis 启动两个redis实例
./redis-server --port 6381 --slaveof 10.8.116.171 6379 &
./redis-server --port 6382 --slaveof 10.8.116.172 6379 &

4)遇到报错:
MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.

redis-cli 
shutdown nosave 或者shudown save 即可;然后重启即OK;

5)实际工作中需要考虑close的问题和线程安全的问题:具体使用和用法如下:

一:建一个单例的连接池:
package   apptools.tdt.util;

import   java.util.ArrayList;
import   java.util.List;

import   org.apache.commons.lang.StringUtils;
import   org.slf4j.Logger;
import   org.slf4j.LoggerFactory;

import   redis.clients.jedis.JedisPoolConfig;
import   redis.clients.jedis.JedisShardInfo;
import   redis.clients.jedis.ShardedJedisPool;
import   apptools.tdt.commons.log.EnviromentTool;

public   class   RedisShardedJedisPool {
          private   static   final   Logger   log   = LoggerFactory.getLogger(RedisShardedJedisPool.   class );
          private   final   static   byte []   temp_lock   =   new   byte [1];
          private   static   RedisShardedJedisPool   redisShardedJedisPool   =   null ;
          private   static   final   String   redis_key   =   "redis.servercache.ip" ;

          private   ShardedJedisPool   shardedJedisPool   ; // 切片连接池

          private   RedisShardedJedisPool() {
              initialShardedPool();
       }

          public   ShardedJedisPool getShardedJedisPool() {
                 return   shardedJedisPool   ;
       }

          public   static   RedisShardedJedisPool getRedisShardedJedisPool() {
                 synchronized   ( temp_lock   ) {
                        if   ( redisShardedJedisPool   ==   null ) {
                              redisShardedJedisPool   =   new   RedisShardedJedisPool();
                     }
                        return   redisShardedJedisPool   ;
              }
       }

          /**
        * 初始化切片池
        */
          private   void   initialShardedPool() {
                 // 池基本配置
              JedisPoolConfig config =   new   JedisPoolConfig();
                 // config.setMaxActive(20);
              config.setMaxIdle(10);
                 // config.setMaxWait(1000l);
              config.setTestOnBorrow(   false );
                 // slave链接
              List<JedisShardInfo> shards =   new   ArrayList<JedisShardInfo>();
              String redisServer = EnviromentTool. getValue( redis_key );
                 if   (StringUtils.isNotBlank(redisServer)) {
                     String rs[] = redisServer.split(   "," );
                        for   ( int   i = 0; i < rs. length ; i++) {
                           String server[] = rs[i].split(   ":" );
                              log .info( "RedisServer is :"   + server[0] +   ":"   + server[1]);
                           shards.add(   new   JedisShardInfo(server[0], Integer.valueOf(server[1]),   "master"   + i));
                     }
                        // shards.add(new JedisShardInfo("10.8.116.171", 6379, "master2"));
              }   else   {
                     shards.add(   new   JedisShardInfo( "10.2.10.27"   , 6379,   "master"   ));
              }

                 // 构造池
                 shardedJedisPool   =   new   ShardedJedisPool(config, shards);
       }

}
二:建一个 shardedJedis 的client端
package   apptools.tdt.util;

import   java.text.MessageFormat;

import   org.slf4j.Logger;
import   org.slf4j.LoggerFactory;

import   redis.clients.jedis.ShardedJedis;

public   class   RedisClient {
          private   static   final   Logger   log   = LoggerFactory.getLogger(RedisClient.   class );
          public   static   final   String  chart_key   =   "chart_{1}"   ;
          public   static   final   int   two_hour   = 60 * 60 * 2;

          private   final   ShardedJedis   shardedJedis ;   // 切片额客户端连接

          public   RedisClient() {
                 shardedJedis   = RedisShardedJedisPool.getRedisShardedJedisPool().getShardedJedisPool().getResource();
       }

          public   ShardedJedis getShardedJedis() {
                 return   shardedJedis   ;
       }

          public   void   closeShardedJedis() {
                 shardedJedis .close();
       }

          public   static   void   main(String [] args) {
              Object[] arguments = {   new   Long(1),   "MyDisk"   };
              System.   out .println( "xxxx"   + MessageFormat.format(RedisClient. chart_key , arguments));

              RedisClient cli =   new   RedisClient();
                 // 判断key否存在
              System.   out .println( "判断key999键是否存在:"   + cli.getShardedJedis().exists( "key999"   ));
              System.   out .println( "新增key001,value001键值对:"   + cli.getShardedJedis().set( "key001"   ,   "value001"   ));
              System.   out .println( "判断key001是否存在:"   + cli.getShardedJedis().exists( "key001"   ));
                 // 输出系统中所有的key
              System.   out .println( "新增key002,value002键值对:"   + cli.getShardedJedis().set( "key002"   ,   "value002"   ));
              System.   out .println( "新增key001,value001键值对:"   + cli.getShardedJedis().set( "abc"   ,   "value001"   ));
              cli.closeShardedJedis();
       }

}
3:用到地方写法:
          try   {
                     Object[] arguments = {   new   Long(1), String.valueOf(id) };
                     String chart_key = MessageFormat.format(RedisClient. chart_key , arguments);
                     RedisClient cli =   new RedisClient();
                     String chartJsonString =   "" ;
                        if (cli.getShardedJedis().exists(chart_key)) {
                           chartJsonString = cli.getShardedJedis().get(chart_key);
                     } else {
                           chartJsonString = JSON.toJSONString(chartOperateService.getChartJSONByFilterId(id));
                           cli.getShardedJedis().setex(chart_key, RedisClient.two_hour , chartJsonString);
                     }
                     cli.closeShardedJedis();
                     System.   out .println(chart_key +   ":::"   + chartJsonString);
                        return   JSON.parseObject(chartJsonString, HashMap.   class );
              }   catch   (Exception e) {
                        return   chartOperateService   .getChartJSONByFilterId (id);
              }













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张振华-Jack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值