Springboot框架整合添加redis緩存功能
Hello大傢好,本章我們添加redis緩存功能 。另求各路大神指點,感謝
一:安裝Redis
因本人電腦是windows系統,從https://github.com/ServiceStack/redis-windows下載瞭兼容windows系統的redis
下載後直接解壓到自定義目錄,運行cmd命令,進入到這個文件夾,在這個文件夾下運行下面命令,啟動redis服務器
redis-server redis.windows.conf
運行下面命令進行測試:redis-cli
二:添加Redis依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> <version>1.4.5.RELEASE</version> </dependency>
然後鼠標右鍵選擇Maven→Reimport進行依賴下載
三:添加Redis配置信息
在application.properties
中添加
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.timeout=0
spring.redis.password=
四:創建RedisConfigurer
package com.example.demo.core.configurer; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.cache.annotation.CachingConfigurerSupport; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate; import redis.clients.jedis.JedisPoolConfig; /** * @author 張瑤 * @Description: redis配置 * @date 2018/4/30 10:28 */ @Configuration @EnableCaching //開啟緩存 public class RedisConfigurer extends CachingConfigurerSupport { @Bean @ConfigurationProperties(prefix="spring.redis") public JedisPoolConfig getRedisConfig(){ JedisPoolConfig config = new JedisPoolConfig(); return config; } @Bean @ConfigurationProperties(prefix="spring.redis") public JedisConnectionFactory getConnectionFactory(){ JedisConnectionFactory factory = new JedisConnectionFactory(); JedisPoolConfig config = getRedisConfig(); factory.setPoolConfig(config); return factory; } @Bean public RedisTemplate<?, ?> getRedisTemplate(){ RedisTemplate<?,?> template = new StringRedisTemplate(getConnectionFactory()); return template; } }
五:創建Redis常用方法
RedisService
package com.example.demo.service; import java.util.List; /** * @author 張瑤 * @Description: redis常用方法 * @date 2018/4/30 10:35 */ public interface RedisService { /** * 設置給定 key 的值。如果 key 已經存儲其他值, SET 就覆寫舊值,且無視類型。 * @param key * @param value * @return */ boolean set(String key, String value); /** * 獲取指定 key 的值。如果 key 不存在,返回 nil 。如果key 儲存的值不是字符串類型,返回一個錯誤。 * @param key * @return */ String get(String key); /** * 設置 key 的過期時間。key 過期後將不再可用。 * @param key * @param expire * @return */ boolean expire(String key, long expire); /** * 存集合 * @param key * @param list * @param <T> * @return */ <T> boolean setList(String key, List<T> list); /** * 取集合 * @param key * @param clz * @param <T> * @return */ <T> List<T> getList(String key, Class<T> clz); /** * 將一個或多個值插入到列表頭部。 如果 key 不存在,一個空列表會被創建並執行 LPUSH 操作。 * 當 key 存在但不是列表類型時,返回一個錯誤。 * @param key * @param obj * @return */ long lpush(String key, Object obj); /** * 將一個或多個值插入到列表的尾部(最右邊)。 * 如果列表不存在,一個空列表會被創建並執行 RPUSH 操作。 當列表存在但不是列表類型時,返回一個錯誤。 * @param key * @param obj * @return */ long rpush(String key, Object obj); /** * 移除並返回列表的第一個元素。 * @param key * @return */ String lpop(String key); /** * 刪除已存在的鍵。不存在的 key 會被忽略。 * @param key * @return */ long del(final String key); }
RedisServiceImpl
package com.example.demo.service.impl; import com.alibaba.fastjson.JSON; import com.example.demo.service.RedisService; import org.springframework.dao.DataAccessException; import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.core.RedisCallback; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; import java.util.concurrent.TimeUnit; /** * @author 張瑤 * @Description: redis配置 * @date 2018/4/30 10:38 */ @Service public class RedisServiceImpl implements RedisService { @Resource private RedisTemplate<String, ?> redisTemplate; @Override public boolean set(final String key, final String value) { boolean result = redisTemplate.execute(new RedisCallback<Boolean>() { @Override public Boolean doInRedis(RedisConnection connection) throws DataAccessException { RedisSerializer<String> serializer = redisTemplate.getStringSerializer(); connection.set(serializer.serialize(key), serializer.serialize(value)); return true; } }); return result; } @Override public String get(final String key){ String result = redisTemplate.execute(new RedisCallback<String>() { @Override public String doInRedis(RedisConnection connection) throws DataAccessException { RedisSerializer<String> serializer = redisTemplate.getStringSerializer(); byte[] value = connection.get(serializer.serialize(key)); return serializer.deserialize(value); } }); return result; } @Override public long del(final String key){ long result = redisTemplate.execute(new RedisCallback<Long>() { @Override public Long doInRedis(RedisConnection connection) throws DataAccessException { RedisSerializer<String> serializer = redisTemplate.getStringSerializer(); long value = connection.del(serializer.serialize(key)); return value; } }); return result; } @Override public boolean expire(final String key, long expire) { return redisTemplate.expire(key, expire, TimeUnit.SECONDS); } @Override public <T> boolean setList(String key, List<T> list) { String value = JSON.toJSONString(list); return set(key,value); } @Override public <T> List<T> getList(String key,Class<T> clz) { String json = get(key); if(json!=null){ List<T> list = JSON.parseArray(json, clz); return list; } return null; } @Override public long lpush(final String key, Object obj) { final String value = JSON.toJSONString(obj); long result = redisTemplate.execute(new RedisCallback<Long>() { @Override public Long doInRedis(RedisConnection connection) throws DataAccessException { RedisSerializer<String> serializer = redisTemplate.getStringSerializer(); long count = connection.lPush(serializer.serialize(key), serializer.serialize(value)); return count; } }); return result; } @Override public long rpush(final String key, Object obj) { final String value = JSON.toJSONString(obj); long result = redisTemplate.execute(new RedisCallback<Long>() { @Override public Long doInRedis(RedisConnection connection) throws DataAccessException { RedisSerializer<String> serializer = redisTemplate.getStringSerializer(); long count = connection.rPush(serializer.serialize(key), serializer.serialize(value)); return count; } }); return result; } @Override public String lpop(final String key) { String result = redisTemplate.execute(new RedisCallback<String>() { @Override public String doInRedis(RedisConnection connection) throws DataAccessException { RedisSerializer<String> serializer = redisTemplate.getStringSerializer(); byte[] res = connection.lPop(serializer.serialize(key)); return serializer.deserialize(res); } }); return result; } }
六:接口測試
創建RedisController
package com.example.demo.controller; import com.example.demo.core.ret.RetResponse; import com.example.demo.core.ret.RetResult; import com.example.demo.service.RedisService; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; /** * @author 張瑤 * @Description: * @date 2018/4/30 11:28 */ @RestController @RequestMapping("redis") public class RedisController { @Resource private RedisService redisService; @PostMapping("/setRedis") public RetResult<String> setRedis(String name) { redisService.set("name",name); return RetResponse.makeOKRsp(name); } @PostMapping("/getRedis") public RetResult<String> getRedis() { String name = redisService.get("name"); return RetResponse.makeOKRsp(name); } }
輸入http://localhost:8080/redis/setRedis
輸入http://localhost:8080/redis/getRedis
項目地址
碼雲地址:https://gitee.com/beany/mySpringBoot
GitHub地址:https://github.com/MyBeany/mySpringBoot
寫文章不易,如對您有幫助,請幫忙點下star
結尾
添加redis緩存功能已完成,後續功能接下來陸續更新,另求各路大神指點,感謝大傢。
到此這篇關於Springboot框架整合添加redis緩存功能的文章就介紹到這瞭,更多相關Springboot整合redis緩存內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Redis在項目中的使用(JedisPool方式)
- SpringBoot Redis批量存取數據的操作
- Springboot基礎之RedisUtils工具類
- java若依框架集成redis緩存詳解
- springboot2.5.0和redis整合配置詳解