【Redis学习】Redis的安装、管理、适用场合以及使用

1、Redis概述

我们知道,内存是电脑主板上的存储部件,用于存储当前正在使用的数据和程序,CPU可以与内存直接沟通,所以访问速速非常高;而外存数据必须加载到内存以后程序才能使用。如果把CPU当做一个吃货,那么内存是碗,而外存是锅,这个吃货再能吃,也得先把饭从锅里盛到碗里再下嘴,而不能直接跳到锅里大快朵颐。但是很多时候CPU吃的并不爽,一是因为碗不够大,没吃两嘴就没了;二是从锅里往碗里盛饭是个比较耗时的过程,等待很痛苦。正经点说,就是内存大小、I/O速度、网络响应时间等常常成为应用系统的性能瓶颈。

传统的关系型数据库如MySQL、Oracle、DB2等,数据存储在磁盘的文件系统中,增删改查需要频繁地在内存与外存之间交换数据,很费时间。

在以上背景下,小巧而功能强大的存储结构,用于在内存中管理数据量不太大但是访问量特别大的热点数据—Redis应运而生。

Redis是一个开源的使用C语言编写、开源、支持网络、可基于内存亦可持久化的日志型、高性能的Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String)、哈希(Map)、 列表(list)、集合(sets) 和 有序集合(sorted sets)等类型

Redis是Remote Dictionary Server的简称,是一个由意大利人Salvatore Sanfilippo开发的key-value存储系统,具有极高的读写性能,读的速度可达110000次/s,写的速度可达81000次/s 。

与Redis类似的产品还有memcache,同样是一个基于内存的key-value存储系统,但是由于memcache数据结构单一,数据安全性低下等原因,大有被Redis取而代之的趋势。

Redis 与其他 key - value 缓存产品相比,有以下特点:

1、Redis支持数据的持久化,周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,重启的时候可以再次加载进行使用。

3、Redis支持数据的备份,即master-slave模式的数据备份。

5、Redis还支持 publish/subscribe, 通知, key过期等高级特性。

互联网发展到现在,仅靠传统的关系型数据库已经远不能应对各种变态的需求,一个大型的互联网应用往往需要各类数据库相互合作,才能达到高可用、高性能的标准。

这里写图片描述

比如,使用MySQL/Oracle/DB2管理核心数据,使用Memcache/Redis管理热点数据,使用Hbase/Hadoop管理海量数据……总之,在合适的地方选择合适的数据库。

2、Redis的安装和部署

以2.8.6为例进行下述的操作及说明。

2.1 Centos安装部署

安装步骤如下:

第一步:
//将redis-2.8.6.tar.gz安装包解压缩
tar -zxvf redis-2.8.17.tar.gz

第二步:
//)进入redis-2.8.6目录
cd redis-2.8.17

第三步:
//执行make命令进行编译
make

第四步:
编译结束之后,配置redis.conf文件,将“daemonize”属性设置为“yes”,表示我们会以后台进程形式启动Redis服务;将“port”属性设置为指定的端口,这里默认为“6379”;将“logfile”属性设置为指定的日志路径,其余的属性可以保持默认

第五步:
使用命令src/redis-server ./redis.conf启动Redis服务,启动之后,可以在刚才配置的日志路径中看到如下类似信息:

这里写图片描述

第六步:
执行客户端命令,验证服务是否正常:

这里写图片描述

第七步:
执行以下命令src/redis-cli shutdown,停止Redis服务。

$ps -ef | grep redis
root     23422 19813  0 10:59 pts/5    00:00:08 redis-server *:6379

$sudo redis-cli  shutdown
[23422] 05 Mar 12:11:29.301 # User requested shutdown...
[23422] 05 Mar 12:11:29.301 * Saving the final RDB snapshot before exiting.
[23422] 05 Mar 12:11:29.314 * DB saved on disk
[23422] 05 Mar 12:11:29.314 # Redis is now ready to exit, bye bye...
[1]+  Done                    sudo redis-server  (wd: ~/soft/redis-2.10.3)
(wd now: ~/soft/redis-2.8.17)

$ps -ef | grep redis
jihite 30563 19813  0 12:11 pts/5    00:00:00 grep redis

