秒懂Redis:Spring 整合 Redis

服务器命令:

  1. ping:测试连接是否存活
  2. echo:在命令行打印内容
  3. select:选择数据库
    1. redis 数据库编号从 0 ~ 15,我们可以选择任意一个数据库来进行存取数据
  4. quit:退出连接
  5. dbsize:返回当前数据库中的 key 的数量
  6. info:获取服务的信息和统计
  7. flushdb:删除当前所选库中所有 key
  8. flushall:清除所有数据中的所有 key

Spring 整合 Redis:

  1. pom文件:
    <build>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <configuration>
            <source>1.8</source>
            <target>1.8</target>
          </configuration>
        </plugin>
      </plugins>
    </build>
    
    <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <spring.version>4.1.7.RELEASE</spring.version>
      <jackson.version>2.5.0</jackson.version>
    </properties>
    
    <dependencies>
    
      <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>2.9.0</version>
      </dependency>
      <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-redis</artifactId>
        <version>1.6.0.RELEASE</version>
      </dependency>
    
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.3.2</version>
      </dependency>
      <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
      </dependency>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
      </dependency>
    
      <!-- spring -->
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</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-context</artifactId>
        <version>${spring.version}</version>
      </dependency>
    
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>${spring.version}</version>
      </dependency>
    
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</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-test</artifactId>
        <version>${spring.version}</version>
        <scope>test</scope>
      </dependency>
    
      <!-- mybatis 包 -->
    
    
      <!--mybatis spring 插件 -->
      <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>1.3.2</version>
      </dependency>
    
      <!-- mysql连接 -->
    
      <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.6</version>
      </dependency>
    
    
      <!-- 数据源 -->
      <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.0.12</version>
      </dependency>
    
      <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.8.4</version>
      </dependency>
    
      <!-- log4j -->
      <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
      </dependency>
    
      <!-- servlet -->
      <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>3.0-alpha-1</version>
        <scope>provided</scope>
      </dependency>
    
      <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
      </dependency>
    
      <!-- json -->
      <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>1.9.13</version>
      </dependency>
    
      <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.3</version>
      </dependency>
    
      <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>${jackson.version}</version>
      </dependency>
    
      <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>${jackson.version}</version>
      </dependency>
    
      <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>${jackson.version}</version>
      </dependency>
      <!-- 文件上传 -->
      <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.4</version>
      </dependency>
    
      <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.2.2</version>
      </dependency>
      <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.5</version>
      </dependency>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.21</version>
      </dependency>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.21</version>
      </dependency>
      <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>22.0</version>
      </dependency>
    
    </dependencies>
  2. 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:p="http://www.springframework.org/schema/p"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
                            http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    
        <context:component-scan base-package="com.qcby"></context:component-scan>
        <!-- redis 相关配置 -->
        <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
            <property name="maxIdle" value="300" />
            <property name="maxWaitMillis" value="300" />
            <property name="testOnBorrow" value="true" />
        </bean>
    
        <bean id="JedisConnectionFactory"
              class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
              p:host-name="62.234.35.76"
              p:port="6379"
              p:pool-config-ref="poolConfig"/>
    
        <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
            <property name="connectionFactory" ref="JedisConnectionFactory" />
        </bean>
    
    
    
    
    </beans>
  3. 实体类:
    package com.qcby.model;
    
    import java.io.Serializable;
    
    public class Account implements Serializable {
        private Integer id;
        private String name;
    
        public Account() {
        }
    
        public Account(Integer id, String name) {
            this.id = id;
            this.name = name;
        }
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        @Override
        public String toString() {
            return "Account{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    '}';
        }
    }
  4. 工具类:
    package com.qcby.util;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.data.redis.core.*;
    import org.springframework.stereotype.Service;
    
    import java.util.*;
    import java.util.concurrent.TimeUnit;
    
    @Service
    public class RedisCacheUtil {
        @Autowired
        @Qualifier("redisTemplate")     //指定注入对象的 id 值
        public RedisTemplate redisTemplate;
    
        /**
         * 缓存基本的对象 Integet  String 实体类等
         */
        public <T>ValueOperations<String,T> setCacheObject(String key,T value){
            ValueOperations<String,T> operations = redisTemplate.opsForValue();
    
            operations.set(key,value);
            return operations;
        }
    
        public <T>ValueOperations<String,T> setCacheObject(String key,T value,long time){
            ValueOperations<String,T> operations = redisTemplate.opsForValue();
            operations.set(key,value,time,TimeUnit.SECONDS);
            return operations;
        }
    
        /**
         * 获得缓存的基本对象
         */
        public <T> T getCacheObject(String key/*,ValueOperations<String,T> operation */){
            ValueOperations<String,T> operations = redisTemplate.opsForValue();
            return operations.get(key);
        }
    
        /**
         * 缓存 list 数据
         */
        public <T>ListOperations<String,T> setCacheList(String key, List<T> dataList){
            ListOperations listOperations = redisTemplate.opsForList();
            if( dataList != null){
                int size = dataList.size();
                for (int i = 0; i < size; i++) {
                    listOperations.rightPush(key,dataList.get(i));
                }
            }
            return listOperations;
        }
    
        /**
         * 获得缓存 list 对象
         */
        public <T> List<T> getCacheList(String key){
            List<T> dataList = new ArrayList<T>();
    
            ListOperations<String,T> listOperations = redisTemplate.opsForList();
    
            Long size = listOperations.size(key);
    
            for (int i = 0; i < size; i++) {
                dataList.add((T) listOperations.leftPop(key));
            }
    
            return dataList;
        }
    
        /**
         * 缓存set
         */
        public <T>BoundSetOperations<String,T> setCacheSet(String key, Set<T> dataSet){
            BoundSetOperations<String,T> setOperations = redisTemplate.boundSetOps(key);
    
            Iterator<T> it = dataSet.iterator();
    
            while (it.hasNext()){
                setOperations.add(it.next());
            }
    
            return setOperations;
        }
    
        /**
         * 获得缓存的 set
         */
        public <T> Set<T> getCacheSet(String key){
            Set<T> dataSet = new HashSet<T>();
    
            BoundSetOperations<String,T> operations = redisTemplate.boundSetOps(key);
    
            for (int i = 0; i < operations.size(); i++) {
                dataSet.add(operations.pop());
            }
            return dataSet;
        }
    
        /**
         * 缓存 Map
         */
        public <T> HashOperations<String,String,T> setCacheMap(String key,Map<String,T> dataMap){
            HashOperations hashOperations = redisTemplate.opsForHash();
            if(dataMap != null){
                for(Map.Entry<String,T> entry : dataMap.entrySet()){
                    hashOperations.put(key,entry.getKey(),entry.getValue());
                }
            }
            return hashOperations;
        }
    
        /**
         * 获得缓存的 Map
         */
        public <T> Map<String,T> getCacheMap(String key){
            Map<String,T> map = redisTemplate.opsForHash().entries(key);
            return map;
        }
    
        /**
         * 缓存 Map
         */
        public <T> HashOperations<String,Integer,T> setCacheIntegerMap(String key,Map<Integer,T> dataMap){
            HashOperations hashOperations = redisTemplate.opsForHash();
    
            if(hashOperations != null){
                for (Map.Entry<Integer,T> entry : dataMap.entrySet()){
                    hashOperations.put(key,entry.getKey(),entry.getValue());
                }
            }
            return hashOperations;
        }
    
        /**
         * 获得缓存的 Map
         */
        public <T> Map<Integer,T> getCacheIntegerMap(String key){
            Map<Integer,T> map = redisTemplate.opsForHash().entries(key);
            return map;
        }
    
    
    }
  5. 测试:
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = "classpath:application.xml")
    public class AccountServiceTest {
        @Autowired
        RedisCacheUtil redisCacheUtil;
    
        @Autowired
        RedisTemplate redisTemplate;
    
        @Test
        public void selectAll(){
            List<Account> accounts = new ArrayList<>();
    
            for (int i = 0; i < 10; i++) {
                Account a = new Account();
                a.setId(i);
                a.setName("zhangsan");
                accounts.add(a);
            }
            redisCacheUtil.setCacheObject("key1",accounts);
    
            List<Account> key1 = redisCacheUtil.getCacheObject("key1");
            System.out.println(key1);
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值