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=true

3. 定义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相关推荐

  1. Java高并发秒杀平台(Redis + RabbitMQ)

    Seconds-Kill 本项目是一个模拟高并发环境下基于 SpringBoot 的秒杀购物平台.为了减少对数据库的直接访问,通过 Redis 实现了缓存优化:并通过 RabbitMQ 消息中间件来接 ...

  2. 【在线网课】Java高性能高并发秒杀系统方案优化实战

    java教程视频讲座简介: Java高性能高并发秒杀系统方案优化实战 Java秒杀系统方案优化 高性能高并发实战 以"秒杀"这一Java高性能高并发的试金石场景为例,带你通过一系列 ...

  3. SpringBoot、Redis轻松实现Java高并发秒杀系统笔记

    秒杀项目 优极限[完整项目实战]半天带你用SpringBoot.Redis轻松实现Java高并发秒杀系统 文章目录 秒杀项目 技术栈 课程介绍 学习目标 如何设计一个秒杀系统 项目搭建 分布式会话 登 ...

  4. SpringBoot实现Java高并发秒杀系统之DAO层开发(一)

    SpringBoot实现Java高并发秒杀系统之DAO层开发(一) 秒杀系统在如今电商项目中是很常见的,最近在学习电商项目时讲到了秒杀系统的实现,于是打算使用SpringBoot框架学习一下秒杀系统( ...

  5. SpringBoot实现Java高并发秒杀系统之Service层开发(二)

    继上一篇文章:SpringBoot实现Java高并发秒杀系统之DAO层开发 我们创建了SpringBoot项目并熟悉了秒杀系统的表设计,下面我们将讲解一下秒杀系统的核心部分:Service业务层的开发 ...

  6. Redis之实现优惠券高并发秒杀下单

    Redis之实现优惠券高并发秒杀下单 实现逻辑如图: 此方法高并发情况下会出现超库存的问题,可使用乐观锁解决,乐观锁使用场景是更新的时候 一:解决乐观锁方法一:加版本号,如图所示: 二:使用CAS法解 ...

  7. 高并发秒杀系统方案的优化

    最近接触了一个关于高并发秒杀的项目,在这里稍微整理一下关于这个项目的一些值得记录的一些点,以下是源码地址:github 高并发项目的瓶颈主要在于数据库访问次数上,访问次数越多,对数据库压力也就越大,因 ...

  8. redis 依赖_springboot|springboot集成redis缓存

    javaDEMO 本网站记录了最全的各种JavaDEMO ,保证下载,复制就是可用的,包括基础的, 集合的, spring的, Mybatis的等等各种,助力你从菜鸟到大牛,记得收藏哦~~https: ...

  9. SpringBoot集成Redis缓存

    SpringBoot集成Redis缓存 前言 本系列文章将简单的学习SpringCloud微服务相关知识,其实也是因为时间的原因,一直拖到现在,遂打算趁着假期,决定记录下来. 从天气预报微服务系统的单 ...

最新文章

  1. Java培训深度学习都要学什么
  2. Java集合TreeMap
  3. 变化的和不变的。。。(2004版)
  4. 两个分数化简比怎么化_我学《分数的意义》心得
  5. 如何将JBoss HR员工奖励项目放入云端
  6. dotNet中初始化器的使用
  7. ​【文末有福利】为何美国的科研既能得诺贝尔奖,又能产生高科技产品?
  8. Nifi 之 kafka消费存入hbase
  9. Android Studio 修改包名 com.example.calculator-----gt;com.melon.calculator
  10. ccf——201903-4 消息传递接口
  11. (Origin教程)在图片和表格中插入Latex公式
  12. [Effective C++系列]-为多态基类声明Virtual析构函数
  13. EOS 钱包开发(JAVA)
  14. Android基础入门教程——9.2 MediaPlayer播放音频与视频
  15. 产品人的归宿 · 之 · 创业维艰
  16. stm32定时器的ETR、CH1N、CH2N、CH3N
  17. php 月初时间,php 月初,月末时间大统计
  18. 通达oa2015 php解密,通达OA /interface/auth.php SQL注入
  19. Python漫画爬虫开源 66漫画 AJAX,包含数据库连接,图片下载处理
  20. AList和RaiDrive对百度网盘进行本地挂载(可上传下载)

热门文章

  1. 1.4编程基础之逻辑表达式与条件分支 12 骑车与走路
  2. fastadmin在html中查询数据,FastAdmin模块开发快速上手
  3. Java笔记-对称加密AES的使用
  4. Qt文档阅读笔记-Semaphores Example解析(信号量并发实例)
  5. Qt工作笔记-重写滚轮事件,实现界面的增加、减少(放大、缩小)
  6. 编码风格工作笔记-初步模仿大佬编码风格
  7. Java高级语法笔记-模板类
  8. 最全的BAT Google等团队技术博客集合
  9. html5和极速模式,浅谈360浏览器6.0版本极速模式与兼容模式_蓝戒的博客
  10. php提交raw_PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别分析