{"id":73,"date":"2026-05-28T15:33:22","date_gmt":"2026-05-28T07:33:22","guid":{"rendered":"https:\/\/mitongxue.cn\/?p=73"},"modified":"2026-05-28T15:33:22","modified_gmt":"2026-05-28T07:33:22","slug":"springboot4-%e4%bd%bf%e7%94%a8redis","status":"publish","type":"post","link":"https:\/\/mitongxue.cn\/index.php\/2026\/05\/28\/springboot4-%e4%bd%bf%e7%94%a8redis\/","title":{"rendered":"SpringBoot4 \u4f7f\u7528Redis"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">pom.xml<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>        &lt;!-- redis-->\n        &lt;dependency>\n            &lt;groupId>org.springframework.boot&lt;\/groupId>\n            &lt;artifactId>spring-boot-starter-data-redis&lt;\/artifactId>\n        &lt;\/dependency>\n        &lt;!-- redis\u8fde\u63a5\u6c60\u4f9d\u8d56-->\n        &lt;!-- \u8fde\u63a5\u6c60\u4f9d\u8d56\uff08\u5fc5\u987b\u52a0\uff0c\u5426\u5219\u8fd0\u884c\u62a5\u9519\uff09 -->\n        &lt;dependency>\n            &lt;groupId>org.apache.commons&lt;\/groupId>\n            &lt;artifactId>commons-pool2&lt;\/artifactId>\n        &lt;\/dependency><\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"https:\/\/gitee.com\/chenkun\/learn-springboot\/blob\/6da8c7efe835280cf5752735101a2c619f651fdd\/src\/main\/resources\/application-dev.yaml\">src\/main\/resources\/application-dev.yaml\u00a0<\/a> \u914d\u7f6e<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>  data:\n#    redis\u914d\u7f6e\n    redis:\n      host: 127.0.0.1\n      port: 6379\n      password:  # \u6ca1\u6709\u5bc6\u7801\u5c31\u7a7a\u7740\n      database: 0\n      timeout: 10s\n      lettuce:\n        pool:\n#          \u6700\u5927\u8fde\u63a5\u6570\n          max-active: 200\n          max-wait: -1ms\n#          \u8fde\u63a5\u6c60\u6700\u5927\u7a7a\u95f2\u8fde\u63a5\n          max-idle: 10\n          min-idle: 0<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"https:\/\/gitee.com\/chenkun\/learn-springboot\/blob\/6da8c7efe835280cf5752735101a2c619f651fdd\/src\/main\/java\/com\/example\/demo\/config\/RedisConfig.java\">config\/RedisConfig.java\u00a0<\/a><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.example.demo.config;\n\n\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.data.redis.connection.RedisConnectionFactory;\nimport org.springframework.data.redis.connection.RedisStandaloneConfiguration;\nimport org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;\nimport org.springframework.data.redis.core.RedisTemplate;\nimport org.springframework.data.redis.serializer.RedisSerializer;\nimport org.springframework.data.redis.serializer.StringRedisSerializer;\n\n@Configuration\npublic class RedisConfig {\n    @Value(\"${spring.data.redis.host}\")\n    private String redisHost;\n    @Value(\"${spring.data.redis.port}\")\n    private int redisPort;\n\n    public RedisConnectionFactory redisConnectionFactory(){\n        RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(redisHost, redisPort);\n        return new LettuceConnectionFactory(config);\n    }\n\n    @SuppressWarnings(\"renoval\")\n    @Bean\n    public RedisTemplate&lt;String, Object> redisTemplate(RedisConnectionFactory factory){\n        RedisTemplate&lt;String, Object> template = new RedisTemplate&lt;>();\n        template.setConnectionFactory(factory);\n\n        \/\/\u8bbe\u7f6ekey\u548chash key\u4f7f\u7528\u5b57\u7b26\u4e32\u5e8f\u5217\u5316\n        template.setKeySerializer(new StringRedisSerializer());\n        template.setHashKeySerializer(new StringRedisSerializer());\n\n        \/\/\u8bbe\u7f6e jackson2JsonRedisSerializer \u4f5c\u4e3avalue\u5e8f\u5217\u5316\u65b9\u5f0f\n        RedisSerializer&lt;Object> jsonSer = RedisSerializer.json();\n\n        template.setValueSerializer(jsonSer);\n        template.setHashValueSerializer(jsonSer);\n\n        template.afterPropertiesSet();\n        return template;\n    }\n\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\/util\/RedisUtil.java \u5de5\u5177\u7c7b<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.example.demo.util;\n\nimport jakarta.annotation.Resource;\nimport org.springframework.data.redis.core.RedisTemplate;\nimport org.springframework.stereotype.Component;\nimport org.springframework.util.CollectionUtils;\n\nimport java.util.List;\nimport java.util.Map;\nimport java.util.Set;\nimport java.util.concurrent.TimeUnit;\n\n@Component\npublic class RedisUtil {\n\n    @Resource\n    private RedisTemplate&lt;String, Object> redisTemplate;\n\n    \/\/ ==================== 1. key \u76f8\u5173 ====================\n    \/**\n     * \u8bbe\u7f6e\u8fc7\u671f\u65f6\u95f4\n     *\/\n    public boolean expire(String key, long time) {\n        try {\n            if (time > 0) {\n                redisTemplate.expire(key, time, TimeUnit.SECONDS);\n            }\n            return true;\n        } catch (Exception e) {\n            e.printStackTrace();\n            return false;\n        }\n    }\n\n    \/**\n     * \u83b7\u53d6\u8fc7\u671f\u65f6\u95f4\n     *\/\n    public long getExpire(String key) {\n        return redisTemplate.getExpire(key, TimeUnit.SECONDS);\n    }\n\n    \/**\n     * \u5224\u65adkey\u662f\u5426\u5b58\u5728\n     *\/\n    public boolean hasKey(String key) {\n        try {\n            return Boolean.TRUE.equals(redisTemplate.hasKey(key));\n        } catch (Exception e) {\n            e.printStackTrace();\n            return false;\n        }\n    }\n\n    public void del(String... keys){\n        if (keys != null &amp;&amp; keys.length > 0){\n            if (keys.length == 1) redisTemplate.delete(keys&#91;0]);\n            else redisTemplate.delete(CollectionUtils.arrayToList(keys).toString());\n        }\n    }\n    \/**\n     * \u5220\u9664key\n     *\/\n    public void delete(String key) {\n        redisTemplate.delete(key);\n    }\n\n    \/\/ ==================== 2. String \u7c7b\u578b ====================\n    \/**\n     * \u5b58\u503c\n     *\/\n    public boolean set(String key, Object value) {\n        try {\n            redisTemplate.opsForValue().set(key, value);\n            return true;\n        } catch (Exception e) {\n            e.printStackTrace();\n            return false;\n        }\n    }\n\n    \/**\n     * \u5b58\u503c\u5e76\u8bbe\u7f6e\u8fc7\u671f\u65f6\u95f4\uff08\u79d2\uff09\n     *\/\n    public boolean set(String key, Object value, long time) {\n        try {\n            if (time > 0) {\n                redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);\n            } else {\n                set(key, value);\n            }\n            return true;\n        } catch (Exception e) {\n            e.printStackTrace();\n            return false;\n        }\n    }\n\n    \/**\n     * \u53d6\u503c\n     *\/\n    public Object get(String key) {\n        return key == null ? null : redisTemplate.opsForValue().get(key);\n    }\n\n    \/**\n     * \u81ea\u589e\n     *\/\n    public long increment(String key, long delta) {\n        return redisTemplate.opsForValue().increment(key, delta);\n    }\n\n    \/\/ ==================== 3. Hash \u7c7b\u578b ====================\n    public Object hget(String key, String item) {\n        return redisTemplate.opsForHash().get(key, item);\n    }\n\n    public boolean hset(String key, String item, Object value) {\n        try {\n            redisTemplate.opsForHash().put(key, item, value);\n            return true;\n        } catch (Exception e) {\n            e.printStackTrace();\n            return false;\n        }\n    }\n\n    \/\/ ==================== 4. List \/ Set \u7b80\u6613\u5c01\u88c5 ====================\n    public long lSet(String key, Object value) {\n        return redisTemplate.opsForList().rightPush(key, value);\n    }\n\n    public List&lt;Object> lGet(String key, long start, long end) {\n        return redisTemplate.opsForList().range(key, start, end);\n    }\n\n    public Set&lt;Object> sGet(String key) {\n        return redisTemplate.opsForSet().members(key);\n    }\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>pom.xml src\/main\/resource..<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15,14],"tags":[],"class_list":["post-73","post","type-post","status-publish","format-standard","hentry","category-java","category-back"],"featured_image_urls":{"full":"","thumbnail":"","medium":"","medium_large":"","large":"","1536x1536":"","2048x2048":""},"author_info":{"info":["\u9648 \u67d0\u4eba"]},"category_info":"<a href=\"https:\/\/mitongxue.cn\/index.php\/category\/back\/java\/\" rel=\"category tag\">Java<\/a> <a href=\"https:\/\/mitongxue.cn\/index.php\/category\/back\/\" rel=\"category tag\">\u540e\u7aef<\/a>","tag_info":"\u540e\u7aef","comment_count":"0","_links":{"self":[{"href":"https:\/\/mitongxue.cn\/index.php\/wp-json\/wp\/v2\/posts\/73","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mitongxue.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mitongxue.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mitongxue.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mitongxue.cn\/index.php\/wp-json\/wp\/v2\/comments?post=73"}],"version-history":[{"count":2,"href":"https:\/\/mitongxue.cn\/index.php\/wp-json\/wp\/v2\/posts\/73\/revisions"}],"predecessor-version":[{"id":75,"href":"https:\/\/mitongxue.cn\/index.php\/wp-json\/wp\/v2\/posts\/73\/revisions\/75"}],"wp:attachment":[{"href":"https:\/\/mitongxue.cn\/index.php\/wp-json\/wp\/v2\/media?parent=73"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mitongxue.cn\/index.php\/wp-json\/wp\/v2\/categories?post=73"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mitongxue.cn\/index.php\/wp-json\/wp\/v2\/tags?post=73"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}