redis+spring+maven构建项目(带有缓存)

来源:互联网 发布:知乎boy scout 编辑:程序博客网 时间:2024/05/29 12:24

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>redis</groupId>  <artifactId>redis</artifactId>  <version>0.0.1-SNAPSHOT</version>  <packaging>war</packaging>  <name>redis</name>  <description/>  <properties>    <webVersion>3.1</webVersion>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  </properties>  <dependencies>    <dependency>      <groupId>javax</groupId>      <artifactId>javaee-api</artifactId>      <version>7.0</version>      <scope>provided</scope>    </dependency>    <dependency>      <groupId>org.glassfish.web</groupId>      <artifactId>javax.servlet.jsp.jstl</artifactId>      <version>1.2.2</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-aop</artifactId>      <version>4.1.0.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-aspects</artifactId>      <version>4.1.0.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-beans</artifactId>      <version>4.1.0.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-context</artifactId>      <version>4.1.0.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-context-support</artifactId>      <version>4.1.0.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-expression</artifactId>      <version>4.1.0.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-instrument</artifactId>      <version>4.1.0.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-instrument-tomcat</artifactId>      <version>4.1.0.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-core</artifactId>      <version>4.1.0.RELEASE</version>    </dependency>    <dependency>      <groupId>aopalliance</groupId>      <artifactId>aopalliance</artifactId>      <version>1.0</version>    </dependency>    <dependency>      <groupId>commons-pool</groupId>      <artifactId>commons-pool</artifactId>      <version>1.6</version>    </dependency>    <dependency>      <groupId>log4j</groupId>      <artifactId>log4j</artifactId>      <version>1.2.17</version>    </dependency>    <dependency>      <groupId>org.aspectj</groupId>      <artifactId>aspectjweaver</artifactId>      <version>1.8.2</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-web</artifactId>      <version>4.1.0.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-webmvc</artifactId>      <version>4.1.0.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-webmvc-portlet</artifactId>      <version>4.1.0.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-jms</artifactId>      <version>4.1.0.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-oxm</artifactId>      <version>4.1.0.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework.security</groupId>      <artifactId>spring-security-web</artifactId>      <version>3.2.5.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework.security</groupId>      <artifactId>spring-security-core</artifactId>      <version>3.2.5.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework.security</groupId>      <artifactId>spring-security-acl</artifactId>      <version>3.2.5.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework.security</groupId>      <artifactId>spring-security-aspects</artifactId>      <version>3.2.5.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework.security</groupId>      <artifactId>spring-security-cas</artifactId>      <version>3.2.5.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework.security</groupId>      <artifactId>spring-security-config</artifactId>      <version>3.2.5.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework.security</groupId>      <artifactId>spring-security-crypto</artifactId>      <version>3.2.5.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework.security</groupId>      <artifactId>spring-security-ldap</artifactId>      <version>3.2.5.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework.security</groupId>      <artifactId>spring-security-openid</artifactId>      <version>3.2.5.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework.security</groupId>      <artifactId>spring-security-remoting</artifactId>      <version>3.2.5.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework.security</groupId>      <artifactId>spring-security-taglibs</artifactId>      <version>3.2.5.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework.webflow</groupId>      <artifactId>spring-webflow</artifactId>      <version>2.4.0.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework.webflow</groupId>      <artifactId>spring-binding</artifactId>      <version>2.4.0.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework.webflow</groupId>      <artifactId>spring-js</artifactId>      <version>2.4.0.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework.webflow</groupId>      <artifactId>spring-js-resources</artifactId>      <version>2.4.0.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-test</artifactId>      <version>4.1.0.RELEASE</version>    </dependency>    <dependency>      <groupId>opensymphony</groupId>      <artifactId>ognl</artifactId>      <version>2.6.11</version>    </dependency>    <!-- 引入redis jar包 -->    <dependency>        <groupId>redis.clients</groupId>        <artifactId>jedis</artifactId>        <version>2.8.0</version>    </dependency>    <dependency>        <groupId>org.apache.commons</groupId>        <artifactId>commons-lang3</artifactId>        <version>3.3.2</version>    </dependency>     <dependency>        <groupId>org.springframework.data</groupId>        <artifactId>spring-data-redis</artifactId>        <version>1.6.1.RELEASE</version>    </dependency>    <dependency>        <groupId>org.apache.commons</groupId>        <artifactId>commons-pool2</artifactId>        <version>2.2</version>    </dependency>     <!-- Jackson Json处理工具包 -->       <dependency>        <groupId>com.fasterxml.jackson.core</groupId>        <artifactId>jackson-databind</artifactId>        <version>2.7.3</version>   </dependency>    </dependencies>  <build>    <plugins>      <plugin>        <artifactId>maven-compiler-plugin</artifactId>        <version>2.3.2</version>        <configuration>          <source>1.7</source>          <target>1.7</target>        </configuration>      </plugin>      <plugin>        <artifactId>maven-war-plugin</artifactId>        <version>2.6</version>        <configuration>          <failOnMissingWebXml>false</failOnMissingWebXml>        </configuration>      </plugin>    </plugins>  </build></project>

spring.xml

