zoukankan      html  css  js  c++  java
  • SpringDataRedis的简单入门

    Jedis

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

    SpringDataRedis

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

    SpringDataRedis针对Jedis提供了如下功能:

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

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

    ValueIoerations:简单K-V操作

    SetIOperations:set类型数据操作.

    ZSetOperations:zset类型数据操作

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

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

    SpringDataRedis入门小Demo

    4.5.1准备工作

    构建Maven工程  SpringDataRedisDemo   jar工程

    引入Spring相关依赖、引入JUnit依赖   (内容参加其它工程)

    引入Jedis和SpringDataRedis依赖

    <!-- Spring -->
     <dependencies>
         <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>
        <!-- 缓存 -->
        <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>

    在src/main/resources下创建properties文件夹,建立redis-config.properties

    redis.host=127.0.0.1
    redis.port=6379
    redis.pass=
    redis.database=0
    redis.maxIdle=300
    redis.maxWait=3000
    redis.testOnBorrow=true

    在src/main/resources下创建spring文件夹 ,创建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"
        xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
            http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.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:pool-config-ref="poolConfig"/>  
       
       <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">  
         <property name="connectionFactory" ref="JedisConnectionFactory" />  
       </bean>  
    </beans>

    maxIdle :最大空闲数

    maxWaitMillis:连接时的最大等待毫秒数

    testOnBorrow:在提取一个jedis实例时,是否提前进行验证操作;如果为true,则得到的jedis实例均是可用的;

    值类型操作

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations="classpath:spring/applicationContext-redis.xml")
    public class TestValue {
        @Autowired
        private RedisTemplate redisTemplate;    
        @Test
        public void setValue(){
            redisTemplate.boundValueOps("name").set("qingmu");        
        }    
        @Test
        public void getValue(){
            String str = (String) redisTemplate.boundValueOps("name").get();
            System.out.println(str);
        }    
        @Test
        public void deleteValue(){
            redisTemplate.delete("name");;
        }    
    }

     Set类型操作

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations="classpath:spring/applicationContext-redis.xml")
    public class TestSet {
        
        @Autowired
        private RedisTemplate redisTemplate;
        
        /**
         * 存入值
         */
        @Test
        public void setValue(){
            redisTemplate.boundSetOps("nameset").add("曹操");        
            redisTemplate.boundSetOps("nameset").add("刘备");    
            redisTemplate.boundSetOps("nameset").add("孙权");
        }
        
        /**
         * 提取值
         */
        @Test
        public void getValue(){
            Set members = redisTemplate.boundSetOps("nameset").members();
            System.out.println(members);
        }
        
        /**
         * 删除集合中的某一个值
         */
        @Test
        public void deleteValue(){
            redisTemplate.boundSetOps("nameset").remove("孙权");
        }
        
        /**
         * 删除整个集合
         */
        @Test
        public void deleteAllValue(){
            redisTemplate.delete("nameset");
        }
    }

     List类型操作

    创建测试类TestList

    (1)右压栈

    /**
         * 右压栈:后添加的对象排在后边
         */
        @Test
        public void testSetValue1(){        
            redisTemplate.boundListOps("namelist1").rightPush("刘备");
            redisTemplate.boundListOps("namelist1").rightPush("关羽");
            redisTemplate.boundListOps("namelist1").rightPush("张飞");        
        }
        
        /**
         * 显示右压栈集合
         */
        @Test
        public void testGetValue1(){
            List list = redisTemplate.boundListOps("namelist1").range(0, 10);
            System.out.println(list);
        }

    运行结果:

    [刘备, 关羽, 张飞]

    (2)左压栈

        /**
         * 左压栈:后添加的对象排在前边
         */
        @Test
        public void testSetValue2(){        
            redisTemplate.boundListOps("namelist2").leftPush("刘备");
            redisTemplate.boundListOps("namelist2").leftPush("关羽");
            redisTemplate.boundListOps("namelist2").leftPush("张飞");        
        }
        
        /**
         * 显示左压栈集合
         */
        @Test
        public void testGetValue2(){
            List list = redisTemplate.boundListOps("namelist2").range(0, 10);
            System.out.println(list);
        }

    运行结果:

    [张飞, 关羽, 刘备]

    (3)根据索引查询元素

        /**
         * 查询集合某个元素
         */
        @Test
        public void testSearchByIndex(){
            String s = (String) redisTemplate.boundListOps("namelist1").index(1);
            System.out.println(s);
        }

    (4)移除某个元素的值

        /**
         * 移除集合某个元素
         */
        @Test
        public void testRemoveByIndex(){
            redisTemplate.boundListOps("namelist1").remove(1, "关羽");
        }

     Hash类型操作

    创建测试类TestHash

    (1)存入值

        @Test
        public void testSetValue(){
            redisTemplate.boundHashOps("namehash").put("a", "唐僧");
            redisTemplate.boundHashOps("namehash").put("b", "悟空");
            redisTemplate.boundHashOps("namehash").put("c", "八戒");
            redisTemplate.boundHashOps("namehash").put("d", "沙僧");
        }

    2)提取所有的KEY

        @Test
        public void testGetKeys(){
            Set s = redisTemplate.boundHashOps("namehash").keys();        
            System.out.println(s);        
        }

    运行结果:

    [a, b, c, d]

    (3)提取所有的值

        @Test
        public void testGetValues(){
            List values = redisTemplate.boundHashOps("namehash").values();
            System.out.println(values);        
        }

    运行结果:

    [唐僧, 悟空, 八戒, 沙僧]

    4)根据KEY提取值

        @Test
        public void testGetValueByKey(){
            Object object = redisTemplate.boundHashOps("namehash").get("b");
            System.out.println(object);
        }

    运行结果:

    悟空

    5)根据KEY移除值

        @Test
        public void testRemoveValueByKey(){
            redisTemplate.boundHashOps("namehash").delete("c");
        }

    运行后再次查看集合内容:

    [唐僧, 悟空, 沙僧]

     

        @Test

        publicvoid testGetValues(){

            List values = redisTemplate.boundHashOps("namehash").values();

            System.out.println(values);    

        }

  • 相关阅读:
    grunt in webstorm
    10+ Best Responsive HTML5 AngularJS Templates
    响应式布局
    responsive grid
    responsive layout
    js event bubble and capturing
    Understanding Service Types
    To add private variable to this Javascript literal object
    Centering HTML elements larger than their parents
    java5 新特性
  • 原文地址:https://www.cnblogs.com/qingmuchuanqi48/p/11091323.html
Copyright © 2011-2022 走看看