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

  • 相关阅读:
    常用dos命令
    反射
    干货|技术小白如何在45分钟内发行通证(TOKEN)并上线交易(附流程代码
    基于以太坊发布属于自己的数字货币(代币)完整版
    基于以太坊实现代币发布
    FTRL的理解
    FM-分解机模型详解
    深度学习总结
    DIN
    git上传新项目
  • 原文地址:https://www.cnblogs.com/loveer/p/11316279.html
Copyright © 2011-2022 走看看