/**
 * jedis.del("method");   DEL方法可清空所有数据类型
 * @author johnzhang
 * 常用方法:
 *     String:    字符
 *         1.set              赋值                                        jedis.set("key","value");返回值  ok    
 *         2.get              取值                                        jedis.get("key");如果存在返回值  否则null

 *         3.append          在原数据后添加内容                            jedis.apped("testvalue");获取总值的长度    (str + testvalue = strtestvalue)
 *         4.setex               设置时间 在对应的时间内销毁内容                    jedis.apped("key",(秒数),"keyValue") 返回值ok    
 *         5.setnx          当前值不存在时赋值                            jedis.setnx("key","value"); 当前key不存在时进行存储 返回0 / 1   
 *      7.incr             在原来的内容加数字 1   如果非数字执行该方法时报错        jedis.incr("key"); 返回增加后的值   内容必须为 int  1 2 3
 *      8.decr           在原来的内容上 -1 如果是非数字执行该方法报错            jedis.decr("key"); 返回减去后的值  内容同上
 *      9.incrBy         在原来的内容上增加指定值                         jedis.incrBy("key",新增的位数) 返回key的值
 *      10.decrBy         在原来的内容上减去指定值                        jedis.decrBy("key",减去的位数) 返回key的值
 *      11.mset            创建多个变量                                jedis.mset("k1","value1","k2","value2") 返回Ok
 *  List:  列表
 *      1.lpush            从左进行赋值                                jedis.lpush("lis", "str2");返回数组条数
 *      2.rpush            从右进行赋值                                jedis.rpush("lis", "str2");返回数组条数
 *      3.del            清空                                        jedis.del("lis");  清空 返回  1
 *      4.lpushx        当前key存在时进行存储从左开始                    jedis.lpushx("lis", "str2");返回数组条数
 *      5.rpushx        当前key存在是进行存储从右开始                    jedis.rpushx("lis", "str2");返回数组条数
 *      6.rpoplpush        删除左边一个添加到另一个集合内                    jedis.rpoplpush("lis", "lis2");移除lis 第一个 并返回移除的字符
 *      7.llen            获取集合的长度                                jedis.llen("lis");//返回 字符长度
 *      8.lset            设置集合指定下标下的内容  下标从0 开始                jedis.lset("lis", 0, "value"); ok
 *      9.lrem            删除指定                                    jedis.lrem("lis", 删除的数量, "str1");0删除全部
 *      10.Ltrim        获取指定key 内的下标范围值                        jedis.ltrim("lis", 0, 0);从左开始截取
 *      11.linsert        在列表中添加内容                                jedis.linsert("lis", LIST_POSITION.BEFORE, "在那添加 value", "添加什么值");/LIST_POSITION常量
 *         12.lrange        获取范围内的数据                                jedis.lrange("lis", 0, endLen)                
 *         13.brpop        在指定时间内返回 key集合的随机值                    jedis.brpop(3, "p1");如果有 返回key Value 否则返回【】 并删除集合内的数据
 *         14.rpop            移除右边第一个值                                jedis.rpop("p1");//返回移除的value    

    15.blpop  获取到值获者到达指定时间才停止操作    jedis.blpop(100, "l2");返回 key - value

    16.brpop        获取到值获者到达指定时间才停止操作              jedis.brpop(100, "l2");返回key - value

    17.lindex  获取指定下标的value            jedis.lindex("key",索引)

    18.linsert  在值之前或之后增加信息          jedis.linsert("k2", LIST_POSITION.BEFORE, "v1", "v0")//在k2列表中 v1的数据之前增加 v0

    19.
 *  Hash: 散列
 *      1.hset            赋值                                        jedis.hset(key)返回新增条数
 *      2.hget            取值                                        jedis.hget("key", "coloum");//返回value
 *      3.hgetall        获取所有值                                    jedis.hgetAll(key);返回所有
 *      4.hexists        判断值是否存在                                jedis.hexists(key,coloum) 返回结果是否存在 true/false
 *      5.hincuBy        在原值上增加指定值                            jedis.hincrBy(key,coloum) 返回增加后的数据
 *      6.hdel            删除值                                    jedis.hdel(key,coloum)    返回删除条数
 *      7.hkeys            获取所有key                                jedis.hkeys(key)    返回所有key
 *      8.hvals            获取所有value                                jedis.hvals(key)    返回所有value    
 *      9.hlen            获取条数                                    jedis.hlen(key);    返回条数    
 *  Set: 集合
 *      1.sset            设置值                                    jedis
 *      1.sadd            增加数据                                    jedis.sadd("key", "value");返回新增条数
 *      2.srem            删除数据                                    jedis.srem("key", "value");删除指定Value 返回删除个数
 *      3.smembers        获取Set集合内所有数据                        jedis.smembers("key"); 返回set内所有数据
 *      4.sismember        判断Set集合是否存在值                        jedis.sismember("key","value");//  true/false  是否存在
 *         5.sdiff            返回 集合 1 有 集合 2 没有的数据                    jedis.sdiff("key1","key2");   key1 :{1,2,3}  key2:{2,3}  返回 1
 *         6.sinter        获取 seta 123 set setb 23 setc3 得到值3        jedis.sinter("key1","key2","key3"); key1 {1,2} key2{2,3},key3{2} 返回2
 *         7.sunion        获取唯一的                                    jedis.sunion("key1","key2","key3"); key1 {1,2} key2{2,3},key3{3,4} 返回 1 2 3 4
 *         8.scard            返回set集合内的个数                            jedis.scard("key1");//返回个数
 *         9.sdiffstore    返回插入条数                                jedis.sdiffstore("key1", "key2","key3")查询 key2 有 key3 没有的值插入到 key1的set集合内
 *        10.srandmember    随机获取set集合内的值                        jedis.srandmember("key1"); 返回value 1个 构造方法后增加count  指定返回的个数
 *        11.spop            删除并返回弹出的信息                            jedis.spop("key",count); 指定要弹出内容的key  count指定弹出的条数
 *    Zst: 有序集合
 *        1.zadd            增加数据                                    jedis.zadd("key1",分值,"coloumName");
 *        2.zscore        获取数据                                    jedis.zscore("key1","列明");  返回值 单精度
 *        3.zrange        获取指定范围的值                                jedis.zrange("key1",开始分值,结束分值); 返回符合数据的分值
 *        4.zrangeByScore 获取指定范围的值                                同上    但 分值 为flot 开始和结束 为1.0等
 *        5.zincrby        指定 name新增几个值分值类型flot                jedis.zincyby("key1",增加几个,加到哪); 返回值1 / 0
 *        6.zcard         获取set集合内的个数                            jedis.zcard("key1") 返回个数
 *        7.zrem            移除指定 coloum                            jedis.zrem("z1", "name");//返回  0  /  1
 *        8.zremrangeByScore 移除分值范围内的值                        jedis.zremrangeByScore("key1",0,60);//移除分值为 0 - 60 的值 包括 60
 *        9.zrank            获取排名从小到大                                jedis.zrank("z1","coloum");//返回排名   1 2 3 4   1 的排名为 0
 *      

 

其他方法: 

  keys *             查询所有key        jedis.keys("*");

  type key   查询类型          jedis.type("str")


 *    Redis:事务管理
 *        cmd                        Java                                作用
 *    1.multi        开启事务            jedis.multi();//开启事务                开启事务
 *    2.exec      提交事务            jedis.multi().exec();//提交事务        提交事务
 *    3.watch     锁定值/监控        jedis.watch("str");                    锁定值 在事务范围内不允许修改     例如在cmd中执行锁定开启事务修改值 在执行exec之前 又在 java中执行了hset 那么执行 exec会抛出

 

 


 *    4.unwatch    取消锁定/取消监控    jedis.unwatch();                    取消监控
 *    5.discard    取消事务            jedis.multi().discard()                不执行方法之后的代码事务
 *    
 * Redis:数据备份
 *     cmd                                作用                                Java
 *     save/bgsave                    生成dump.rdb 文件                        jedis.save();/jedis.bgsave() ok
 *     CONFIG get requirepass        判断是否需要密码                            
 *     auth password                输入登录密码                            jedis.auth(password);
 *  EXPIRE/PEXPIRE                设置过期时间                            jedis.expire("key", 时间单位秒);jedis.PEXPIRE("key",时间单位毫秒);
 *  TTL                            检查还有多长时间失效                        jedis.ttl("key");
 *  Sort                        排序                                    jedis.sort("key"); 排序字母的话 jedis.sort("p1",new SortingParams().alpha())
 * 订阅-发布:
 *  订阅:SUBSCRIBE / subscribe
 *  (1)Subscribe。表示订阅成功的反馈信息。第二个值是订阅成功的频道名称,第三个值是当前客户端订阅的频道数量。
 *  (2)message。这个类型的回复是我们最关心的,它表示接收到的消息。第二个值表示产生消息的频道名称,第三个值是消息的内容。
 *  (3)unsubscribe。表示成功取消订阅某个频道。第二个值是对应的频道名称,第三个值是当前客户端订阅的频道数量,当此值为0时客户端会退出订阅状态,之后就可以执行其他非“发布/订阅”模式的命令了。
 *     (4)PSUBSCRIBE命令订阅指定的规则channel.?*可以匹配channel.1和channel.10,但不会匹配channel.。    
 * 操作步骤
 *         1、先订阅再发布
 *             1. 订阅语法:subscribe name(这个Name是随机的)
 *             2. 发布语法:publisch  name(这个Name是随机的)  发布的信息
 *             Jedis发布信息     先订阅
 *                 JedisPubSub jedisPubSub = new JedisPubSub() {
 *                    @Override
 *                    public void onMessage(String channel, String message) {
 *                        System.out.println(channel);
 *                        System.out.println(message);
 *                    }
 *                };
 *                jedis.subscribe(jedisPubSub, "channel1");
 *                
 *     提交多个操作并不需要返回
 *  Pipeline p = jedis.pipelined();
 *  xxxx
 *  p.sync;
 */