注意:如果设置了密码后,redis-cli是无法关掉Redis服务的,必须加上ip、port、passwd:

sudo redis-cli -h host -p port -a passwd shutdown
//退出客户端
QUIT

3、redis.conf配置文件说明

就像pom.xml是maven最重要的配置文件一样,redis.conf也是redis最重要的配置文件,下面我么来学习一下它的参数说明:

属性说明
daemonize如果值是yes,则启动服务的时候是后台守护进程的形式,如果是no,则相反
pidfile指定存储Redis进程号的文件路径
port指定当前Redis服务的端口,默认为6379
tcp-backlog此参数确定了TCP连接中已完成队列(完成三次握手之后)的长度, 当然此值必须不大于Linux系统定义的/proc/sys/net/core/somaxconn值,默认是511,而Linux的默认参数值是128。当系统并发量大并且客户端速度缓慢的时候,可以将这二个参数一起参考设定。
timeout客户端和Redis服务端的连接超时时间,默认是0,表示永不超时
tcp-keepalive如果值非0,单位是秒,表示将周期性的使用SO_KEEPALIVE检测客户端是否还处于健康状态,避免服务器一直阻塞,官方给出的建议值是60S
loglevelRedis总共支持四个级别:debug、verbose、notice、warning。Debug:记录很多信息,用于开发和测试;Varbose:有用的信息,不像debug会记录那么多;Notice:普通的verbose,常用于生产环境;Warning:只有非常重要或者严重的信息会记录到日志;默认是notice级别。
logfile日志的存储路径
databases可用的数据库数,默认值为16,默认数据库为0,数据库范围在0-(database-1)之间,个人觉得DB的概念类似于命名空间
save保存数据库快照信息到磁盘,其对应的值有两个,比如save 300 10表示:300秒内至少有300个key被改变时,触发保存信息到磁盘的事件
stop-writes-on-bgsave-error当持久化出现错误之后,是否继续提供写服务
rdbcompression持久化到RDB文件时,是否压缩,“yes”为压缩,“no”则反之
rdbchecksum读取和写入的时候是否支持CRC64校验,默认是开启的
dbfilename镜像文件的名字
dir当前工作目录,配置文件和镜像文件等都在此目录下
masterauth设置访问master服务器的密码
slave-serve-stale-data当slave服务器和master服务器失去连接后,或者当数据正在复制传输的时候,如果此参数值设置“yes”,slave服务器可以继续接受客户端的请求,否则,会返回给请求的客户端如下信息“SYNC with master in progress”
slave-read-only是否允许slave服务器节点只提供读服务
repl-disable-tcp-nodelay指定向slave同步数据时,是否禁用socket的NO_DELAY选项。若配置为“yes”,则禁用NO_DELAY,则TCP协议栈会合并小包统一发送,这样可以减少主从节点间的包数量并节省带宽,但会增加数据同步到slave的时间。若配置为“no”,表明启用NO_DELAY,则TCP协议栈不会延迟小包的发送时机,这样数据同步的延时会减少,但需要更大的带宽。通常情况下,应该配置为no以降低同步延时,但在主从节点间网络负载已经很高的情况下,可以配置为yes。
slave-priority指定slave的优先级。在不只1个slave存在的部署环境下,当master宕机时,Redis Sentinel会将priority值最小的slave提升为master。需要注意的是,若该配置项为0,则对应的slave永远不会自动提升为master。
appendonly开启append only 模式之后,redis 会把所接收到的每一次写操作请求都追加到appendonly.aof 文件中,当redis 重新启动时,会从该文件恢复出之前的状态。但是这样会造成appendonly.aof 文件过大,所以redis 还支持了BGREWRITEAOF 指令,对appendonly.aof 进行重新整理。默认是不开启的。
appendfilename默认为appendonly.aof。
appendfsync设置aof的同步频率,有三种选择always、everysec、no,默认是everysec表示每秒同步一次。
no-appendfsync-on-rewrite指定是否在后台aof文件rewrite期间调用fsync,默认为no,表示要调用fsync(无论后台是否有子进程在刷盘)。Redis在后台写RDB文件或重写afo文件期间会存在大量磁盘IO,此时,在某些linux系统中,调用fsync可能会阻塞。
auto-aof-rewrite-percentage指定Redis重写aof文件的条件,默认为100,表示与上次rewrite的aof文件大小相比,当前aof文件增长量超过上次afo文件大小的100%时,就会触发background rewrite。若配置为0,则会禁用自动rewrite
auto-aof-rewrite-min-size指定触发rewrite的aof文件大小。若aof文件小于该值,即使当前文件的增量比例达到auto-aof-rewrite-percentage的配置值,也不会触发自动rewrite。即这两个配置项同时满足时,才会触发rewrite。
lua-time-limit一个Lua脚本最长的执行时间,单位为毫秒,如果为0或负数表示无限执行时间,默认为5000
notify-keyspace-events见参考3,按键通知事件
aof-rewrite-incremental-fsyncaof rewrite过程中,是否采取增量文件同步策略,默认为“yes”。 rewrite过程中,每32M数据进行一次文件同步,这样可以减少aof大文件写入对磁盘的操作次数

