当前位置: 首页 > news >正文

滁州网站建设信息推荐关键词搜索排名查询

滁州网站建设信息推荐,关键词搜索排名查询,无代码做网站,网站在线生成器问题描述 测试阶段,由于存在某一功能的同时操作,该功能还是入库逻辑,此时若不进行处理,会造成插入表中多条重复数据,为此该问题需要修复。 解决办法 在接口开始进行对是否存在某个key值的判断,若不存在&…

问题描述

测试阶段,由于存在某一功能的同时操作,该功能还是入库逻辑,此时若不进行处理,会造成插入表中多条重复数据,为此该问题需要修复。

解决办法

在接口开始进行对是否存在某个key值的判断,若不存在,则插入一条到redis中并加锁;若存在,则提示“正在处理中”;若中间出现逻辑处理异常,则需要对该key值删除;最后进行对锁的释放;

话不多说,上代码

pom.xml 依赖补充
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
application.yml文件中redis配置
redis:host: 127.0.0.1port: 6379timeout: 10poolMaxTotal: 1000poolMaxIdle: 500poolMaxWait: 500
UserMapper.java
import com.example.demo.entity.User;import org.apache.ibatis.annotations.Mapper;@Mapper
public interface UserMapper {int add(User user);User queryByName(String name);
}
 UserMapper.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper"><select id="queryByName" resultMap="userResult">select  id,name,age  from  "USER"where name=#{name}</select><insert id="add" parameterType="com.example.demo.entity.User">INSERT INTO "USER" (id,name, age)VALUES (SYS_GUID(),#{name},#{age})</insert>
</mapper>
RedisService类
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;import java.util.concurrent.TimeUnit;@Service
public class RedisService {@AutowiredRedisTemplate<String,Object> redisTemplate;/*** 加锁* @param key* @param value* @param expireTime* @return*/public boolean lock(String key, String value, Long expireTime) {Boolean success = redisTemplate.opsForValue().setIfAbsent(key, value);if (expireTime != null && expireTime > 0) {redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);}return success != null && success;}/*** 释放锁* @param key*/public void unlock(String key) {redisTemplate.opsForValue().getOperations().delete(key);}/*** 根据key删除信息* @param key*/public void deleteStr(String key) {redisTemplate.delete(key);}
}
@bean配置 解决redis内容乱码,为了方便,我这边直接在启动类中配置
@Bean@SuppressWarnings("all")public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();template.setConnectionFactory(factory);Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);ObjectMapper om = new ObjectMapper();om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(om);StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();// key采用String的序列化方式template.setKeySerializer(stringRedisSerializer);// hash的key也采用jackson的序列化方式template.setHashKeySerializer(jackson2JsonRedisSerializer);// value序列化方式采用jacksontemplate.setValueSerializer(jackson2JsonRedisSerializer);// hash的value序列化方式采用jacksontemplate.setHashValueSerializer(jackson2JsonRedisSerializer);template.afterPropertiesSet();return template;}
controller类

该程序对新增用户功能同时操作的模拟,补充redis中key的判断,具体开发逻辑或内容可以视情况而定!

import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.example.demo.service.RedisService;import java.util.List;@RestController
@RequestMapping("/user")
public class UserController {private static final Logger logger = LoggerFactory.getLogger(UserController.class);@Autowiredprivate UserMapper userMapper;@Autowiredprivate RedisService redisService;@PostMapping("/addTest")public void addTest(@RequestBody User user) throws Exception {//todo 该功能的状态校验//1.判断该用户在redis是否存在if (!redisService.lock("addUser", String.valueOf(System.currentTimeMillis()), 15L)) {throw new Exception("正在操作中");}try {//2.逻辑处理User user1 = userMapper.queryByName(user.getName());if (user1 != null) {throw new Exception("该用户" + user.getName() + "已存在!");}for (int i = 0; i < 1000; i++) {for (int j = 0; j < 1000; j++) {logger.info("i*j={}", i * j);}}userMapper.add(user);} catch (Exception e) {redisService.deleteStr("addUser");throw e;} finally {redisService.unlock("addUser");}}
}

测试结果

一用户信息操作结果:

另一用户操作结果:

等待2分钟,该用户继续操作该数据,会提示“该用户已存在!”

http://www.yayakq.cn/news/408976/

相关文章:

  • 网站 用户体验 考虑网站排版图片
  • 芜湖酒店网站建设公司网址怎么做出来的
  • 网站排名优化查询wordpress最新版核心
  • 怎么在微信公众号建设微网站企业网站建设方案论文
  • 高端定制网站速度设计建设网站
  • 想要网站推广页面wordpress好用的模板下载
  • wordpress 调用数据库优化方案英语必修一答案
  • 平台下载素材网站开发做房产网站能赚钱吗
  • 关于网站建设文章做爰 网站
  • 清新区城乡建设局网站国外网站404错误页
  • 广州微信网站建设公司兼职网站建设招聘信息
  • 做铝板的网站网站注册商标属于哪一类
  • 怎么查看网站disallow西安网站制作建设
  • 网站建设与管理试卷 判断题wordpress怎么破解版
  • 企业画册设计排版重庆优化seo
  • 建站时网站地图怎么做网站建设费可摊几年
  • 虚拟机怎么做网站空间郑州免费网站建设哪家好
  • 国外做宠物用品的网站滨州哪里做网站
  • 郑州企业网站重庆市住房和城乡建设信息网官网
  • 扁平化颜色网站制作网站用什么软件好
  • 有什么网站做交流会新公司网站建设分录
  • 南海最新军事小红书关键词排名优化
  • 网站板块怎么做上海关键词排名优化公司
  • 在哪找做网站的ftp免费注册网站
  • 网站建设毕业设计本地wordpress 固定连接
  • 贵阳能做网站的公司无锡市太湖新城建设网站
  • 制作网站 公司百度商桥在网站
  • 青岛网站建站团队wordpress wp_enqueue_script
  • 网站制作与管理技术...163邮箱新用户注册
  • 青岛网站建设华夏海盐县建设门户网站