【redis】在spring boot2.0中使用redis的StringRedisTemplate 自动注入@Autowired
1.使用opv.increment 达到增量的效果【判断某个用户 是第几次做这种操作】
@RequestMapping("createCode")
@RestController
public class CreateCodeController {
@Autowired
StringRedisTemplate stringRedisTemplate;
public static final String TEN_CODE_GLOBAL_KEY_IN_REDIS = "PISEN-CLOUD-LUNA-SECURITY-CODE-TEN-GLOBAL:";
@RequestMapping("getCode")
public UniVerResponse<String> createCode(){
String uid = "test";
//使用hashmap实现同步锁
//这里uid可以是
// 1>使用者的uid,标明 同一个使用者同一时间只能有一个获取码的任务
// 2>任务单的uid,标明 一个使用者如果有不同的任务单,可以保证一个用户的多个任务单的每一个任务单只能有一个获取码的任务
synchronized(HashMapLock.getLock(uid)){
UniVerResponse<String> res = new UniVerResponse<>();
//区分用户的基础序列值
String serialNumber = "";
//1.例如:user.id是数据库自增的
//2.例如本user想要下载防伪码,那么先取出他的id
//3.例如id = 10L 或者用户id可以是1000L
Long id = 99L;
String str2 = CreateCode.fmtStringAddZero(id,3,"0");
//使用redis的增量方法 达到每次用户调用这个获取码 都会次数+1
ValueOperations<String, String> opv = stringRedisTemplate.opsForValue();
//[key:value] [PISEN-CLOUD-LUNA-SECURITY-CODE-TEN-GLOBAL:099 : 次数]
String str1 = opv.increment(TEN_CODE_GLOBAL_KEY_IN_REDIS + str2, 1).toString();
str1 = CreateCode.fmtStringAddZero(str1,3,"0");
serialNumber = str1 + str2;
//生成 20个不重复的code
List<String> codeList = CreateCode.getCode(serialNumber,2000);
for (String s : codeList) {
System.out.println(s);
}
res.beTrue("成功");
return res;
}
}
【redis】在spring boot2.0中使用redis的StringRedisTemplate 自动注入@Autowired的更多相关文章
- Spring Boot2.0+中,自定义配置类扩展springMVC的功能
在spring boot1.0+,我们可以使用WebMvcConfigurerAdapter来扩展springMVC的功能,其中自定义的拦截器并不会拦截静态资源(js.css等). @Configur ...
- Spring Boot2.0之 整合Redis集群
项目目录结构: pom: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http:// ...
- Spring Boot2.0之 整合Redis事务
Redis事物 Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证: 事务是一个单独的隔离操作:事务中的所有命令都会序列化.按顺序地执行.事务在执行的过程中,不会被其他客户端发送来的命 ...
- Spring Boot2.0之整合Redis
需要的maven依赖 jar包,是对Jedis的封装 maven依赖: <project xmlns="http://maven.apache.org/POM/4.0.0" ...
- spring boot 2.0(一)权威发布spring boot2.0
Spring Boot2.0.0.RELEASE正式发布,在发布Spring Boot2.0的时候还出现一个小插曲,将Spring Boot2.0同步到Maven仓库的时候出现了错误,然后Spring ...
- Spring Boot2.0 设置拦截器
所有功能完成 配置登录认证 配置拦截器 在spring boot2.0 之后 通过继承这个WebMvcConfigurer类 就可以完成拦截 新建包com.example.interceptor; 创 ...
- Spring Boot2.0 静态资源被拦截问题
在Spring Boot2.0+的版本中,只要用户自定义了拦截器,则静态资源会被拦截.但是在spring1.0+的版本中,是不会拦截静态资源的. 因此,在使用Spring Boot2.0+时,配置拦截 ...
- Spring Boot2.0使用Spring Security
一.Spring Secutity简介 Spring 是一个非常流行和成功的 Java 应用开发框架.Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性 ...
- Spring Boot2.0 整合 Kafka
Kafka 概述 Apache Kafka 是一个分布式流处理平台,用于构建实时的数据管道和流式的应用.它可以让你发布和订阅流式的记录,可以储存流式的记录,并且有较好的容错性,可以在流式记录产生时就进 ...
随机推荐
- 包装类、基本数据类型及String类之间的相互转换
包装类:8种基本数据类型对应一个类,此类即为包装类 一.基本数据类型 包装类 及String之间的转换 1.基本数据类型转化为包装类:调用包装类的构造器 int i=10; Inte ...
- [How to] UILocalNotification 的使用
1.简介 IOS共分为本地和远程通知两种通知,本问介绍本地通知UILocalNotification的基本使用方法. 2.本地通知的实现: 步骤一:新建工程 在Xcode中新建一个single vie ...
- c语言中数组,指针数组,数组指针,二维数组指针
1.数组和指针 ] = {,,,,};// 定义数组 // 1. 指针和数组的关系 int * pa = array; pa = array; // p[0] == *(p+0) == array[0 ...
- MySQL建立高性能索引策略
索引永远是最好的查询解决方案嘛? 索引并不总是最好的工具.总的来说,只有当索引帮助存储引擎快速查找到记录带来的好处大于其带来的额外工作(比如插入操作后索引的维护)时,索引才是高效的. 对于非常小的表: ...
- ES Java 客户端
标签(空格分隔): ES Java 客户端 节点客户端(node client): 节点客户端本身也是一个ES节点(一般不保存数据,不能成为主节点),它能以无数据节点身份加入到集群中.因为它是集群环境 ...
- Restful Framework 初识
目录 一.什么是RESTful 二.什么是API 三.RESTful API规范 四.基于Django实现API 五.基于Django Rest Framework框架实现 一. 什么是RESTful ...
- bootstrap3中container与container_fluid容器的区别
声明:转自 CSDN博客 .container与.container_fluid是bootstrap中的两种不同类型的外层容器,按照官方的说法,这两者的区别是: .container 类用于固定宽度并 ...
- ZIP排除指定目录进行压缩
zip -r glog-0.3.5.zip glog-0.3.5/ -x "glog-0.3.5/doc/*" unzip -v glog-0.3.5.zip 进行查看ZIP的内 ...
- PHP 边执行边输出
<?php for ($i = 1; $i <= 5; $i++) { print "#$i 完毕<hr>"; sleep(1); print str_pa ...
- AndroidStudio运行项目出现DELETE_FAILED_INTERNAL_ERROR和INSTALL_CANCELED_BY_USER
以上的错误为:无法将AS中的代码放到手机上 解决:File->Settings->Build,Execuion,Deployment->Instant Run然后把Enable In ...