4、Redis管理工具

Redis安装好之后,进入安装目录的src文件夹,会发现里面有6个可执行文件:

它们对应着6个管理Redis的工具:

redis-server
redis-cli
redis-benchmark
redis-check-aof
redis-check-dump
redis-sentinel

4.1 redis-server

该工具用于启动Redis服务器,处理与客户端的对话,一个服务器可以与多个客户端连接。

在终端输入该命令,如果启动成功,就会看到Redis那幅标志性的图片.

4.2 redis-cli

该工具用于启动Redis客户端,发起与服务器的对话。可以使用参数来指定目标服务器的详细信息,例如使用参数“-h”指定服务器IP地址、“-p”指定服务器端口、“-a”指定登录密码等,如:
Redis-cli –h 192.168.1.2 –p 6300

如不指定任何参数,则默认连接127.0.0.1的6379端口。

与Redis服务器取得连接后,就通过指令进行数据的存取、更改等操作了:

127.0.0.1:6379 > set name tom
OK
127.0.0.1:6379 > get name
"tom"

4.3 redis-benchmark

该工具用于测试Redis在本机的性能,类似于鲁大师的跑分程序。运行之后会得到一组数据存取效率的报告:

4.4 redis-check-aof

Redis虽然是基于内存的数据库,但是会创建并更新在硬盘上的备份,备份有两种方式,一个是把内存的数据导入dump.rdb文件中,另一中就是将每个执行过的命令记录到AOF文件中。

该工具用于检查、修复AOF文件。

4.5 redis-check-dump

与Redis-check-aof类似,该工具用于检查dump.rdb文件。

4.6 redis-sentinel

该工具提供Redis实例的监控管理、通知和实例失效备援服务,是Redis集群的管理工具,监控各个其他节点的工作情况并且进行故障恢复,来提高集群的高可用性。

5、redis的适用场合

redis开创了一种新的数据存储思路,使用redis我们可以利用redis灵活多变的数据结构和数据操作来进行一些复杂的操作。

下面是redis使用的一些场景:

1、取最新N个数据的操作
比如典型的区你网站的最新评论。通过下面的方式,我们可以将最新的5000条评论的ID放在redis的List集合中,并将超出集合的部分从数据库中获取。

使用LPUSH latest.comments命令,向list集合中插入数据;
插入完成后再用LTRIM latest.comments 0 5000命令使其永远只保存最近5000个ID,然后我们在客户端获取某一页评论时可以用下面的逻辑。

FUNCTION get_latest_comments(start,num_items):
    id_list = redis.lrange("latest.comments",start,start+num_items-1)
    IF id_list.length < num_items
    id_list=SQL_DB("SELECT … ORDER BY time LIMIT …")
END
RETURN id_list
END

如果你还有不同的筛选维度,比如某个分类的最新N条,那么你可以再建一个按此分类的List。只存ID的话,redis是非常高效的。

2、排行榜应用,取TOP N操作
这个需求与上面需求的不同之处在于,前面操作以时间为权重,这个是以某个条件为权重。比如按顶的次数排序,这时候就需要我们的sorted set出来了。将你要排序的值设置成sorted set的score,将具体的数据设置成相应的value,每次只需要执行一条ZADD命令即可。