<?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:context="http://www.springframework.org/schema/context"      xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"      xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:task="http://www.springframework.org/schema/task"      xsi:schemaLocation="http://www.springframework.org/schema/mvc           http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd          http://www.springframework.org/schema/beans                      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd                      http://www.springframework.org/schema/context                      http://www.springframework.org/schema/context/spring-context-3.0.xsd                      http://www.springframework.org/schema/aop                      http://www.springframework.org/schema/aop/spring-aop-3.0.xsd                      http://www.springframework.org/schema/tx                      http://www.springframework.org/schema/tx/spring-tx-3.0.xsd                      http://www.springframework.org/schema/task                      http://www.springframework.org/schema/task/spring-task-3.0.xsd">      <!-- 引入properties配置文件 -->       <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">        <property name="locations">            <list>                <!--要是有多个配置文件,只需在这里继续添加即可 -->               <value>classpath:redis.properties</value>            </list>        </property>    </bean>    <context:annotation-config />    <task:annotation-driven />     <!-- 配置自动扫描的包 -->     <context:component-scan base-package="com.wangh"></context:component-scan>     <!-- jedis客户端单机版 -->      <bean id="redisClient" class="redis.clients.jedis.JedisPool">          <constructor-arg name="host" value="${redis.host}"></constructor-arg>          <constructor-arg name="port" value="${redis.port}"></constructor-arg>        <constructor-arg name="poolConfig" ref="poolConfig"></constructor-arg>       </bean>      <bean id="jedisClient" class="com.wangh.dao.JedisClientSingle"/>      <bean id="addService" class="com.wangh.service.impl.AddServiceImpl"></bean>     <!-- jedis集群版配置 -->  <!--     <bean id="redisClient" class="redis.clients.jedis.JedisCluster">          <constructor-arg name="nodes">              <set>                  <bean class="redis.clients.jedis.HostAndPort">                      <constructor-arg name="host" value="192.168.1.87"></constructor-arg>                      <constructor-arg name="port" value="7006"></constructor-arg>                  </bean>                  <bean class="redis.clients.jedis.HostAndPort">                      <constructor-arg name="host" value="192.168.1.87"></constructor-arg>                      <constructor-arg name="port" value="7001"></constructor-arg>                  </bean>                  <bean class="redis.clients.jedis.HostAndPort">                      <constructor-arg name="host" value="192.168.1.87"></constructor-arg>                      <constructor-arg name="port" value="7002"></constructor-arg>                  </bean>                  <bean class="redis.clients.jedis.HostAndPort">                      <constructor-arg name="host" value="192.168.1.87"></constructor-arg>                      <constructor-arg name="port" value="7003"></constructor-arg>                  </bean>                  <bean class="redis.clients.jedis.HostAndPort">                      <constructor-arg name="host" value="192.168.1.87"></constructor-arg>                      <constructor-arg name="port" value="7004"></constructor-arg>                  </bean>                  <bean class="redis.clients.jedis.HostAndPort">                      <constructor-arg name="host" value="192.168.1.87"></constructor-arg>                      <constructor-arg name="port" value="7005"></constructor-arg>                  </bean>              </set>          </constructor-arg>          <constructor-arg name="poolConfig" ref="jedisPoolConfig"></constructor-arg>      </bean>      <bean id="jedisClientCluster" class="com.wangh.dao.JedisClientCluster"></bean> -->       <!-- jedis 配置 -->      <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig" >          <!-- 最大空闲连接数 -->           <property name="maxIdle" value="${redis.maxIdle}"/>          <!-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 -->          <property name="maxWaitMillis" value="${redis.maxWait}"/>           <!-- 在获取连接的时候检查有效性, 默认false -->           <property name="testOnBorrow" value="${redis.testOnBorrow}"/>    </bean >      <!-- redis连接工厂 -->    <bean id="connectionFactory"  class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" >          <property name="poolConfig" ref="poolConfig"/>          <property name="port" value="${redis.port}"/>          <property name="hostName" value="${redis.host}"/>          <property name="password" value="${redis.password}"/>          <property name="timeout" value="${redis.timeout}"></property>    </bean >    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" >          <property name="connectionFactory" ref="connectionFactory" />           <!--如果不配置Serializer,那么存储的时候只能使用String,如果用对象类型存储,那么会提示错误 can't cast to String!!!-->           <property name="keySerializer">              <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />          </property>          <property name="valueSerializer">              <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />          </property>    </bean >    <bean id="redisUtil" class="com.wangh.util.RedisUtil" >          <property name="redisTemplate" ref="redisTemplate" />    </bean >    <!-- 开启切面代理-->    <aop:aspectj-autoproxy/> </beans>

redis.properties

#redis setredis.host=127.0.0.1redis.port=6379redis.password=redis.maxIdle=100redis.maxActive=300redis.maxWait=1000redis.testOnBorrow=trueredis.timeout=100000# no need add cache classtargetNames=xxxRecordManager,xxxSetRecordManager,xxxStatisticsIdentificationManager# no need add cache methodmethodNames=#set cache expired timecom.service.impl.xxxRecordManager= 60com.service.impl.xxxSetRecordManager= 60defaultCacheExpireTime=3600fep.local.cache.capacity =10000

RedisUtil

package com.wangh.util;import java.io.Serializable;import java.util.Set;import java.util.concurrent.TimeUnit;import org.apache.log4j.Logger;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.core.ValueOperations;/** * * @ClassName: RedisUtil* @Description:redis cache 工具类* @author Wanghao* @date 2017年6月5日 上午11:06:07 */public final class RedisUtil implements Serializable{    private static final long serialVersionUID = 1L;    private Logger logger = Logger.getLogger(RedisUtil.class);    private RedisTemplate<Serializable, Object> redisTemplate;    /**     * 批量删除对应的value     * @param keys     */    public void remove(final String... keys) {        for (String key : keys) {            remove(key);        }    }    /**     * 批量删除key     * @param pattern     */    public void removePattern(final String pattern) {        Set<Serializable> keys = redisTemplate.keys(pattern);        if (keys.size() > 0)            redisTemplate.delete(keys);    }    /**     * 删除对应的value     *      * @param key     */    public void remove(final String key) {        if (exists(key)) {            redisTemplate.delete(key);        }    }    /**     * 判断缓存中是否有对应的value     *      * @param key     * @return     */    public boolean exists(final String key) {        return redisTemplate.hasKey(key);    }    /**     * 读取缓存     * @param key     * @return     */    public Object get(final String key) {        Object result = null;        ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();        result = operations.get(key);        return result;    }    /**     * 写入缓存     * @param key     * @param value     * @return     */    public boolean set(final String key, Object value) {        boolean result = false;        try {            ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();            operations.set(key, value);            result = true;        } catch (Exception e) {            e.printStackTrace();        }        return result;    }    /**     * 写入缓存     * @param key     * @param value     * @return     */    public boolean set(final String key, Object value, Long expireTime) {        boolean result = false;        try {            ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();            operations.set(key, value);            redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);            result = true;        } catch (Exception e) {            e.printStackTrace();        }        return result;    }    public void setRedisTemplate(RedisTemplate<Serializable, Object> redisTemplate) {        this.redisTemplate = redisTemplate;    }}

