zoukankan      html  css  js  c++  java
  • SpringDataRedis操作Redis简单案例

    Jedis

      Jedis是Redis官方推出的一款面向Java的客户端,提供了很多接口供Java语言调用。可以在Redis官网下载,当然还有一些开源爱好者提供的客户端,如Jredis、SRP等等,推荐使用Jedis。

    Spring Data Redis

      spring-data-redis是spring大家族的一部分,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了redis各种操作、异常处理及序列化,支持发布订阅,并对spring 3.1 cache进行了实现。

    spring-data-redis针对jedis提供了如下功能:

    1. 连接池自动管理,提供了一个高度封装的“RedisTemplate”类

    2. 针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口

      • ValueOperations:简单K-V操作

      • SetOperations:set类型数据操作

      • ZSetOperations:zset类型数据操作

      • HashOperations:针对map类型的数据操作

      • ListOperations:针对list类型的数据操作

    简单案例:

    pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    
    <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">
        <parent>
            <artifactId>parent_demo</artifactId>
            <groupId>cn.zy.demo</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>spring_data_redis_demo</artifactId>
    
        <!-- 集中定义依赖版本号 -->
        <properties>
            <spring.version>4.2.4.RELEASE</spring.version>
        </properties>
    
        <dependencies>
            <!-- Spring -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jms</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.9</version>
            </dependency>
    
            <!-- redis做缓存 -->
            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
                <version>2.8.1</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.data</groupId>
                <artifactId>spring-data-redis</artifactId>
                <version>1.7.2.RELEASE</version>
            </dependency>
    
        </dependencies>
    
        <build>
            <plugins>
                <!-- java编译插件 -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.2</version>
                    <configuration>
                        <source>1.7</source>
                        <target>1.7</target>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
    
            </plugins>
    
        </build>
    </project>

    resources文件:

    redis-config.properties

    # Redis settings 
    # 服务器 IP
    redis.host=192.168.44.32
    # 端口
    redis.port=6379
    # 密码
    redis.pass=
    # 使用的dbIndex
    redis.database=0
    # 最大空闲数
    redis.maxIdle=300
    # 连接时的最大等待毫秒数
    redis.maxWait=3000
    # 在提取一个jedis实例时,是否提前进行验证操作;如果为true,则得到的jedis实例均是可用的;
    redis.testOnBorrow=true

    applicationContext-redis.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:p="http://www.springframework.org/schema/p"
           xmlns:context="http://www.springframework.org/schema/context"
           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*:properties/*.properties"/>
    
        <!-- redis 相关配置 -->
        <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
            <property name="maxIdle" value="${redis.maxIdle}"/>
            <property name="maxWaitMillis" value="${redis.maxWait}"/>
            <property name="testOnBorrow" value="${redis.testOnBorrow}"/>
        </bean>
    
        <bean id="JedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
              p:host-name="${redis.host}" p:port="${redis.port}" p:password="${redis.pass}" p:database="${redis.database}"
              p:pool-config-ref="poolConfig"/>
    
        <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
            <property name="connectionFactory" ref="JedisConnectionFactory"/>
        </bean>
    
    </beans>

    连接Redis-Cluster的配置文件

    <?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" 
      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 ignore-unresolvable="true" location="classpath:properties/redis-cluster-config.properties" />  
    <bean id="redis-clusterConfiguration" class="org.springframework.data.redis.connection.redis-clusterConfiguration">  
        <property name="maxRedirects" value="${redis.maxRedirects}"></property>  
        <property name="clusterNodes">  
        <set>  
            <bean class="org.springframework.data.redis.connection.redis-clusterNode">  
                <constructor-arg name="host" value="${redis.host1}"></constructor-arg>  
                <constructor-arg name="port" value="${redis.port1}"></constructor-arg>  
            </bean>  
            <bean class="org.springframework.data.redis.connection.redis-clusterNode">  
                <constructor-arg name="host" value="${redis.host2}"></constructor-arg>  
                <constructor-arg name="port" value="${redis.port2}"></constructor-arg>  
            </bean>  
            <bean class="org.springframework.data.redis.connection.redis-clusterNode">  
                <constructor-arg name="host" value="${redis.host3}"></constructor-arg>  
                <constructor-arg name="port" value="${redis.port3}"></constructor-arg>  
            </bean>  
             <bean class="org.springframework.data.redis.connection.redis-clusterNode">  
                 <constructor-arg name="host" value="${redis.host4}"></constructor-arg>  
                 <constructor-arg name="port" value="${redis.port4}"></constructor-arg>  
              </bean>  
              <bean class="org.springframework.data.redis.connection.redis-clusterNode">  
                 <constructor-arg name="host" value="${redis.host5}"></constructor-arg>  
                 <constructor-arg name="port" value="${redis.port5}"></constructor-arg>  
              </bean>  
             <bean class="org.springframework.data.redis.connection.redis-clusterNode">  
                <constructor-arg name="host" value="${redis.host6}"></constructor-arg>  
                <constructor-arg name="port" value="${redis.port6}"></constructor-arg>  
             </bean>  
           </set>  
         </property>  
    </bean>  
    <bean id="jedisPoolConfig"   class="redis.clients.jedis.JedisPoolConfig">  
           <property name="maxIdle" value="${redis.maxIdle}" />   
           <property name="maxTotal" value="${redis.maxTotal}" />   
    </bean>  
    <bean id="jeidsConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"  >  
            <constructor-arg ref="redis-clusterConfiguration" />  
            <constructor-arg ref="jedisPoolConfig" />  
    </bean>    
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">  
            <property name="connectionFactory" ref="jeidsConnectionFactory" />  
    </bean>  
    </beans>

    redis-cluster-config.properties

    #cluster configuration
    redis.host1=192.168.25.140
    redis.port1=7001
    
    redis.host2=192.168.25.140
    redis.port2=7002
    
    redis.host3=192.168.25.140
    redis.port3=7003
    
    redis.host4=192.168.25.140
    redis.port4=7004
    
    redis.host5=192.168.25.140
    redis.port5=7005
    
    redis.host6=192.168.25.140
    redis.port6=7006
    
    redis.maxRedirects=3
    redis.maxIdle=100
    redis.maxTotal=600

    测试:

    /**
    * 值类型操作
    */
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = "classpath:spring/applicationContext-redis.xml")
    public class TestValue {
    
        @Autowired
        private RedisTemplate redisTemplate;
    
        @Test
        public void setValue() throws Exception {
            redisTemplate.opsForValue().set("name", "tom");
            redisTemplate.boundValueOps("age").set("22", 10, TimeUnit.SECONDS);//带过期时间的
        }
    
        @Test
        public void getValue() throws Exception {
            String age = (String) redisTemplate.opsForValue().get("age");
            String name = (String) redisTemplate.boundValueOps("name").get();
            System.out.println(name);
        }
    
        @Test
        public void delete() throws Exception {
            redisTemplate.delete("name");
        }
    }
    /**
    * set类型操作
    *@Param
    *@return
    */
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = "classpath:spring/applicationContext-redis.xml")
    public class TestSet {
        @Autowired
        private RedisTemplate redisTemplate;
        //set1:['','']
        @Test
        public void setValue() throws Exception {
            redisTemplate.boundSetOps("set1").add("刘备");
            redisTemplate.boundSetOps("set1").add("曹操");
            redisTemplate.boundSetOps("set1").add("孙权");
        }
    
        @Test
        public void getValue() throws Exception {
            Set set = redisTemplate.boundSetOps("set1").members();
            System.out.println(set);
        }
    
        @Test
        public void remove() throws Exception {
            redisTemplate.boundSetOps("set1").remove("曹操");
        }
    
        @Test
        public void delete() throws Exception {
            redisTemplate.delete("set1");
        }
    }
    /**
    * list类型操作
    */
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = "classpath:spring/applicationContext-redis.xml")
    public class TestList {
        @Autowired
        private RedisTemplate redisTemplate;
    
        // list1 : []
    
        @Test
        public void setValue1() throws Exception {
            redisTemplate.boundListOps("list1").leftPush("唐僧");
            redisTemplate.boundListOps("list1").leftPush("悟空");
            redisTemplate.boundListOps("list1").leftPush("八戒");
            redisTemplate.boundListOps("list1").leftPush("沙僧");
        }
    
        @Test
        public void getValue1() throws Exception {
            List list = redisTemplate.boundListOps("list1").range(0, 10);
            System.out.println(list);
        }
    
        @Test
        public void setValue2() throws Exception {
            redisTemplate.boundListOps("list2").rightPush("大乔");
            redisTemplate.boundListOps("list2").rightPush("小乔");
            redisTemplate.boundListOps("list2").rightPush("孙尚香");
        }
    
        @Test
        public void getValue2() throws Exception {
            List list = redisTemplate.boundListOps("list2").range(0, 10);
            System.out.println(list);
        }
    
        @Test
        public void getByIndex() throws Exception {
            String name = (String) redisTemplate.boundListOps("list1").index(1);
            System.out.println(name);
        }
    
        @Test
        public void remove() throws Exception {
            redisTemplate.boundListOps("list1").remove(2,"八戒");
        }
    
    
    }
    /**
    * hash类型操作
    */
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = "classpath:spring/applicationContext-redis.xml")
    public class TestHash {
        @Autowired
        private RedisTemplate redisTemplate;
        //specList:{key:value}
    
        @Test
        public void setValue() throws Exception {
            redisTemplate.boundHashOps("map1").put("a","刘备");
            redisTemplate.boundHashOps("map1").put("b","关羽");
            redisTemplate.boundHashOps("map1").put("c","张飞");
        }
    
        @Test
        public void getKeys() throws Exception {
            Set set = redisTemplate.boundHashOps("map1").keys();
            System.out.println(set);
        }
    
        @Test
        public void getValues() throws Exception {
            List list = redisTemplate.boundHashOps("map1").values();
            System.out.println(list);
        }
    
        @Test
        public void getValue() throws Exception {
            String name = (String) redisTemplate.boundHashOps("map1").get("b");
            System.out.println(name);
        }
    
        @Test
        public void remove() throws Exception {
            redisTemplate.boundHashOps("map1").delete("c");
        }
    
        @Test
        public void delete() throws Exception {
            redisTemplate.delete("map1");
        }
    }
  • 相关阅读:
    001-读书笔记-企业IT架构转型之道-阿里巴巴中台战略思想与架构实战-第一章 阿里巴巴集团中台战略引发的思考
    java-mybaits-011-mybatis-Interceptor-拦截器原理、统一赋值、计算耗时
    007-Redi-命令-脚本命令、链接命令、服务器命令、事务、HyperLogLog
    006-Redis 发布订阅
    005-redis-命令-4、无序集合,5、有序集合
    004-redis-命令-2、哈希操作命令,3、列表操作命令
    Ubuntu Server 14.04 --secure-file-priv error in MySql 解决方案
    Mysql Sql语句令某字段值等于原值加上一个字符串
    hdu 1281 二分图最大匹配
    hdu1045 DFS
  • 原文地址:https://www.cnblogs.com/blazeZzz/p/9513781.html
Copyright © 2011-2022 走看看