redis 127.0.0.1:6379> ZADD myset 1 "hello"
(integer) 1
redis 127.0.0.1:6379> ZADD myset 1 "foo"
(integer) 1
redis 127.0.0.1:6379> ZADD myset 2 "world" 3 "bar"
(integer) 2
redis 127.0.0.1:6379> ZRANGE myzset 0 -1 WITHSCORES
1) "hello"
2) "1"
3) "foo"
4) "1"
5) "world"
6) "2"
7) "bar"
8) "3"

3、需要精准设定过期时间的应用
比如你可以把上面说到的sorted set的score值设置成过期时间的时间戳,那么就可以简单的通过过期时间排序,定时清除过期数据了。不仅是清除redis中的过期数据,你完全可以把redis里这个过期时间当成是对数据库中数据的索引,用redis来找出哪些数据需要过期删除,然后再精确的从数据库中删除相应的记录。

redis 127.0.0.1:6379> ZADD myset 20171101 "hello"
(integer) 1
redis 127.0.0.1:6379> ZADD myset 20171101 "foo"
(integer) 1
redis 127.0.0.1:6379> ZADD myset 20171103 "world" 20171104 "bar"
(integer) 2
redis 127.0.0.1:6379> ZRANGE myzset 0 -1 WITHSCORES
1) "hello"
2) "20171101"
3) "foo"
4) "20171101"
5) "world"
6) "20171103"
7) "bar"
8) "20171104"

4、计数器应用
redis的命令是原子性的,你可以轻松地利用INCR,DECR命令来构建计数器系统。

redis> SET page_view 20
OK
redis> INCR page_view
(integer) 21
redis> GET page_view    # 数字值在 Redis 中以字符串的形式保存
"21"

–对存在的数字值 key 进行 DECR

redis> SET failure_times 10
OK
redis> DECR failure_times
(integer) 9

5、Uniq操作,获取某段时间所有数据排重值
这个实用redis的set数据结构最合适了,只需要不断讲数据往set中扔就行了,set意为集合,所以会自动排重。

6、实时系统,反垃圾系统
通过上面说的set功能,你可以知道一个终端用户是否进行了某个操作,可以找到其操作的集合并进行分析统计对比等。没有做不到,只有想不到。

7、Pub/Sub构建实时消息系统
redis的Pub/Sub可以构建实时的消息系统,比如很多用Pub/Sub构建的实时聊天系统的例子。

8、构建队列系统
使用List可以构建队列系统,使用sorted set甚至可以构建有优先级的队列系统。

9、缓存
这个不必说了,性能优于memcached,数据结构也更多样化。

6、Java操作Redis

我们平时项目中使用最多的就是这个了,redis安装部署完成之后,我们怎么使用Java操作redis呢?

目前Jedis是官方推荐的比较好的Redis操作API包,我们这里结合Spring来看下如何使用Redis这一神器。

首先在pom文件中引入Jedis包:

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.1.0</version>
</dependency>

在Spring的resource目录中增加Redis的配置文件redis.properties

 # Redis settings
  redis.host=192.168.50.71
  redis.port=6379
  redis.pass=
  redis.timeout=0

  redis.maxIdle=300
  redis.maxActive=600
  redis.maxWait=1000
  redis.testOnBorrow=true

配置Spring文件,完成Redis相关Bean的注入:

