zoukankan      html  css  js  c++  java
  • Spring使用Redis

    1.引入依赖

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-redis</artifactId>
        <version>2.1.9.RELEASE</version>
    </dependency>
    
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>3.1.0</version>
    </dependency>
    

    2.配置(applicationContext.xml)

    1.使用Spring配置JedisPoolConfig对象(连接池)

    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <!--最大空闲数-->
        <property name="maxIdle" value="50"/>
        <!--最大连接数-->
        <property name="maxTotal" value="100"/>
        <!--最大等待时间-->
        <property name="maxWaitMillis" value="20000"/>
    </bean>
    

    2.为连接池配置工厂模型

    <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <!--Redis服务地址-->
        <property name="hostName" value="localhost"/>
        <!--端口号-->
        <property name="port" value="6379"/>
        <!--如果有密码则需要配置密码-->
        <!--<property name="password" value="password"/>-->
        <!--连接池配置-->
        <property name="poolConfig" ref="poolConfig"/>
    </bean>
    

    3.配置RedisTemplate

    <bean id="redisTemplate"
          class="org.springframework.data.redis.core.RedisTemplate"
          p:connection-factory-ref="connectionFactory"/>
    </bean>
    

    注:普通的连接根本没有办法直接将对象直接存入 Redis 内存中,我们需要替代的方案:将对象序列化(可以简单的理解为继承Serializable接口)。我们可以把对象序列化之后存入Redis缓存中,然后在取出的时候又通过转换器,将序列化之后的对象反序列化回对象,所有需要POJO对象实现Serializable接口

    3.RedisTemplate基本使用

    StringRedisTemplate与RedisTemplate
    两者的关系是StringRedisTemplate继承RedisTemplate。
    两者的数据是不共通的:
    StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据。
    SDR默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略。
    StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。
    RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。

    1.redisTemplate.opsForValue().set("student_1", student);
    2.10秒后失效
    void set(K key, V value, long timeout, TimeUnit unit);
    redisTemplate.opsForValue().set("name","tom",10, TimeUnit.SECONDS);
    3.用 value 参数覆写(overwrite)给定 key 所储存的字符串值,从偏移量 offset 开始
    void set(K key, V value, long offset);

    使用:template.opsForValue().set("key","hello world");
          template.opsForValue().set("key","redis", 6);
          System.out.println(template.opsForValue().get("key"));
    结果:hello redis
    

    4.不存在才设置,设置成功返回true,失败返回false
    Boolean setIfAbsent(K key, V value);
    5.为多个键分别设置它们的值
    void multiSet(Map<? extends K, ? extends V> m);
    为多个键分别取出它们的值
    List<V> multiGet(Collection<K> keys);

            Map<String,String> maps = new HashMap<String, String>();
            maps.put("multi1","multi1");
            maps.put("multi2","multi2");
            maps.put("multi3","multi3");
            template.opsForValue().multiSet(maps);
    
            List<String> keys = new ArrayList<String>();
            keys.add("multi1");
            keys.add("multi2");
            keys.add("multi3");
            template.opsForValue().multiGet(keys);
    

    6.为多个键分别设置它们的值,如果存在则返回false,不存在返回true
    Boolean multiSetIfAbsent(Map<? extends K, ? extends V> m);
    7.设置键的字符串值并返回其旧值
    T getAndSet(K key, T value);
    8.如果key已经存在并且是一个字符串,则该命令将该值追加到字符串的末尾。
    如果键不存在,则它被创建并设置为空字符串并追加,因此APPEND在这种特殊情况下将类似于SET。
    Integer append(K key, String value);
    9.截取key所对应的value字符串
    String get(K key, long start, long end);

    使用:
    appendTest对应的value为Helloworld
    System.out.println("*********"+template.opsForValue().get("appendTest",0,5));
    结果:*********Hellow
    使用:System.out.println("*********"+template.opsForValue().get("appendTest",0,-1));
    结果:*********Helloworld
    使用:System.out.println("*********"+template.opsForValue().get("appendTest",-3,-1));
    结果:*********rld
    

    10.返回key所对应的value值得长度
    Long size(K key);
    11.删除key对应的键值对
    redisTemplate.opsForValue().getOperations().delete("key");

    注:详情参见https://blog.csdn.net/ruby_one/article/details/79141940

  • 相关阅读:
    搭建非域AlwaysOn win2016+SQL2016
    从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)
    从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)
    从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)
    从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)
    四、基于Windows 2012配置SQL Server 2014 AlwaysOn
    三、安装SQLserver 2014(For AlwaysOn)
    二、 Windows 2012配置故障转移(For SQLServer 2014 AlwaysOn)
    Mybatis-SQL语句构建器类及日志
    Mybatis-JavaAPI
  • 原文地址:https://www.cnblogs.com/loveer/p/11316279.html
Copyright © 2011-2022 走看看