當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
高并发秒杀——SpringBoot集成redis
生活随笔
收集整理的這篇文章主要介紹了
高并发秒杀——SpringBoot集成redis
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
shop--13.升級--Redis緩存技術
集成Redis
1.添加Jedis依賴
2.添加Fastjson依賴
1.安裝redis??http://www.runoob.com/redis/redis-install.html
?
1.引入redis依賴
<!--redis客戶端:jedis--><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.1.41</version></dependency><!--配置springBootConfiguration, 可以使用@ConfigurationProperties(prefix = "redis")--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency>
2.在application.properties加入redis配置文件
redis.host=127.0.0.1 redis.port=6379 redis.timeout=3 redis.pool.MaxTotal=10 redis.database=0 redis.pool.maxActive=100 redis.pool.maxIdle=20 redis.pool.maxWait=3 redis.pool.testOnBorrow=true3. 定義redis的類,引入redis配置
@Component @ConfigurationProperties(prefix = "redis") public class RedisConfig {private String host;private int port;private int timeout;private int poolMaxTotal;private int poolMaxIdle;private int poolMaxWait;public String getHost() {return host;}public void setHost(String host) {this.host = host;}public int getPort() {return port;}public void setPort(int port) {this.port = port;}public int getTimeout() {return timeout;}public void setTimeout(int timeout) {this.timeout = timeout;}public int getPoolMaxTotal() {return poolMaxTotal;}public void setPoolMaxTotal(int poolMaxTotal) {this.poolMaxTotal = poolMaxTotal;}public int getPoolMaxIdle() {return poolMaxIdle;}public void setPoolMaxIdle(int poolMaxIdle) {this.poolMaxIdle = poolMaxIdle;}public int getPoolMaxWait() {return poolMaxWait;}public void setPoolMaxWait(int poolMaxWait) {this.poolMaxWait = poolMaxWait;} }
4.RedisPoolFactory類
@Service public class RedisPoolFactory {@AutowiredRedisConfig redisConfig;@Beanpublic JedisPool JedisPoolFactory(){JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();jedisPoolConfig.setMaxIdle(redisConfig.getPoolMaxIdle());jedisPoolConfig.setMaxTotal(redisConfig.getPoolMaxTotal());jedisPoolConfig.setMaxWaitMillis(redisConfig.getPoolMaxWait() * 1000);JedisPool jedisPool = new JedisPool(jedisPoolConfig, redisConfig.getHost(),redisConfig.getPort(), redisConfig.getTimeout() * 1000);return jedisPool;} }
5.編寫RedisService類
@Service public class RedisRervice {@AutowiredJedisPool jedisPool;/*** h獲取單個對象* @param prefix* @param key* @param clazz* @param <T>* @return*/public <T> T get(KeyPrefix prefix, String key, Class<T> clazz){Jedis jedis = null;try{jedis = jedisPool.getResource();//生成真正的keyString realKey = prefix.getKeyPrefix() + key;String str = jedis.get(realKey);T t = stringToBean(str, clazz);return t;}finally {jedis.close();}}/*** 設置緩存值* @param prefix* @param key* @param value* @param <T>* @return*/public <T> boolean set(KeyPrefix prefix, String key, T value){Jedis jedis = null;try{jedis = jedisPool.getResource();String str = beanToString(value);if(str == null || str.length() <= 0){return false;}//生成真正的keyString realKey = prefix.getKeyPrefix() + key;int second = prefix.expireSeconds();if(second <= 0){jedis.set(realKey, str);}else{jedis.setex(realKey, second, str);}jedis.set(realKey, str);return true;} finally {jedis.close();}}private <T> String beanToString(T value) {if(value == null){return null;}Class<?> clazz = value.getClass();if(clazz == int.class || clazz == Integer.class){return "" + value;}else if(clazz == String.class){return (String) value;} else if(clazz == long.class || clazz == Long.class){return "" + value;}else{return JSON.toJSONString(value);}}private <T> T stringToBean(String str, Class<T> clazz) {if (str == null || str.length() <= 0 || clazz == null) {return null;}if (clazz == int.class || clazz == Integer.class) {return (T) Integer.valueOf(str);} else if (clazz == String.class) {return (T) str;} else if (clazz == long.class || clazz == Long.class) {return (T) Long.valueOf(str);} else {return JSON.toJavaObject(JSON.parseObject(str), clazz);}}/*** 判斷是否存在* @param prefix* @param key* @param <T>* @return*/public <T> boolean exits(KeyPrefix prefix, String key){Jedis jedis = null;try{jedis = jedisPool.getResource();String realKey = prefix.getKeyPrefix() + key;return jedis.exists(realKey);} finally {jedis.close();}}/*** 增加值* @param prefix* @param key* @param <T>* @return*/public <T> Long incr(KeyPrefix prefix, String key){Jedis jedis = null;try{jedis = jedisPool.getResource();String realKey = prefix.getKeyPrefix() + key;return jedis.incr(realKey);} finally {jedis.close();}}/*** 減少值* @param prefix* @param key* @param <T>* @return*/public <T> Long decr(KeyPrefix prefix, String key){Jedis jedis = null;try{jedis = jedisPool.getResource();String realKey = prefix.getKeyPrefix() + key;return jedis.decr(realKey);} finally {jedis.close();}} }
6.controller中測試
@AutowiredRedisService redisService;@RequestMapping(value = "/redis/set", method = RequestMethod.GET)@ResponseBodypublic boolean redisSet(){boolean value = redisService.set("key2", "redis");return value;}@RequestMapping(value = "/redis/get", method = RequestMethod.GET)@ResponseBodypublic Object redisGet(){String l = redisService.get("key2", String.class);return l;}
?使用一個前綴來區分key
public interface KeyPrefix {int expireSeconds();String getKeyPrefix(); }
KeyPrefix
public abstract class BasePrefix implements KeyPrefix {private int expireSeconds;private String keyPrefix;public BasePrefix(String keyPrefix) {this(0, keyPrefix);}public BasePrefix(int expireSeconds, String keyPrefix) {this.expireSeconds = expireSeconds;this.keyPrefix = keyPrefix;}//默認 0 代表永不過期@Overridepublic int expireSeconds() {return expireSeconds;}//不同的類對應不同的prefix@Overridepublic String getKeyPrefix() {String className = getClass().getSimpleName();return className + ": " + keyPrefix;} }
?
轉載于:https://www.cnblogs.com/SkyeAngel/p/9204721.html
總結
以上是生活随笔為你收集整理的高并发秒杀——SpringBoot集成redis的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python+selenuim自动化测试
- 下一篇: 关于SpringMvc中js和图片路径正