<?xml version="1.0" encoding="UTF-8"?>  
  <beans xmlns="http://www.springframework.org/schema/beans"  
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
      xmlns:context="http://www.springframework.org/schema/context"  
      xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"  
      xmlns:aop="http://www.springframework.org/schema/aop"  
      xsi:schemaLocation="  
              http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
              http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">  

    <context:property-placeholder location="classpath:redis.properties" />  
    <context:component-scan base-package="com.scott.demo" />

    <bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" />

     <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
         <property name="maxActive" value="50" />
         <property name="maxIdle" value="8" />
         <property name="maxWait" value="1000" />
         <property name="testOnBorrow" value="true"/>
         <property name="testOnReturn" value="true"/>
         <!-- <property name="testWhileIdle" value="true"/> -->
     </bean>

     <bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool"  scope="singleton">
         <constructor-arg index="0" ref="jedisPoolConfig" />
         <constructor-arg index="1">
             <list>
                 <bean class="redis.clients.jedis.JedisShardInfo">
                     <constructor-arg name="host" value="${redis.host}" />
                     <constructor-arg name="port" value="${redis.port}" />
                     <constructor-arg name="timeout" value="${redis.timeout}" />
                     <constructor-arg name="weight" value="1" />
                 </bean>
             </list>
         </constructor-arg>
     </bean>
 </beans>

获取Redis客户端对象的类:

  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.stereotype.Repository;
  import com.scott.demo.redis.service.RedisService;
  import redis.clients.jedis.ShardedJedis;
  import redis.clients.jedis.ShardedJedisPool;

 @Repository("redisService")
 public class RedisServiceImpl implements RedisService {

     private static final Logger log = LoggerFactory.getLogger(RedisServiceImpl.class);

     @Autowired
     private ShardedJedisPool shardedJedisPool;

     public ShardedJedis getRedisClient() {
         try {
             ShardedJedis shardJedis = shardedJedisPool.getResource();
             return shardJedis;
         } catch (Exception e) {
             log.error("getRedisClent error", e);
         }
         return null;
     }

     public void returnResource(ShardedJedis shardedJedis) {
         shardedJedisPool.returnResource(shardedJedis);
     }

     public void returnResource(ShardedJedis shardedJedis, boolean broken) {
         if (broken) {
             shardedJedisPool.returnBrokenResource(shardedJedis);
         } else {
             shardedJedisPool.returnResource(shardedJedis);
         }
     }

  }

实现redis相关操作的RedisClient类:

import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

import com.scott.demo.redis.service.impl.RedisServiceImpl;

import redis.clients.jedis.BinaryClient.LIST_POSITION;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPipeline;
import redis.clients.jedis.SortingParams;
import redis.clients.jedis.Tuple;

public class RedisClient {

    private static final Logger log = LoggerFactory.getLogger(RedisClient.class);

    @Autowired
    private RedisServiceImpl redisService;

    public void disconnect() {
        ShardedJedis shardedJedis = redisService.getRedisClient();
        shardedJedis.disconnect();
    }

