spring-data-redis 怎么监听消息队列有消息来了

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring-data-redis 怎么监听消息队列有消息来了相关的知识,希望对你有一定的参考价值。

pom.xml中添加如下配置
添加版本配置
<properties>
<jedis.version>2.8.1</jedis.version>
<spring-data-redis.version>1.7.2.RELEASE</spring-data-redis.version>
<commons-pool2.version>2.2</commons-pool2.version>
</properties>
<!-- jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>$jedis.version</version>
</dependency>

<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>$commons-pool2.version</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-redis -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>$spring-data-redis.version</version>
</dependency>

properties文件中添加如下配置
#redis配置
redis.host=192.168.1.150
redis.port=6379
redis.password=redis
redis.timeout=2000
redis.max_total=100
redis.max_idle=20
redis.min_idle=5
redis.test_on_borrow=true
redis.test_on_return=true

applicationContext.xml中添加如下配置:
<!-- Jedis 连接池配置-->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxIdle" value="$redis.max_idle" />
<property name="maxTotal" value="$redis.max_total"/>
<property name="minIdle" value="$redis.min_idle"/>
<property name="testOnBorrow" value="$redis.test_on_borrow" />
<property name="testOnReturn" value="$redis.test_on_return"/>
</bean>

<!-- Jedis ConnectionFactory 数据库连接配置,注意id名称必须为redisConnectionFactory-->
<bean id="redisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="hostName" value="$redis.host" />
<property name="port" value="$redis.port" />
<property name="password" value="$redis.password" />
<property name="poolConfig" ref="jedisPoolConfig" />
</bean>

定义消息发送者(生产者):
@Component
public class SendMessage

@Autowired
private RedisTemplate<String, Object> redisTemplate;

public void sendMessage(String channel, Serializable message)
redisTemplate.convertAndSend(channel, message);



定义消息处理者(消费者):
public class ListenMessage
public void handleMessage(Serializable message)
System.out.println(message);



调用:/queue/redis
@Controller
@RequestMapping(value = "/queue")
public class QueueController

@Autowired
SendMessage sendMessage;

@RequestMapping(value="/redis")
public void redis()
for (int i = 0; i <1000; i++)
sendMessage.sendMessage("java",i);


参考技术A 1. redis中保存的是数组(序列化),绝对不要保存SQL,保存SQL的方法很蛋疼 保存数组是为了数据库安全(万一sql语句有错误,任务就直接失败了),灵活度和兼容性2. 服务器后台作一个shell脚本,死循环,不断从队列中取数据,进行处理.如次反复,如果没有数据,也立即尝试取数据---不要担心性能问题,后台单并发请求,不会造成性能问题3. 因为队列中保存的是数组,不存在这个问题

spring-data-redis以List方式存储,怎么删除缓存数据

您好:先回答您最重要的问题:组RAID是必须要把硬盘格式化的,现在没有一种方式可以不删除数据的情况下组建RAID,所以必须备份您的数据。然后下面是建议:1,RAID1没有任何硬盘性能的提高,只能提高数据安全性,因为是镜像,每一块硬盘都有一份数据,所以两块硬盘只有一块的容量。2,你这样只能组RAID0,因为两块硬盘只能做RAID0和1。RAID0能提高读和写的效率,但是数据安全性不高。所以给您的建议是 备份数据,组RAID0.只有这一种方法能提高。希望我的回答对您有帮助! 参考技术A @Override
public boolean removeListAll(final K key)
return redisTemplate.execute(new RedisCallback<Boolean>()
public Boolean doInRedis(RedisConnection connection) throws DataAccessException
long res = redisTemplate.opsForList().remove(key, -1, null);
return res >= 0 ? true : false;

);


此方法里就是
redisTemplate.opsForList().remove(key, -1, null);
这句不能实现功能.
在ListOperations接口里,都是pop相关的方法,但是也没看到执行批量操作的方法本回答被提问者采纳
参考技术B 使用remove来试试

以上是关于spring-data-redis 怎么监听消息队列有消息来了的主要内容,如果未能解决你的问题,请参考以下文章

Rabbitmq的五种模式

Spring Boot + spring-data-redis

kafka专栏如何做以消息队列为核心的应用程序开发(含视频)

spring-data-redis以List方式存储,怎么删除缓存数据

Jedis & spring-data-redis

php 后台怎么开一个进程监听Redis的队列消息呢?用while