- 浏览: 67827 次
文章分类
最新评论
-
小色帝:
我是天才是打发
Jquery实现的Tabs页 -
小色帝:
小色帝 写道1111而温热
Jquery实现的Tabs页 -
小色帝:
1111而温热
Jquery实现的Tabs页
package com.dongnaoedu.tony.service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.connection.RedisStringCommands.SetOption;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.types.Expiration;
import org.springframework.stereotype.Component;
@Component
public class MiaoshaService {
private final Logger logger = LoggerFactory.getLogger(MiaoshaService.class);
@Autowired
StringRedisTemplate stringRedisTemplate;
@Autowired
DatabaseService databaseService;
/**
* 秒杀具体实现
*
* @param goodsCode
* 商品编码
* @param userId
* 用户ID
* @return
*/
public boolean miaosha(String goodsCode, final String userId) {
// 方案3: 频率限制
// 用户操作频率限制,5秒内允许访问一次
// set setnx setex
boolean value = stringRedisTemplate.execute(new RedisCallback<Boolean>() {
@Override
public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
Boolean result = connection.set(userId.getBytes(), "".getBytes(), Expiration.milliseconds(10000L),
SetOption.SET_IF_ABSENT);
return result;
}
});
if (!value) {
System.out.println("被限制操作频率啦,用户:" + userId);
return false;
}
// 方案4: 令牌机制
// 取令牌,拿到令牌的允许尝试购买
String token = stringRedisTemplate.opsForList().leftPop("token_list");
if (token == null || "".equals(token)) {
System.out.println("没抢到Token,不参与秒杀,用户:" + userId);
return false;
}
boolean result = databaseService.buy(goodsCode, userId);
System.out.println("秒杀结果:" + result);
return result;
}
}
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.connection.RedisStringCommands.SetOption;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.types.Expiration;
import org.springframework.stereotype.Component;
@Component
public class MiaoshaService {
private final Logger logger = LoggerFactory.getLogger(MiaoshaService.class);
@Autowired
StringRedisTemplate stringRedisTemplate;
@Autowired
DatabaseService databaseService;
/**
* 秒杀具体实现
*
* @param goodsCode
* 商品编码
* @param userId
* 用户ID
* @return
*/
public boolean miaosha(String goodsCode, final String userId) {
// 方案3: 频率限制
// 用户操作频率限制,5秒内允许访问一次
// set setnx setex
boolean value = stringRedisTemplate.execute(new RedisCallback<Boolean>() {
@Override
public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
Boolean result = connection.set(userId.getBytes(), "".getBytes(), Expiration.milliseconds(10000L),
SetOption.SET_IF_ABSENT);
return result;
}
});
if (!value) {
System.out.println("被限制操作频率啦,用户:" + userId);
return false;
}
// 方案4: 令牌机制
// 取令牌,拿到令牌的允许尝试购买
String token = stringRedisTemplate.opsForList().leftPop("token_list");
if (token == null || "".equals(token)) {
System.out.println("没抢到Token,不参与秒杀,用户:" + userId);
return false;
}
boolean result = databaseService.buy(goodsCode, userId);
System.out.println("秒杀结果:" + result);
return result;
}
}
发表评论
-
c3p0代码动态切换数据源
2018-08-06 17:54 1074public class PARPDatasource imp ... -
sql 优化开多个线程跑
2018-07-11 09:54 678select /*+ parallel(8) */ * fr ... -
Redis分布式锁解决抢购问题
2018-07-11 02:39 1327废话不多说,首先分享一个业务场景-抢购。一个典型的高并发问题, ... -
StringWriter 接收异常信息
2018-07-05 18:42 443try { int a=1/0; } catch (E ... -
RedisCacheServiceUtil
2018-06-29 15:06 379package com.paic.icorepnbs.web. ... -
jedis 操作redis
2018-06-26 09:13 368//连接redis ,redis的默认端口是6379 Je ... -
多线程缓存优化思想
2018-06-06 15:33 3621.背景 题库 随机生成N张试卷,每张试卷M个题目,每个题目要 ... -
网络编程之使用HttpClient批量上传文件
2018-05-28 01:12 540网络编程之使用HttpClient批量上传文件(一) 2014 ... -
oracle 正则表达式 替换 ‘’:
2018-05-18 18:04 578select /*+ parallel(8) */ t.na ... -
java web 导出 下拉 excle
2018-05-15 17:03 457@RequestMapping(value = "/ ... -
Java Socket编程
2016-12-28 23:28 338对于Java Socket编程而言,有两个概念,一个是Serv ... -
Java多线程学习(吐血超详细总结)
2016-12-27 17:15 415目录(?)[-] 1.一扩展javalangThread类 2 ... -
JAVA多线程实现的三种方式
2016-12-27 17:16 417Java多线程实现方式主要有三种:继承Thread类、实现Ru ... -
Maven 入门菜鸟教程
2016-12-02 10:02 1174学习maven的使用,看到一篇很实用的入门教程(菜鸟级入门) ... -
Java 读写Properties配置文件
2016-08-22 15:00 402Java 读写Properties配置文件 1.Pro ... -
JAVA前端与后端参数传递方法小结
2016-07-26 10:54 46561,从Action中传值到JSP页面的方法 ①在Actio ... -
苟富贵
2013-02-25 09:43 0额梵蒂冈过v梵蒂冈北方多汇报地方环保 -
Request的getParameter和getAttribute方法的区别
2013-01-22 10:01 649HttpServletRequest.getParameter ... -
Eclipse快捷键小结
2012-12-26 11:26 735Eclipse快捷键小结 Eclipse ... -
JAVA去空格
2012-12-20 16:53 652String ccc=” he l l o , w o r l ...
相关推荐
综上所述,这个项目涉及使用Go语言和Redis实现分布式令牌桶算法,目的是实现速率限制和网络拥塞控制。通过在Go中设计相应的数据结构和算法,并利用Redis的分布式特性,可以构建出一个健壮且高效的系统,适用于大型...
秒杀是电商系统非常常见的...本教程采用:redis中list类型达到令牌机制完成秒杀。用户抢redis中的令牌,抢到 令牌的用户才能进行支付,支付成功之后可以生成订单,如果一定时间之内没有支 付那么就由定时任务来归还令牌
重新限制描述一个简单的 redis 支持的速率限制器。 这是基于和 。 桶不断地重新装满令牌。 这意味着设置 1000 毫秒的interval和 10 个请求的maxInInterval将以每秒 10 个令牌(每 0.1 秒 1 个令牌)的速率填充令牌。...
系统在运行过程中,如遇上某些活动,访问的人数会在一瞬间内爆增,导致服务器瞬间压力飙升,使系统超...本文介绍php基于redis,使用令牌桶算法,实现访问流量的控制,提供完整算法说明及演示实例,方便大家学习使用。
ServiceStack.Redis版本:5.14.0 使用方法:替换nuget包中ServiceStack.Text.dll即可
Redis 事物(下).flv
Redis可以用来存储令牌的数量和上一次添加令牌的时间。 以下是一个简单的实现思路: 1. 在每个请求到达时,获取当前时间戳。 2. 计算自上次添加令牌以来应该添加的令牌数。 3. 如果桶中的令牌数量小于这个值,使用...
总的来说,ServiceStack.Redis(5.8.1.0)是一个针对高并发需求优化的Redis客户端,取消了操作限制,更适合大规模应用和高性能场景。如果你的应用需要频繁且无限制地访问Redis,这个版本是一个不错的选择。在使用时,...
这个"ServiceStack.Redis 去除6000限制版本"指的是开发者可能已经修改了原始的ServiceStack.Redis库,移除了连接数目的硬性限制,通常是6000个并发连接。 在原版ServiceStack.Redis库中,可能由于某些设计考量或...
ServiceStack.Redis无6000限制已经编译后的版本
本文以“第61天:权限提升-Redis&Postgre&令牌窃取&进程注入1”为主题,探讨了四种不同的提权策略,分别是通过数据库应用提权、Redis数据库权限提升、PostgreSQL数据库权限提升以及Windows系统的令牌窃取和进程注入...
redis部署6.2.6最新稳定版文档和程序redis部署6.2.6最新稳定版文档和程序redis部署6.2.6最新稳定版文档和程序redis部署6.2.6最新稳定版文档和程序redis部署6.2.6最新稳定版文档和程序redis部署6.2.6最新稳定版文档和...
总的来说,"Go-rerate"是一个实用的工具,它结合了Go语言的高效和Redis的分布式特性,为开发者提供了一种简单而强大的方式来管理和限制应用程序的速率,有助于维护系统的稳定性和安全性。通过深入理解和使用这个库,...
总结来说,"Redis Spring 并发限制动态代理"是利用Spring的AOP和线程池技术,为Redis操作提供了一种安全、高效的并发解决方案。动态代理保证了连接的生命周期管理,线程池则控制了并发访问的规模,防止资源过度消耗...
Redis是一种高性能的键值对数据存储系统,常用于实现数据库、缓存和消息中间件等功能。它以内存存储为主,支持持久化,确保在系统崩溃或重启后数据不会丢失。Redis提供了丰富的数据类型,包括字符串、哈希、列表、...
令牌到期时间可以由Redis完全管理。 您可以通过从Redis中删除令牌来使令牌无效。 您可以推迟令牌过期。 没有回调。 所有函数都返回Promises。 安装 npm install jsonwebtoken - redis 快速开始 const Redis = ...
ServiceStack.Redis 4.5.0.0 已解除license限制
在PHP开发中,当面临高并发访问同一资源的情况时,为避免数据冲突和不一致,我们需要采取...通过阅读和理解`RedisLock.class.php`和`demo.php`的内容,开发者可以更好地掌握如何在PHP项目中应用这种并发访问限制技术。
Redis是一个开源的、基于内存的数据结构存储系统,它可以作为数据库、缓存和消息代理。 描述中提到的“根据自己的系统环境选择不同的redis拓展进行安装”,意味着在实际操作中,我们需要考虑运行PHP的服务器操作...