最近项目中有个需求,需要在redis缓存中存储计数功能,计数应用中的异常数据,到达一定阈值的时候发送邮件 短信警报处理。
由于redis中并发没有锁功能,所以并发写数据时将value值写入到队列中。
import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class RedisCur { public static void main(String[] args) { List<Future> futures = new ArrayList<Future>(); ExecutorService executorService = Executors.newCachedThreadPool(); for (int i = 0; i < 100; i++) { futures.add(executorService.submit(new WriteRedis(String.valueOf(i)))); } } } public class WriteRedis implements Runnable { private String value; /** * @param value */ public WriteRedis(String value) { super(); this.value = value; } public void run(){ Jedis jedisClient = new Jedis("127.0.0.1", 6379); try { String threadName = Thread.currentThread().getName(); jedisClient.lpush("LOCK", value); System.err.println(threadName + "-" + value); } catch (Exception e) { e.printStackTrace(); } } }
以上代码通过并发将值写入到队列中
后面是另起一个线程读取队列中的value值进行计数功能,目前能想到的比较简单,起了个线程一直去请求队列中的信息。
本来是想做个监听的功能,队列中有数据是推送过来,但是redis没有更新推送类似消息队列的功能,暂且搞个简单的,后续看看是否还有其他的办法
public class RedisListener { public static void main(String[] args) { Listener thread1 = new Listener(); thread1.start(); } } import redis.clients.jedis.Jedis; public class Listener extends Thread { @Override public void run() { Jedis jedisClient = new Jedis("127.0.0.1", 6379); while (true) { String value = jedisClient.lpop("LOCK"); System.err.println(value); if (value == null) { try { System.err.println("================移除完成"); Thread.sleep(1000); System.err.println("================继续监控"); } catch (InterruptedException e) { e.printStackTrace(); } } } } }
相关推荐
消息被发送到队列中,“消息队列”是在消息的传输过程中保存消息的容器。在目前广泛的Web应用中,都会出现一种场景:在某一个时刻,网站会迎来一个用户请求的高峰期(比如:淘宝的双十一购物狂欢节,12306的春运抢票...
·高并发场景,当某个时刻请求瞬间增加时,可以把请求写入到队列,后台在去处理这些请求 ·抢购场景,先入先出的模式 命令: rpush + blpop 或 lpush + brpop rpush : 往列表右侧推入数据 blpop : 客户端阻塞直到...
* 传感器提交Data数据时使用添加缓存,不直接操作数据库,而是将Data添加到Redis中形成缓存队列,提高并发效率 * 将用户登录信息不直接存入session,而是存入Redis缓存,以实现分布式session共享 * 3.提交Data数据...
使用关系型数据库的站点达到一定并发量的时候,往往在磁盘IO上会有瓶颈,这时候配合redis就有一定的优势,因为它具有以下几个特性: 基于内存运行,高并发读写; 支持分布式,理论上可以无限扩展; 丰富的数据...
28_你能说说redis的并发竞争问题该如何解决吗? 29_你们公司生产环境的redis集群的部署架构是什么样的? 30_分布式缓存相关面试题的回答技巧总结 31_体验一下面试官可能会对分布式系统发起的一串连环炮 32_为什么要...
利用scrapy+scrapy-redis+selenium爬取aqi天气网全国所有城市的天气信息近50W条scrapy主要用来做并发,非selenium渲染页面下的请求和存储io操作redis可以做增量(城市链接不做指纹)或分布式(继承scrapyredis爬虫类...
* 传感器提交Data数据时使用添加缓存,不直接操作数据库,而是将Data添加到Redis中形成缓存队列,提高并发效率 * 将用户登录信息不直接存入session,而是存入Redis缓存,以实现分布式session共享 * 3.提交Data数据...
存储框架:消息队列(可以实时读取&可以实时写入) ODS:Kafka 使用场景:每过来一条数据,读取到并加工处理 DIM:HBase 使用场景:事实表会根据主键获取一行维表数据(1.永久存储、2.根据主键查询) Kafka:不能长期存储,有...
你或许会问,incr是原子操作吗,能保证不会出现并发问题吗,不是说了吗,server端是单线程处理请求的。 三、 【跨jvm的锁实现【watch】【multi】】 首先说下这个问题的使用场景,有些时候我们业务逻辑是在不同的jvm...
项目开发完成上线,用户访问量寥寥无几。有一定用户访问量,单台服务器性能有些吃力,想提高并发能力,增加一台服务器,将HTTP请求与SQL操作负载分散不同服务器。...c)增加消息队列和清理Cache程序,入库同时也写入消息
多线程与并发 GC机制 GC收集器类型 串行 CMS 并行 G1 算法 复制 标记清理 标记整理 分区 新生代 eden survivor 老年代(old区) 永久代(perm区) 版本变化 1.5 1.6 1.7 1.8 1.9 IO/NIO IO...
缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...
缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...
缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...
缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...
缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...
缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...
缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...
缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...