移动网站怎么登录,电子商务静态网页模板,91游戏中心,基于php mysql的网站开发本文基于Springboot#xff0c;mybatis plus#xff0c;mysql#xff0c;redis#xff0c; Jedis模拟redis缓存实现
目录
1. 添加所需maven依赖
2. 设置数据库及数据表
3. 构建实体类
4. 构建工具类实现 redis 数据库连接池#xff0c;redis 的读取#xff0c;写入功…本文基于Springbootmybatis plusmysqlredis Jedis模拟redis缓存实现
目录
1. 添加所需maven依赖
2. 设置数据库及数据表
3. 构建实体类
4. 构建工具类实现 redis 数据库连接池redis 的读取写入功能
5. Redis 缓存实战 1. 添加所需maven依赖 !-- web开发模块--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- 添加jedis依赖操作redis--dependencygroupIdredis.clients/groupIdartifactIdjedis/artifactIdversion3.6.3/version/dependency!-- mybatis-plus 依赖--dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.4.2/version/dependency!-- mysql连接驱动--dependencygroupIdcom.mysql/groupIdartifactIdmysql-connector-j/artifactIdscoperuntime/scope/dependency!-- lombok模块--dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependency
2. 设置数据库及数据表 执行以下 sql 脚本新建表 product 并插入四条数据
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS 0;-- ----------------------------
-- Table structure for product
-- ----------------------------
DROP TABLE IF EXISTS product;
CREATE TABLE product (id int NOT NULL AUTO_INCREMENT,name varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,price float NULL DEFAULT NULL,category int NULL DEFAULT NULL,PRIMARY KEY (id) USING BTREE
) ENGINE InnoDB AUTO_INCREMENT 5 CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci ROW_FORMAT Dynamic;-- ----------------------------
-- Records of product
-- ----------------------------
INSERT INTO product VALUES (1, phone, 1899, 10);
INSERT INTO product VALUES (2, apple, 1899, 20);
INSERT INTO product VALUES (3, food, 1600, 30);
INSERT INTO product VALUES (4, rice, 1230, 40);SET FOREIGN_KEY_CHECKS 1;
3. 构建实体类 这里使用 lombok 来构建settergetter构造方法toString方法
Data
ToString
AllArgsConstructor
NoArgsConstructor
TableName(product)
public class Product {private Integer id;private String name;private Float price;private Integer category;
}
4. 构建工具类实现 redis 数据库连接池redis 的读取写入功能
public class JedisUtil {private static JedisPool jedisPool;static{// 配置连接池JedisPoolConfig config new JedisPoolConfig();config.setMaxTotal(10); // 设置最大连接数config.setMaxIdle(5); // 设置最大空闲连接数config.setBlockWhenExhausted(false); // 连接耗尽时不阻塞// 创建连接池jedisPool new JedisPool(config,localhost,6379);}// 从数据池获取 Jedis 连接public static Jedis getJedisPool(){return jedisPool.getResource();}// 存储商品到 redis---key:(product:id) field: valuepublic static long saveToRedis(Product product){Jedis jedis JedisUtil.getJedisPool();HashMapString,String hashMap new HashMap();hashMap.put(name,product.getName());hashMap.put(price,String.valueOf(product.getPrice()));hashMap.put(category,String.valueOf(product.getCategory()));String key product: product.getId();long flag jedis.hset(key, hashMap);// 设置过期时间jedis.expire(key,3600L);jedis.close();return flag;}// 从 redis 读取数据public static Product getProductByRedis(int id){Jedis jedis JedisUtil.getJedisPool();Product product null;String key product: id;if(jedis.exists(key)){String name jedis.hget(key,name);String price jedis.hget(key,price);String category jedis.hget(key,category);product new Product(id,name,Float.parseFloat(price),Integer.parseInt(category));}jedis.close();return product;}
}5. Redis 缓存实战 前端请求路径http://localhost/getProductById?id2 后端新建一个 ProductMapper 接口
Mapper
public interface ProductMapper {Select(select * from product)ListProduct getProduct();Select(select * from product where id#{id})Product getProductById(int id);
}后端新建一个 ProductController 类
RestController
public class ProductController {ResourceProductMapper productMapper;GetMapping(/product)public ListProduct getProduct(){return productMapper.getProduct();}GetMapping(/getProductById)public Product getProductById(int id){Product product null;// 1. 查看 redis 缓存中是否有数据product JedisUtil.getProductByRedis(id);if(product null){ // redis 中没有该商品// 2.进 mysql 中查询product productMapper.getProductById(id);if(productnull){ // mysql 中没有System.out.println(mysql 中未查询到该商品);}else { // mysql 中有System.out.println(mysql查询到该商品: product);// 3.返回给前端的同时也要将数据写入到 redis 中long flag JedisUtil.saveToRedis(product);System.out.println(save flag:flag);}}else { // redis 中有该商品System.out.println(redis查询到该商品: product);}return product;}
}第一次读取数据时是从 mysql 中读取当该数据写入 redis 后读取速度明显加快