RedisEvict

package com.wangh.util;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * 定义标注在Service实现方法上的注解,用于传递类型参数* @ClassName: RedisEvict* @Description: TODO* @author Wh* @date 2017年6月5日 下午4:25:49 */@Retention(RetentionPolicy.RUNTIME)  @Target(ElementType.METHOD)public @interface RedisEvict {    @SuppressWarnings("rawtypes")    Class type();}

RedisCache

package com.wangh.util;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * 定义标注在Service实现方法上的注解,用于传递类型参数* @ClassName: RedisCache* @Description: TODO* @author Wh* @date 2017年6月5日 下午4:23:18 */@Retention(RetentionPolicy.RUNTIME)  @Target(ElementType.METHOD)  @Documented public @interface RedisCache {     @SuppressWarnings("rawtypes")     Class type();       public int expire() default 0;  //缓存多少秒,默认无限期    }

JsonUtils

package com.wangh.util;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Map.Entry;import org.apache.log4j.Logger;import com.fasterxml.jackson.core.type.TypeReference;import com.fasterxml.jackson.databind.JavaType;import com.fasterxml.jackson.databind.ObjectMapper;/** * Json字符串互转类* @ClassName: JsonUtils* @Description: TODO* @author Wh* @date 2017年6月5日 下午6:54:34 */public class JsonUtils {     private static Logger logger = Logger.getLogger(JsonUtils.class);          // 定义jackson对象          private static final ObjectMapper MAPPER = new ObjectMapper();          /**           * 将对象转换成json字符串           * @param data           * @return           * @throws IOException           */          public static String objectToJson(Object data) {              try {                  String string = MAPPER.writeValueAsString(data);                  return string;              } catch (Exception e) {                  e.printStackTrace();              }              return null;          }          /**           * 将json结果集转化为对象           * @param jsonData  json数据           * @param clazz  对象中的object类型           * @return           */          public static <T> T jsonToPojo(String jsonData, Class<T> beanType) {              try {                  T t = MAPPER.readValue(jsonData, beanType);                  return t;              } catch (Exception e) {                  e.printStackTrace();              }              return null;          }          /**           * 将json数据转换成pojo对象list           *            * @param jsonData           * @param beanType           * @return           */          public static <T> List<T> jsonToList(String jsonData, Class<T> beanType) {              JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);              try {                  List<T> list = MAPPER.readValue(jsonData, javaType);                  return list;              } catch (Exception e) {                  e.printStackTrace();              }              return null;          }          /**           * json string convert to map with javaBean           */          public static <T> Map<String, T> jsonToMap(String jsonStr, Class<T> clazz) throws Exception {              Map<String, Map<String, Object>> map = MAPPER.readValue(jsonStr,                     new TypeReference<Map<String, T>>() { });              Map<String, T> result = new HashMap<String, T>();              for (Entry<String, Map<String, Object>> entry : map.entrySet()) {                  result.put(entry.getKey(), mapTopojo(entry.getValue(), clazz));              }              return result;          }          /**           * json string convert to map           */          @SuppressWarnings("unchecked")        public static <T> Map<String, Object> jsonTomap(String jsonStr) {              try {                  return MAPPER.readValue(jsonStr, Map.class);              } catch (Exception e) {                  e.printStackTrace();              }              return null;          }          /**           * map convert to javaBean           */          public static <T> T mapTopojo(Map<?, ?> map, Class<T> clazz) {              try {                  return MAPPER.convertValue(map, clazz);              } catch (Exception e) {                  e.printStackTrace();              }              return null;          }  }

CacheInterceptor

package com.wangh.util;import java.util.List;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.reflect.MethodSignature;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import com.wangh.dao.JedisClient;@Aspect  @Component public class CacheInterceptor {    @Autowired      JedisClient jedisClient;      //前置由于数据库数据变更  清理redis缓存      @Before("@annotation(redisEvict)")      public void doBefore(JoinPoint jp,RedisEvict redisEvict){            try{                String modelName = redisEvict.type().getName();                // 清除对应缓存                jedisClient.del(modelName);              }catch (Exception e) {                  e.printStackTrace();                  System.out.println("缓存服务器出现问题");               }      }   // 配置环绕方法      @Around("@annotation(redisCache)")      public Object doAround(ProceedingJoinPoint pjp, RedisCache redisCache)throws Throwable {          Class<?> modelType = redisCache.type();          // 去Redis中看看有没有我们的数据 包名+ 类名 + 方法名 + 参数(多个)          String cacheKey = getCacheKey(pjp);          System.out.println(cacheKey);          String value = null;          try {//当取redis发生异常时,为了不影响程序正常执行,需要try..catch()...              //检查redis中是否有缓存              value = jedisClient.hget(modelType.getName(),cacheKey);          } catch (Exception e) {              e.printStackTrace();              System.out.println("缓存服务器出现问题");          }          // result是方法的最终返回结果          Object result = null;          if (null == value) {              // 缓存未命中              System.out.println("缓存未命中");              // 后端查询数据                result = pjp.proceed();              try {//当取redis发生异常时,为了不影响程序正常执行,需要try..catch()...                  // 序列化结果放入缓存                  String json = serialize(result);                  jedisClient.hset(modelType.getName(), cacheKey, json);                  if(redisCache.expire()>0) {                       jedisClient.expire(cacheKey, redisCache.expire());//设置缓存时间                  }              } catch (Exception e) {                  e.printStackTrace();                  System.out.println("缓存服务器出现问题");              }          } else {              try{//当数据转换失败发生异常时,为了不影响程序正常执行,需要try..catch()...                  // 得到被代理方法的返回值类型                  Class<?> returnType = ((MethodSignature) pjp.getSignature()).getReturnType();                  //把json反序列化                  result = deserialize(value, returnType, modelType);                  // 缓存命中                  System.out.println("缓存命中");              } catch (Exception e) {                  //数据转换失败,到后端查询数据                    result = pjp.proceed();                  e.printStackTrace();                  System.out.println("缓存命中,但数据转换失败...");              }          }          return result;      }    private Object deserialize(String jsonString, Class<?> clazz, Class<?> modelType) {         // 序列化结果应该是List对象          if (clazz.isAssignableFrom(List.class)) {              return JsonUtils.jsonToList(jsonString, modelType);          }          // 序列化结果是普通对象          return JsonUtils.jsonToPojo(jsonString, clazz);      }    private String serialize(Object target) {         return JsonUtils.objectToJson(target);     }     // 包名+ 类名 + 方法名 + 参数(多个) 生成Key     private String getCacheKey(ProceedingJoinPoint pjp) {         StringBuffer key = new StringBuffer();              // 包名+ 类名 cn.core.serice.product.ProductServiceImpl.productList              String packageName = pjp.getTarget().getClass().getName();              key.append(packageName);              // 方法名              String methodName = pjp.getSignature().getName();              key.append(".").append(methodName);              // 参数(多个)              Object[] args = pjp.getArgs();              for (Object arg : args) {                  // 参数                  key.append(".").append(arg.toString());              }              return key.toString();      }  }

JedisClient接口

package com.wangh.dao;import java.util.List;import java.util.Set;public interface JedisClient {    /**     * 获取key的值    * @Title: get    * @param @param key    * @param @return     * @return String     * @throws    * @author Wanghao     */    String get(String key);      /**     * 获取所有key    * @Title: getAll    * @param @return     * @return Set<String>     * @throws    * @author Wanghao     */    Set<String> getAll();    byte[] get(byte[] key);    /**   * 新增key值  * @Title: set  * @param @param key  * @param @param value  * @param @return   * @return String   * @throws  * @author Wanghao   */    String set(String key, String value);      String set(byte[] key, byte[] value);    /**   * 返回名称为hkey的hash中key对应的value  * @Title: hget  * @param @param hkey  * @param @param key  * @param @return   * @return String   * @throws  * @author Wanghao   */    String hget(String hkey, String key);    /**   * 向名称为hkey的hash中添加元素key  * @Title: hset  * @param @param hkey  * @param @param key  * @param @param value  * @param @return   * @return long   * @throws  * @author Wanghao   */    long hset(String hkey, String key, String value);    /**   * 名称为key的string增1操作  * @Title: incr  * @param @param key  * @param @return   * @return long   * @throws  * @author Wanghao   */    long incr(String key);    /**   * 设置key值过期时间  * @Title: expire  * @param @param key  * @param @param second  * @param @return   * @return long   * @throws  * @author Wanghao   */    long expire(String key, int second);    /**   * 查看key值剩余生存时间  * @Title: ttl  * @param @param key  * @param @return   * @return long   * @throws  * @author Wanghao   */    long ttl(String key);    /**   * 删除一个key  * @Title: del  * @param @param key  * @param @return   * @return long   * @throws  * @author Wanghao   */    long del(String key);    /**   * 删除名称为hkey的hash中键为key的域  * @Title: hdel  * @param @param hkey  * @param @param key  * @param @return   * @return long   * @throws  * @author Wanghao   */    long hdel(String hkey, String key);     /**     * 判断key是否存在    * @Title: isExists    * @param @param key    * @param @return     * @return boolean     * @throws    * @author Wanghao     */    boolean isExists(String key);    /**     * 返回值的类型    * @Title: type    * @param @param key    * @param @return     * @return String     * @throws    * @author Wanghao     */    String type(String key);    /**     * 重命名key    * @Title: keyrename    * @param @param oldname    * @param @param newname    * @param @return     * @return String     * @throws    * @author Wanghao     */    String keyrename(String oldname, String newname);    /**     * 返回当前数据库中key的数目    * @Title: dbsize    * @param @return     * @return long     * @throws    * @author Wanghao     */    long dbsize();    /**     * 按索引查询.切换到指定的数据库,数据库索引号 index 用数字值指定,以 0 作为起始索引值。    * @Title: select    * @param @return     * @return String     * @throws    * @author Wanghao     */   String select(int index);   /**    * 删除当前选择数据库中的所有key   * @Title: flushdb   * @param @return    * @return String    * @throws   * @author Wanghao    */   String flushdb();   /**    * 删除所有数据库中的所有key   * @Title: flushall   * @param @return    * @return String    * @throws   * @author Wanghao    */   String flushall();   /**    * 返回库中多个string的value   * @Title: mget   * @param @param keys   * @param @return    * @return List<String>    * @throws   * @author Wanghao    */   List<String> mget(String... keys);   /**    * 批量设置多个string的值   * @Title: mset   * @param @param keys   * @param @return    * @return String    * @throws   * @author Wanghao    */   String mset(String... keys);   /**    * 添加string,名称为key,值为value   * @Title: setnx   * @param @param key   * @param @param value   * @param @return    * @return long    * @throws   * @author Wanghao    */   long setnx(String key, String value);   /**    * 名称为key的string增加integer   * @Title: incrby   * @param key   * @param integer   * @return long    * @throws   * @author Wanghao    */   long incrby(String key, int integer);   /**    * 名称为key的string减1操作   * @Title: decr   * @param key   * @return   * long   * @throws   * @author Wanghao    */   long decr(String key);   /**    * 名称为key的string减少integer   * @Title: decrby   * @param key   * @param integer   * @return   * String   * @throws   * @author Wanghao    */   long decrby(String key, int integer);   /**    * 名称为key的string的值附加value   * @Title: append   * @param key   * @param value   * @return   * long   * @throws   * @author Wanghao    */   long append(String key, String value);   /**    * 返回名称为key的string的value的子串   * @Title: substr   * @param key   * @param start   * @param end   * @return   * String   * @throws   * @author Wanghao    */   String substr(String key, int start, int end);   /**    * 删除多个key   * @Title: mdel   * @param key   * @return   * long   * @throws   * @author Wanghao    */   long mdel(String... key);   //#################### List ################################   /**    * 在名称为key的list头添加一个值为value的 元素   * @Title: lpush   * @param key   * @param value   * @return   * String   * @throws   * @author Wanghao    */   long lpush(String key, String value);   /**    * 在名称为key的list尾添加一个值为value的元素   * @Title: lpush   * @param key   * @param value   * @return   * String   * @throws   * @author Wanghao    */   long rpush(String key, String value);   /**    * 返回名称为key的list的长度   * @Title: llen   * @param key   * @return   * long   * @throws   * @author Wanghao    */   long llen(String key);   /**    * 返回名称为key的list中start至end之间的元素   * @Title: lrange   * @param key   * @param start   * @param end   * @return   * String   * @throws   * @author Wanghao    */   List<String> lrange(String key, int start,int end);   /**    * 截取名称为key的list   * @Title: ltrim   * @param key   * @param start   * @param end   * @return   * List<String>   * @throws   * @author Wanghao    */   String ltrim(String key, int start, int end);   /**    * 返回名称为key的list中index位置的元素   * @Title: lindex   * @param key   * @param index   * @return   * String   * @throws   * @author Wanghao    */   String lindex(String key, long index);   /**    * 给名称为key的list中index位置的元素赋值   * @Title: lset   * @param key   * @param index   * @param value   * @return   * String   * @throws   * @author Wanghao    */   String lset(String key, int index, String value);   /**    * 删除count个key的list中值为value的元素   * @Title: lrem   * @param key   * @param count   * @param value   * @return   * long   * @throws   * @author Wanghao    */   long lrem(String key,int count, String value);   /**    * 返回并删除名称为key的list中的首元素   * @Title: lpop   * @param key   * @return   * String   * @throws   * @author Wanghao    */   String lpop(String key);   /**    * 返回并删除名称为key的list中的尾元素   * @Title: lpop   * @param key   * @return   * String   * @throws   * @author Wanghao    */   String rpop(String key);   /**    * 返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部   * @Title: rpoplpush   * @param srckey   * @param dstkey   * @return   * String   * @throws   * @author Wanghao    */   String rpoplpush(String srckey, String dstkey);   //########################### SET ############################################   /**    * 向名称为key的set中添加元素member   * @Title: sadd   * @param key   * @param member   * @return   * String   * @throws   * @author Wanghao    */   Long sadd(String key,String... members);   /**    * 删除名称为key的set中的元素member   * @Title: srem   * @param key   * @param member   * @return   * Long   * @throws   * @author Wanghao    */   Long srem(String key, String... members);   /**    * 随机返回并删除名称为key的set中一个元素   * @Title: spop   * @param key   * @return   * String   * @throws   * @author Wanghao    */   String spop(String key);   /**    * member元素从srckey集合移到dstkey集合 。member 元素从 source 集合中被移除,并添加到 destination 集合中去   * @Title: smove   * @param srckey   * @param dstkey   * @param member   * @return   * String   * @throws   * @author Wanghao    */   Long smove(String srckey, String dstkey, String member);   /**    * 返回名称为key的set的基数   * @Title: scard   * @param key   * @return   * Long   * @throws   * @author Wanghao    */   Long scard(String key);   /**    * member是否是名称为key的set的元素   * @Title: sismember   * @param key   * @param member   * @return   * Boolean   * @throws   * @author Wanghao    */   Boolean sismember(String key, String member);   /**    * 求交集   * @Title: sinter   * @param keys   * @return   * List<String>   * @throws   * @author Wanghao    */   Set<String> sinter(String...keys);   /**    * 求交集并将交集保存到dstkey的集合   * @Title: sinterstore   * @param dstkey   * @param keys   * @return   * String   * @throws   * @author Wanghao    */   Long sinterstore(String dstkey, String... keys);   /**    * 求并集   * @Title: sunion   * @param keys   * @return   * List<String>   * @throws   * @author Wanghao    */   Set<String> sunion(String... keys);   /**    * 求并集并将并集保存到dstkey的集合   * @Title: sunionstore   * @param dstkey   * @param keys   * @return   * String   * @throws   * @author Wanghao    */   Long sunionstore(String dstkey, String... keys);   /**    * 求差集   * @Title: sdiff   * @param keys   * @return   * Set<String>   * @throws   * @author Wanghao    */   Set<String> sdiff(String... keys);   /**    * 求差集并将差集保存到dstkey的集合   * @Title: sdiffstore   * @param dstkey   * @param keys   * @return   * String   * @throws   * @author Wanghao    */   Long sdiffstore(String dstkey, String... keys);   /**    * 返回名称为key的set的所有元素   * @Title: smembers   * @param key   * @return   * Set<String>   * @throws   * @author Wanghao    */   Set<String> smembers(String key);   /**    * 随机返回名称为key的set的一个元素   * @Title: srandmember   * @param key   * @return   * String   * @throws   * @author Wanghao    */   String srandmember(String key);   //########################### Hash ####################################}

JedisClientSingle

package com.wangh.dao;import java.util.List;import java.util.Set;import org.springframework.beans.factory.annotation.Autowired;import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;public class JedisClientSingle implements JedisClient{     @Autowired       private JedisPool jedisPool;    @Override    public String get(String key) {        Jedis jedis = jedisPool.getResource();          String string = jedis.get(key);          jedis.close();          return string;      }    @Override    public byte[] get(byte[] key) {        Jedis jedis = jedisPool.getResource();          byte[] result = jedis.get(key);          jedis.close();          return result;     }    @Override    public String set(String key, String value) {        Jedis jedis = jedisPool.getResource();          String string = jedis.set(key, value);          jedis.close();          return string;      }    @Override    public String set(byte[] key, byte[] value) {        Jedis jedis = jedisPool.getResource();          String result = jedis.set(key, value);          jedis.close();          return result;      }    @Override    public String hget(String hkey, String key) {        Jedis jedis = jedisPool.getResource();          String string = jedis.hget(hkey, key);          jedis.close();          return string;      }    @Override    public long hset(String hkey, String key, String value) {        Jedis jedis = jedisPool.getResource();          Long result = jedis.hset(hkey, key, value);          jedis.close();          return result;      }    @Override    public long incr(String key) {        Jedis jedis = jedisPool.getResource();          Long result = jedis.incr(key);          jedis.close();          return result;      }    @Override    public long expire(String key, int second) {        Jedis jedis = jedisPool.getResource();          Long result = jedis.expire(key, second);          jedis.close();          return result;     }    @Override    public long ttl(String key) {        Jedis jedis = jedisPool.getResource();          Long result = jedis.ttl(key);          jedis.close();          return result;      }    @Override    public long del(String key) {        Jedis jedis = jedisPool.getResource();          Long result = jedis.del(key);          jedis.close();          return result;      }    @Override    public long mdel(String... key) {        Jedis jedis = jedisPool.getResource();          Long result = jedis.del(key);          jedis.close();          return result;      }    @Override    public long hdel(String hkey, String key) {        Jedis jedis = jedisPool.getResource();          Long result = jedis.hdel(hkey, key);          jedis.close();          return result;     }    @Override    public Set<String> getAll() {        Jedis jedis = jedisPool.getResource();        Set<String> keys = jedis.keys("*");        jedis.close();         return keys;    }    @Override    public boolean isExists(String key) {        Jedis jedis = jedisPool.getResource();        boolean b = jedis.exists(key);        jedis.close();         return b;    }    @Override    public String type(String key) {        Jedis jedis = jedisPool.getResource();        String type = jedis.type(key);        jedis.close();         return type;    }    @Override    public String keyrename(String oldname, String newname) {        Jedis jedis = jedisPool.getResource();        String name = jedis.rename(oldname, newname);        jedis.close();         return name;    }    @Override    public long dbsize() {        Jedis jedis = jedisPool.getResource();        long size = jedis.dbSize();        jedis.close();         return size;    }    @Override    public String select(int index) {        Jedis jedis = jedisPool.getResource();        String key = jedis.select(index);        jedis.close();         return key;    }    @Override    public String flushdb() {        Jedis jedis = jedisPool.getResource();        String flush = jedis.flushDB();        jedis.close();         return flush;    }    @Override    public String flushall() {        Jedis jedis = jedisPool.getResource();        String flush = jedis.flushAll();        jedis.close();         return flush;    }    @Override    public List<String> mget(String... keys) {        Jedis jedis = jedisPool.getResource();        List<String> values = jedis.mget(keys);        jedis.close();         return values;    }    @Override    public String mset(String... keys) {        Jedis jedis = jedisPool.getResource();        String s = jedis.mset(keys);        jedis.close();         return s;    }    @Override    public long setnx(String key, String value) {        Jedis jedis = jedisPool.getResource();        long l = jedis.setnx(key, value);        jedis.close();         return l;    }    @Override    public long incrby(String key, int integer) {        Jedis jedis = jedisPool.getResource();        long l = jedis.incrBy(key, integer);        jedis.close();         return l;    }    @Override    public long decr(String key) {        Jedis jedis = jedisPool.getResource();        long l = jedis.decr(key);        jedis.close();         return l;    }    @Override    public long decrby(String key, int integer) {        Jedis jedis = jedisPool.getResource();        long l = jedis.decrBy(key, integer);        jedis.close();         return l;    }    @Override    public long append(String key, String value) {        Jedis jedis = jedisPool.getResource();        long l = jedis.append(key, value);        jedis.close();         return l;    }    @Override    public String substr(String key, int start, int end) {        Jedis jedis = jedisPool.getResource();        String s = jedis.substr(key, start, end);        jedis.close();         return s;    }    @Override    public long lpush(String key, String value) {        Jedis jedis = jedisPool.getResource();        long l = jedis.lpush(key, value);        jedis.close();         return l;    }    @Override    public long rpush(String key, String value) {        Jedis jedis = jedisPool.getResource();        long l = jedis.rpush(key, value);        jedis.close();         return l;    }    @Override    public long llen(String key) {        Jedis jedis = jedisPool.getResource();        long len = jedis.llen(key);        jedis.close();         return len;    }    @Override    public List<String> lrange(String key, int start, int end) {        Jedis jedis = jedisPool.getResource();        List<String> list = jedis.lrange(key, start, end);        jedis.close();         return list;    }    @Override    public String ltrim(String key, int start, int end) {        Jedis jedis = jedisPool.getResource();        String s = jedis.ltrim(key, start, end);        jedis.close();         return s;    }    @Override    public String lindex(String key, long index) {        Jedis jedis = jedisPool.getResource();        String s = jedis.lindex(key, index);        jedis.close();         return s;    }    @Override    public String lset(String key, int index, String value) {        Jedis jedis = jedisPool.getResource();        String s = jedis.lset(key, index, value);        jedis.close();         return s;    }    @Override    public long lrem(String key, int count, String value) {        Jedis jedis = jedisPool.getResource();        Long l = jedis.lrem(key, count, value);        jedis.close();         return l;    }    @Override    public String lpop(String key) {        Jedis jedis = jedisPool.getResource();        String s = jedis.lpop(key);        jedis.close();         return s;    }    @Override    public String rpop(String key) {        Jedis jedis = jedisPool.getResource();        String s = jedis.rpop(key);        jedis.close();         return s;    }    @Override    public String rpoplpush(String srckey, String dstkey) {        Jedis jedis = jedisPool.getResource();        String s = jedis.rpoplpush(srckey, dstkey);        jedis.close();         return s;    }    @Override    public Long sadd(String key, String... member) {        Jedis jedis = jedisPool.getResource();        Long l = jedis.sadd(key, member);        jedis.close();         return l;    }    @Override    public Long srem(String key, String... members) {        Jedis jedis = jedisPool.getResource();        Long l = jedis.srem(key, members);        jedis.close();         return l;    }    @Override    public String spop(String key) {        Jedis jedis = jedisPool.getResource();        String s = jedis.spop(key);        jedis.close();         return s;    }    @Override    public Long smove(String srckey, String dstkey, String member) {        Jedis jedis = jedisPool.getResource();        Long l = jedis.smove(srckey, dstkey, member);        jedis.close();         return l;    }    @Override    public Long scard(String key) {        Jedis jedis = jedisPool.getResource();        Long l = jedis.scard(key);        jedis.close();         return l;    }    @Override    public Boolean sismember(String key, String member) {        Jedis jedis = jedisPool.getResource();        Boolean b = jedis.sismember(key, member);        jedis.close();         return b;    }    @Override    public Set<String> sinter(String... keys) {        Jedis jedis = jedisPool.getResource();        Set<String> sets = jedis.sinter(keys);        jedis.close();         return sets;    }    @Override    public Long sinterstore(String dstkey, String... keys) {        Jedis jedis = jedisPool.getResource();        Long l = jedis.sinterstore(dstkey, keys);        jedis.close();         return l;    }    @Override    public Set<String> sunion(String... keys) {        Jedis jedis = jedisPool.getResource();        Set<String> sets = jedis.sunion(keys);        jedis.close();         return sets;    }    @Override    public Long sunionstore(String dstkey, String... keys) {        Jedis jedis = jedisPool.getResource();        Long l = jedis.sunionstore(dstkey, keys);        jedis.close();         return l;    }    @Override    public Set<String> sdiff(String... keys) {        Jedis jedis = jedisPool.getResource();        Set<String> sets = jedis.sdiff(keys);        jedis.close();         return sets;    }    @Override    public Long sdiffstore(String dstkey, String... keys) {        Jedis jedis = jedisPool.getResource();        Long l = jedis.sdiffstore(dstkey, keys);        jedis.close();         return l;    }    @Override    public Set<String> smembers(String key) {        Jedis jedis = jedisPool.getResource();        Set<String> sets = jedis.smembers(key);        jedis.close();         return sets;    }    @Override    public String srandmember(String key) {        Jedis jedis = jedisPool.getResource();        String s = jedis.srandmember(key);        jedis.close();         return s;    }}

AddService

package com.wangh.service;import java.util.Set;public interface AddService {    public String setName(String key,String value);    public String getName(String key);    public long del(String key);    public String incr(String key,String value);    public Set<String> getAllKeys();}

AddServiceImpl

package com.wangh.service.impl;import java.util.Set;import javax.annotation.Resource;import com.wangh.dao.JedisClientSingle;import com.wangh.service.AddService;import com.wangh.util.RedisCache;public class AddServiceImpl implements AddService {    @Resource    private JedisClientSingle jedisClientSingle;    @Override    @RedisCache(type = String.class, expire = 200000000)    public String setName( String key,  String value) {        return jedisClientSingle.set(key, value);    }    @Override    public String getName(final String x) {        return jedisClientSingle.get(x);    }    @Override    public long del(String key) {        long l = jedisClientSingle.del(key);        return l;    }    @Override    public String incr(String key, String value) {        long l = jedisClientSingle.incr(key);        return String.valueOf(l);    }    @Override    public Set<String> getAllKeys() {        Set<String> keys = jedisClientSingle.getAll();        return keys;    }}

RedisTest

package com.wangh.main;import java.util.Iterator;import java.util.List;import java.util.Set;import javax.annotation.Resource;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.wangh.dao.JedisClientSingle;import com.wangh.service.AddService;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:spring.xml")public class RedisTest {    @Resource    private AddService addService;    @Resource    private JedisClientSingle jedisClientSingle;    @Test    public void getTest() {        String aa = addService.setName("c","d");        System.out.println(addService.getName("c")+"--"+aa);        long a = addService.del("c");        System.out.println(a);        Set<String>  keys = addService.getAllKeys();        for(String key :keys){            System.out.println(key);        }    }    //String类型    @Test    public void test2(){        jedisClientSingle.set("name", "wangh");        jedisClientSingle.set("age", "18");        jedisClientSingle.set("sex", "man");        jedisClientSingle.set("addr", "man");        long size = jedisClientSingle.dbsize();        System.out.println("key数量:"+size);        Iterator<String> its = jedisClientSingle.getAll().iterator();        while(its.hasNext()){            System.out.println("key:"+its.next());        }        long age = jedisClientSingle.decr("age");        System.out.println("age:"+age);        long d = jedisClientSingle.mdel("java.lang.String","a","v");        System.out.println("mdel:"+d);        long addr = jedisClientSingle.expire("addr", 100000);        System.out.println("addr:"+addr);        long ttl = jedisClientSingle.ttl("addr");        System.out.println("ttl:"+ttl);        //String nname = jedisClientSingle.keyrename("addr", "address");        //System.out.println(nname);    }    //List 类型    @Test    public void test3(){        jedisClientSingle.lpush("list", "1");        jedisClientSingle.lpush("list", "2");        jedisClientSingle.lpush("list", "3");        jedisClientSingle.lpush("list", "1");        long l = jedisClientSingle.llen("list");        System.out.println("长度:"+l);        List<String> lists = jedisClientSingle.lrange("list", 0, -1);        for(String elem:lists){            System.out.println("list中值:"+elem);        }        String four = jedisClientSingle.lset("list", 3, "4");        System.out.println("第四个值改为:"+four);        jedisClientSingle.rpush("list1", "1");        jedisClientSingle.rpush("list1", "2");        jedisClientSingle.rpush("list1", "3");        List<String> lists1 = jedisClientSingle.lrange("list1", 0, -1);        for(String elem:lists1){            System.out.println("list1中值:"+elem);        }        long rem = jedisClientSingle.lrem("list1", 2, "1");        System.out.println("rem:"+rem);    }    //SET     @Test    public void test4(){        jedisClientSingle.sadd("set", "1","2","3","1");        long l = jedisClientSingle.scard("set");        System.out.println("基数:"+l);        Iterator<String> its = jedisClientSingle.smembers("set").iterator();        while(its.hasNext()){            System.out.println("值为:"+its.next());        }        boolean b = jedisClientSingle.sismember("set", "1");        System.out.println(b);        long ll = jedisClientSingle.smove("set", "set1", "1");        System.out.println(ll);        Iterator<String> its1 = jedisClientSingle.smembers("set1").iterator();        while(its1.hasNext()){            System.out.println("set1值为:"+its1.next());        }        Iterator<String> its2 = jedisClientSingle.smembers("set").iterator();        while(its2.hasNext()){            System.out.println("值为:"+its2.next());        }    }}

常用命令

1)连接操作命令quit:关闭连接(connection)auth:简单密码认证help cmd: 查看cmd帮助,例如:help quit2)持久化save:将数据同步保存到磁盘bgsave:将数据异步保存到磁盘lastsave:返回上次成功将数据保存到磁盘的Unix时戳shundown:将数据同步保存到磁盘,然后关闭服务3)远程服务控制info:提供服务器的信息和统计monitor:实时转储收到的请求slaveof:改变复制策略设置config:在运行时配置Redis服务器4)对value操作的命令exists(key):确认一个key是否存在del(key):删除一个keytype(key):返回值的类型keys(pattern):返回满足给定pattern的所有keyrandomkey:随机返回key空间的一个keyrename(oldname, newname):重命名keydbsize:返回当前数据库中key的数目expire:设定一个key的活动时间(s)ttl:获得一个key的活动时间select(index):按索引查询move(key, dbindex):移动当前数据库中的key到dbindex数据库flushdb:删除当前选择数据库中的所有keyflushall:删除所有数据库中的所有key5)Stringset(key, value):给数据库中名称为key的string赋予值valueget(key):返回数据库中名称为key的string的valuegetset(key, value):给名称为key的string赋予上一次的valuemget(key1, key2,…, key N):返回库中多个string的valuesetnx(key, value):添加string,名称为key,值为valuesetex(key, time, value):向库中添加string,设定过期时间timemset(key N, value N):批量设置多个string的值msetnx(key N, value N):如果所有名称为key i的string都不存在incr(key):名称为key的string增1操作incrby(key, integer):名称为key的string增加integerdecr(key):名称为key的string减1操作decrby(key, integer):名称为key的string减少integerappend(key, value):名称为key的string的值附加valuesubstr(key, start, end):返回名称为key的string的value的子串6)List rpush(key, value):在名称为key的list尾添加一个值为value的元素lpush(key, value):在名称为key的list头添加一个值为value的 元素llen(key):返回名称为key的list的长度lrange(key, start, end):返回名称为key的list中start至end之间的元素ltrim(key, start, end):截取名称为key的listlindex(key, index):返回名称为key的list中index位置的元素lset(key, index, value):给名称为key的list中index位置的元素赋值lrem(key, count, value):删除count个key的list中值为value的元素lpop(key):返回并删除名称为key的list中的首元素rpop(key):返回并删除名称为key的list中的尾元素blpop(key1, key2,… key N, timeout):lpop命令的block版本。brpop(key1, key2,… key N, timeout):rpop的block版本。rpoplpush(srckey, dstkey):返回并删除名称为srckey的list的尾元素,

              并将该元素添加到名称为dstkey的list的头部