    /**
     * 设置单个值
     */
    public String set(String key, String value) {
        String result = null;

        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.set(key, value);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    /**
     * 获取单个值
     */
    public String get(String key) {
        String result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }

        boolean flag = false;
        try {
            result = shardedJedis.get(key);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Boolean exists(String key) {
        Boolean result = false;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.exists(key);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public String type(String key) {
        String result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.type(key);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    /**
     * 在某段时间后失效
     */
    public Long expire(String key, int seconds) {
        Long result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.expire(key, seconds);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    /**
     * 在某个时间点失效
     */
    public Long expireAt(String key, long time) {
        Long result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.expireAt(key, time);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Long ttl(String key) {
        Long result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.ttl(key);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public boolean setbit(String key, long offset, boolean value) {

        ShardedJedis shardedJedis = redisService.getRedisClient();
        boolean result = false;
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.setbit(key, offset, value);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public boolean getbit(String key, long offset) {
        ShardedJedis shardedJedis = redisService.getRedisClient();
        boolean result = false;
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;

        try {
            result = shardedJedis.getbit(key, offset);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public long setrange(String key, long offset, String value) {
        ShardedJedis shardedJedis = redisService.getRedisClient();
        long result = 0;
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.setrange(key, offset, value);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public String getrange(String key, long startOffset, long endOffset) {
        ShardedJedis shardedJedis = redisService.getRedisClient();
        String result = null;
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.getrange(key, startOffset, endOffset);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public String getSet(String key, String value) {
        String result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.getSet(key, value);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Long setnx(String key, String value) {
        Long result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.setnx(key, value);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public String setex(String key, int seconds, String value) {
        String result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.setex(key, seconds, value);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Long decrBy(String key, long integer) {
        Long result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.decrBy(key, integer);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Long decr(String key) {
        Long result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.decr(key);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Long incrBy(String key, long integer) {
        Long result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.incrBy(key, integer);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Long incr(String key) {
        Long result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.incr(key);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Long append(String key, String value) {
        Long result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.append(key, value);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public String substr(String key, int start, int end) {
        String result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.substr(key, start, end);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Long hset(String key, String field, String value) {
        Long result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.hset(key, field, value);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public String hget(String key, String field) {
        String result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.hget(key, field);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Long hsetnx(String key, String field, String value) {
        Long result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.hsetnx(key, field, value);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public String hmset(String key, Map<String, String> hash) {
        String result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.hmset(key, hash);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public List<String> hmget(String key, String... fields) {
        List<String> result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.hmget(key, fields);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Long hincrBy(String key, String field, long value) {
        Long result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.hincrBy(key, field, value);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Boolean hexists(String key, String field) {
        Boolean result = false;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.hexists(key, field);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Long del(String key) {
        Long result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.del(key);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Long hdel(String key, String field) {
        Long result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.hdel(key, field);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Long hlen(String key) {
        Long result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.hlen(key);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Set<String> hkeys(String key) {
        Set<String> result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.hkeys(key);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public List<String> hvals(String key) {
        List<String> result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.hvals(key);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Map<String, String> hgetAll(String key) {
        Map<String, String> result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.hgetAll(key);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    /**
     * 在redis list尾部增加一个String
     * */
    public Long rpush(String key, String string) {
        Long result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.rpush(key, string);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    /**
     * 在redis list头部增加一个String
     * */
    public Long lpush(String key, String string) {
        Long result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.lpush(key, string);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Long llen(String key) {
        Long result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.llen(key);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public List<String> lrange(String key, long start, long end) {
        List<String> result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.lrange(key, start, end);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public String ltrim(String key, long start, long end) {
        String result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.ltrim(key, start, end);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public String lIndex(String key, long index) {
        String result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.lindex(key, index);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public String lset(String key, long index, String value) {
        String result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.lset(key, index, value);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Long lrem(String key, long count, String value) {
        Long result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.lrem(key, count, value);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    /**
     * 从redis list头部取出一个key
     * */
    public String lpop(String key) {
        String result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.lpop(key);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    /**
     * 从redis list尾部取出一个key
     * */
    public String rpop(String key) {
        String result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.rpop(key);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Long sadd(String key, String member) {
        Long result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.sadd(key, member);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Set<String> smembers(String key) {
        Set<String> result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.smembers(key);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Long srem(String key, String member) {
        ShardedJedis shardedJedis = redisService.getRedisClient();

        Long result = null;
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.srem(key, member);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public String spop(String key) {
        ShardedJedis shardedJedis = redisService.getRedisClient();
        String result = null;
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.spop(key);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Long scard(String key) {
        ShardedJedis shardedJedis = redisService.getRedisClient();
        Long result = null;
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.scard(key);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Boolean sismember(String key, String member) {
        ShardedJedis shardedJedis = redisService.getRedisClient();
        Boolean result = null;
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.sismember(key, member);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public String srandmember(String key) {
        ShardedJedis shardedJedis = redisService.getRedisClient();
        String result = null;
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.srandmember(key);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Long zadd(String key, double score, String member) {
        Long result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.zadd(key, score, member);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Set<String> zrange(String key, int start, int end) {
        Set<String> result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.zrange(key, start, end);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Long zrem(String key, String member) {
        Long result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.zrem(key, member);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Double zincrby(String key, double score, String member) {
        Double result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {

            result = shardedJedis.zincrby(key, score, member);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Long zrank(String key, String member) {
        Long result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {

            result = shardedJedis.zrank(key, member);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Long zrevrank(String key, String member) {
        Long result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {

            result = shardedJedis.zrevrank(key, member);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Set<String> zrevrange(String key, int start, int end) {
        Set<String> result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {

            result = shardedJedis.zrevrange(key, start, end);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Set<Tuple> zrangeWithScores(String key, int start, int end) {
        Set<Tuple> result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {

            result = shardedJedis.zrangeWithScores(key, start, end);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Set<Tuple> zrevrangeWithScores(String key, int start, int end) {
        Set<Tuple> result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {

            result = shardedJedis.zrevrangeWithScores(key, start, end);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Long zcard(String key) {
        Long result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {

            result = shardedJedis.zcard(key);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Double zscore(String key, String member) {
        Double result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {

            result = shardedJedis.zscore(key, member);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public List<String> sort(String key) {
        List<String> result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {

            result = shardedJedis.sort(key);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public List<String> sort(String key, SortingParams sortingParameters) {
        List<String> result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {

            result = shardedJedis.sort(key, sortingParameters);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Long zcount(String key, double min, double max) {
        Long result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {

            result = shardedJedis.zcount(key, min, max);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Set<String> zrangeByScore(String key, double min, double max) {
        Set<String> result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {

            result = shardedJedis.zrangeByScore(key, min, max);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Set<String> zrevrangeByScore(String key, double max, double min) {
        Set<String> result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {

            result = shardedJedis.zrevrangeByScore(key, max, min);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Set<String> zrangeByScore(String key, double min, double max,
            int offset, int count) {
        Set<String> result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {

            result = shardedJedis.zrangeByScore(key, min, max, offset, count);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Set<String> zrevrangeByScore(String key, double max, double min,
            int offset, int count) {
        Set<String> result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {

            result = shardedJedis
                    .zrevrangeByScore(key, max, min, offset, count);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Set<Tuple> zrangeByScoreWithScores(String key, double min, double max) {
        Set<Tuple> result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {

            result = shardedJedis.zrangeByScoreWithScores(key, min, max);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Set<Tuple> zrevrangeByScoreWithScores(String key, double max,
            double min) {
        Set<Tuple> result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {

            result = shardedJedis.zrevrangeByScoreWithScores(key, max, min);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Set<Tuple> zrangeByScoreWithScores(String key, double min,
            double max, int offset, int count) {
        Set<Tuple> result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {

            result = shardedJedis.zrangeByScoreWithScores(key, min, max,
                    offset, count);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Set<Tuple> zrevrangeByScoreWithScores(String key, double max,
            double min, int offset, int count) {
        Set<Tuple> result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {

            result = shardedJedis.zrevrangeByScoreWithScores(key, max, min,
                    offset, count);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Long zremrangeByRank(String key, int start, int end) {
        Long result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {

            result = shardedJedis.zremrangeByRank(key, start, end);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Long zremrangeByScore(String key, double start, double end) {
        Long result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {

            result = shardedJedis.zremrangeByScore(key, start, end);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Long linsert(String key, LIST_POSITION where, String pivot,
            String value) {
        Long result = null;
        ShardedJedis shardedJedis = redisService.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {

            result = shardedJedis.linsert(key, where, pivot, value);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }


    @SuppressWarnings("deprecation")
    public List<Object> pipelined(ShardedJedisPipeline shardedJedisPipeline) {
        ShardedJedis shardedJedis = redisService.getRedisClient();
        List<Object> result = null;
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.pipelined(shardedJedisPipeline);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Jedis getShard(String key) {
        ShardedJedis shardedJedis = redisService.getRedisClient();
        Jedis result = null;
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.getShard(key);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public JedisShardInfo getShardInfo(String key) {
        ShardedJedis shardedJedis = redisService.getRedisClient();
        JedisShardInfo result = null;
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.getShardInfo(key);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public String getKeyTag(String key) {
        ShardedJedis shardedJedis = redisService.getRedisClient();
        String result = null;
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.getKeyTag(key);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Collection<JedisShardInfo> getAllShardInfo() {
        ShardedJedis shardedJedis = redisService.getRedisClient();
        Collection<JedisShardInfo> result = null;
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.getAllShardInfo();

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

    public Collection<Jedis> getAllShards() {
        ShardedJedis shardedJedis = redisService.getRedisClient();
        Collection<Jedis> result = null;
        if (shardedJedis == null) {
            return result;
        }
        boolean flag = false;
        try {
            result = shardedJedis.getAllShards();

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            flag = true;
        } finally {
            redisService.returnResource(shardedJedis, flag);
        }
        return result;
    }

}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值