最近项目中有个需求,需要在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(); } } } } }
相关推荐
在秒杀场景中,通过Redis Stream,可以将用户请求放入消息队列,后台服务异步处理下单逻辑,避免因高并发导致的系统性能瓶颈。生产者(如前端服务)将秒杀请求写入Stream,消费者(如订单服务)通过XREADGROUP命令...
当用户发送消息时,通过Thinkphp6将消息写入Redis队列,GatewayWorker监听队列,接收到消息后立即推送给相应的客户端,实现聊天的实时传输。 此外,项目可能还涉及到数据库设计,如MySQL或其他类型数据库的使用,...
同时,后台任务可以从队列中取出数据,批量写入MySQL,批量操作能显著提升数据库操作的效率。 在MySQL这边,为了优化写入性能,可以考虑以下策略: 1. 使用批量插入:将从队列中取出的多个数据一次性插入,减少...
消息被发送到队列中,“消息队列”是在消息的传输过程中保存消息的容器。在目前广泛的Web应用中,都会出现一种场景:在某一个时刻,网站会迎来一个用户请求的高峰期(比如:淘宝的双十一购物狂欢节,12306的春运抢票...
例如,如何优化Redis性能、如何设计数据模型以提高效率、如何利用Redis实现消息队列、如何在分布式环境中使用Redis等。这本书籍将理论与实践相结合,帮助读者解决实际开发中的问题,提升解决问题的能力。 在Redis的...
这样,当需要记录日志时,可以通过`RedisTemplate`将日志写入到Redis的List中。 在日志处理方面,可以使用AOP(面向切面编程)来实现。创建一个切面类,如`SysLogAspect`,使用`@Pointcut`定义切入点,捕获需要记录...
【标签】"redis" 是本学习资源的核心,Redis是一款开源、高性能的键值存储系统,常用于数据缓存、消息队列、数据库等场景,尤其在处理高并发读写时表现出色。 【压缩包子文件的文件名称列表】揭示了具体的学习内容...
* 使用Redis实现消息队列:通过使用Redis的列表类型,实现一个简单的消息队列,用于处理后台任务和异步操作。 * 使用Redis实现排行榜功能:通过使用Redis的有序集合类型,实现用户积分排行榜功能,方便对用户进行...
1. **为何需要消息队列**:消息队列解耦生产者和消费者,提供异步通信,处理高并发场景。 2. **Kafka与RabbitMQ对比**:Kafka更适合大数据实时处理,RabbitMQ适合简单消息传递。 3. **Kafka概念**:分区和副本提供...
定义:Redis是一个开源的、高性能的、基于键值对的缓存与存储系统,它使用内存作为主要存储介质,同时也支持将数据异步写入硬盘以实现持久化。 特点:高性能、高并发、丰富的数据类型支持(如字符串、列表、散列、...
4. lpop方法$value=$redis->lpop('register_success'):从列表的头部移除并返回一个元素,实现在队列中读取消息。 5. incr方法$redis->incr('register_num'):将key对应的数字值增一,用于统计计数。 知识点四:...
测试通常会涵盖各种操作,如写入、读取、更新和删除数据,以及并发访问场景下的性能测试。测试过程中,我们还需要关注Redis的连接管理、过期策略、数据一致性等方面。 最后,"redis"文件可能是Redis服务器的配置...
- Redis Cluster:提供分布式存储,自动分区,支持多节点同时写入。 9. **Redis 在实际应用中的角色** - 缓存:快速响应常见请求,减轻后端数据库压力。 - 消息队列:在服务间传递消息,解耦系统。 - 计数器:...
Redis是一个内存数据结构存储系统,由于数据存储在内存中,读写速度极快,非常适合处理高并发场景。在秒杀系统中,Redis主要承担以下几个关键角色: 1. **快速计数**:利用`INCR`或`INCRBY`命令对商品库存进行递增...
- **消息队列:** Redis可以通过列表数据结构实现高效的消息队列服务。 - **缓存服务:** 作为高速缓存层,减少后端数据库的压力。 #### 三、Redis的数据类型及操作 1. **Strings(字符串)** - `SET key value...
在MQTT消息处理中,Redis可以作为消息队列来缓存接收到的消息,确保即使在高并发情况下也能有效地处理和分发消息。此外,Redis的发布/订阅功能与MQTT的发布/订阅模式相结合,可以实现实时消息的传递,提升系统的响应...
与Memcached不同的是,Redis提供了数据的持久化功能,即可以通过多种策略将内存中的数据定期或实时地写入磁盘,从而在系统重启后仍然能够保持数据的完整性。此外,Redis不仅支持简单的键值对存储,还支持包括集合、...
- **数据持久化**:与仅支持内存存储的Memcached不同,Redis支持将数据周期性地写入磁盘或通过追加记录文件的方式实现数据的持久化。此外,Redis还支持主从复制机制(master-slave replication),使得数据能够在多个...
Redis具有很好的并发处理能力,可用来构建缓存系统、消息队列、排行榜等。由于其开源、支持分布式、使用简单、功能丰富等特点,越来越受到开发者的青睐。 在架构方面,Redis可以作为一个独立的服务运行在自己的...
- **内存存储**: Redis直接将数据存储在内存中,提供极高的读写速度。 - **非阻塞I/O**: 使用事件驱动模型,避免I/O操作阻塞整个服务器进程。 ##### 1.3.5 提供API的语言 - **支持语言**: Redis支持多种编程语言,...