7)Setsadd(key, member):向名称为key的set中添加元素membersrem(key, member) :删除名称为key的set中的元素memberspop(key) :随机返回并删除名称为key的set中一个元素smove(srckey, dstkey, member) :移到集合元素scard(key) :返回名称为key的set的基数sismember(key, member) :member是否是名称为key的set的元素sinter(key1, key2,…key N) :求交集sinterstore(dstkey, (keys)) :求交集并将交集保存到dstkey的集合sunion(key1, (keys)) :求并集sunionstore(dstkey, (keys)) :求并集并将并集保存到dstkey的集合sdiff(key1, (keys)) :求差集sdiffstore(dstkey, (keys)) :求差集并将差集保存到dstkey的集合smembers(key) :返回名称为key的set的所有元素srandmember(key) :随机返回名称为key的set的一个元素8)Hashhset(key, field, value):向名称为key的hash中添加元素fieldhget(key, field):返回名称为key的hash中field对应的valuehmget(key, (fields)):返回名称为key的hash中field i对应的valuehmset(key, (fields)):向名称为key的hash中添加元素field hincrby(key, field, integer):将名称为key的hash中field的value增加integerhexists(key, field):名称为key的hash中是否存在键为field的域hdel(key, field):删除名称为key的hash中键为field的域hlen(key):返回名称为key的hash中元素个数hkeys(key):返回名称为key的hash中所有键hvals(key):返回名称为key的hash中所有键对应的valuehgetall(key):返回名称为key的hash中所有的键(field)及其对应的value
原创粉丝点击