redis(Springboot中封裝整合redis,java程序如何操作redis的5種基本數據類型)


平常測試redis操作命令,可能用的是cmd窗口 操作redis,記錄一下 java程序操作reids,

 操作redis的方法 可以用Jedis ,在springboot 提供了兩種 方法操作 RedisTemplate 和StringRedisTemplate 兩種方法的區別 可參考:https://blog.csdn.net/yifanSJ/article/details/79513179

 當然 springboot 中也可以使用Jedis ,本次記錄的是 如何使用RedisTemplate 操作reids的5種基本數據類型

  1.  在項目的pom文件中導入 操作redis所需要的依賴:
    <?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">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.2.RELEASE</version>
            <relativePath /> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.example</groupId>
        <artifactId>springboot-redis</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>springboot-redis</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.apache.directory.studio/org.apache.commons.lang -->
            <dependency>
                <groupId>org.apache.directory.studio</groupId>
                <artifactId>org.apache.commons.lang</artifactId>
                <version>2.6</version>
            </dependency>
            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
        <!-- <version>2.9.0</version> -->
            </dependency>
    
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>

     

  2. 新建RedisTemplateUtil  注入 RedisTemplate 
    package com.example.demo.redisutil;
    
    import java.util.Arrays;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.Set;
    import java.util.concurrent.TimeUnit;
    
    import javax.annotation.Resource;
    
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.stereotype.Component;
    import org.springframework.util.CollectionUtils;
    
    @Component
    public class RedisTemplateUtil {
        @Resource
        private RedisTemplate<String, Object> redisTemplate;

     

  3. 使用RedisTemplate  操作 String類型的數據:
      1,將String類型存入到Redis當中:
    /**
         * redisTemplate操作普通字符串(存值)
         * 
         * @param key
         * @param value
         */
        public void redisSetString(String key, String value) {
            redisTemplate.opsForValue().set(key, value);
        }

    2,從redis當中取出String類型的數據:

    /**
         * redisTemplate操作普通字符串 (取值)
         * 
         * @param key
         */
        public Object redisGetString(String key) {
            return redisTemplate.opsForValue().get(key);
    
        }

    3.設置reids key的過期時間(原來出現過設置過期時間不起作用,是因為先設置了過期時間 在去存入值到redis ):

        /**
         * 
         * 指定緩存失效時間
         * 
         * @param key
         *            鍵
         * 
         * @param time
         *            時間(秒)
         * 
         * @return
         * 
         */
    
        public boolean expire(String key, long time) {
            try {
                if (time > 0) {
                    redisTemplate.expire(key, time, TimeUnit.SECONDS);
                }
                return true;
    
            } catch (Exception e) {
    
                e.printStackTrace();
    
                return false;
    
            }
    
        }

     

  4. 使用RedisTemplate  操作List類型的數據:
     1,將list類型存入到Redis當中:
        /**
         * 將一個list集合存放到redis當中
         * 
         * @param key
         */
        public void redisSetList(String key) {
            List<Integer> list = Arrays.asList(9, 2, 3, 4);
            for (Integer integer : list) {
                // 從當前的數據 向右添加 
                // redisTemplate.opsForList().rightPush(key, integer);
                // 從當前的數據 向左添加 
                redisTemplate.opsForList().leftPush(key, integer);
            }
        }

    2,從redis中取出list數據:

    /**
         * 獲取list(獲取0 -10 索引的數據)
         * 
         * @param key
         * @return
         */
        public Object getList(String key) {
            return redisTemplate.opsForList().range(key, 0, 10);
        }

    3.獲取redis中list的長度:

    /**
         * 獲取list指定key的長度
         * 
         * @param key
         * @return
         */
        public Long getListSize(String key) {
            return redisTemplate.opsForList().size(key);
        }

     



  5. 使用RedisTemplate  操作hash類型的數據:
    1.將hash存放到redis當中:
    /**
         * 將map存放到reids
         *
         * @param key
         */
        public void setHash(String key) {
            Map<String, String> hashMap = new HashMap<>();
            //使用RedisTemplate  有些情況會亂碼
            hashMap.put("redis", "redis");
            hashMap.put("mysql", "mysql");
            for (Entry<String, String> keyValue : hashMap.entrySet()) {
                redisTemplate.opsForHash().put(key, keyValue.getKey(), keyValue.getValue());
            }
        }

    2.將hash從redis當中取出來 根據具體的key取出具體的值:

    /**
         * 獲取指定key1的值
         * 
         * @param key
         * @param key1
         * @return
         */
        public Object getHash(String key, String key1) {
            // 檢測 是否 存在該鍵
            boolean isKey = redisTemplate.opsForHash().hasKey(key, key1);
            return redisTemplate.opsForHash().get(key, key1);
        }

    3.將key中所有的值都取出來:

    /**
         * 獲取指定key的所有值
         * 
         * @param key
         * 
         * @return
         */
        public Object getHash(String key) {
            return redisTemplate.opsForHash().entries(key);
        }

    4.根據具體的key移除具體的值:

    /**
         * 根據具體key移除具體的值
         * 
         * @param key
         * 
         * @return
         */
        public void removeKey(String key, String key1) {
            redisTemplate.opsForHash().delete(key, key1);
        }

    5.移除key值 則key里面的所有值都被移除:

    public void removeStringKey(String key) {
            redisTemplate.delete(key);
        }

     

  6. 使用RedisTemplate  操作set類型的數據:
    1.set數據存入redis中
        /**
         * set存入redis中
         * 
         * @param key
         */
        public void setSet(String key) {
            Set<Object> set = new HashSet<>();
            set.add("setKey");
            set.add("tesetKey");
            for (Object object : set) {
                redisTemplate.opsForSet().add(key, object);
            }
        }

    2.從redis當中將set數據取出來:

    /**
         * 從redis中取出set
         * 
         * @param key
         * @return
         */
        public Object getSet(String key) {
            return redisTemplate.opsForSet().members(key);
        }

     

  7. 使用RedisTemplate  操作sortset類型的數據:
    1.將sortSet存放到redis當中:
    /**
         * sortset存入redis中
         * 
         * @param key
         */
        public void setZSet(String key) {
            Set<Object> set = new HashSet<>();
            set.add("setKey");
            set.add("tesetKey");
            int i = 0;
            for (Object object : set) {
                i++;
                redisTemplate.opsForZSet().add(key, object, i);
            }
        }

    2.將sortset從redis當中取出來的API有很多:

    /**
         * 從redis中取出sortset
         * 
         * @param key
         * @return
         */
        public Object getZSet(String key) {
            Long size = redisTemplate.opsForZSet().size(key);
            return redisTemplate.opsForZSet().rangeByScore(key, 0, size);
        }

     

  8. RedisTemplate操作5種基本類型數據,有一些共同的API 比如設置過期時間,和移除key的值,判斷key是否存在
    1設置過期時間
    /**
         * 
         * 指定緩存失效時間
         * 
         * @param key
         *            鍵
         * 
         * @param time
         *            時間(秒)
         * 
         * @return
         * 
         */
    
        public boolean expire(String key, long time) {
            try {
                if (time > 0) {
                    redisTemplate.expire(key, time, TimeUnit.SECONDS);
                }
                return true;
    
            } catch (Exception e) {
    
                e.printStackTrace();
    
                return false;
    
            }
    
        }

    2.檢測是否存在key

    /**
         * 
         * 判斷key是否存在
         * 
         * @param key
         *            鍵
         * 
         * @return true 存在 false不存在
         * 
         */
    
        public boolean checkKey(String key) {
    
            try {
    
                return redisTemplate.hasKey(key);
    
            } catch (Exception e) {
    
                e.printStackTrace();
    
                return false;
    
            }
    
        }

    3:移除緩存

      /**
         * 移除key
         * @param key
         */
        public void removeKey(String key) {
            redisTemplate.delete(key);
        }

     




  9. 掌握redis,首先得掌握reids如何操作5種基本數據類型,5種基本數據類型中 set和sortset的區別需要特別注意,然后就是關於使用RedisTemplate  可能亂碼的問題,以及StringRedisTemplate  的區別,


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM