您现在的位置是:Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款 > 

01 redis的發布訂閱業務場景(redis適合什么場景)

Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款2024-05-17 01:21:54【】8人已围观

简介Redis都有哪些應用場景?緩存:這應該是Redis最主要的功能了,也是大型網站必備機制,合理地使用緩存不僅可以加快數據的訪問速度,而且能夠有效地降低后端數據源的壓力。共享Session:對于一些依賴

Redis 都有哪些應用場景?

緩存:這應該是 Redis 最主要的功能了,也是大型網站必備機制,合理地使用緩存不僅可以加 快數據的訪問速度,而且能夠有效地降低后端數據源的壓力。

共享Session:對于一些依賴 session 功能的服務來說,如果需要從單機變成集群的話,可以選擇 redis 來統一管理 session。

消息隊列系統:消息隊列系統可以說是一個大型網站的必備基礎組件,因為其具有業務 解耦、非實時業務削峰等特性。Redis提供了發布訂閱功能和阻塞隊列的功 能,雖然和專業的消息隊列比還不夠足夠強大,但是對于一般的消息隊列功 能基本可以滿足。比如在分布式爬蟲系統中,使用 redis 來統一管理 url隊列。

分布式鎖:在分布式服務中。可以利用Redis的setnx功能來編寫分布式的鎖,雖然這個可能不是太常用。

當然還有諸如排行榜、點贊功能都可以使用 Redis 來實現,但是 Redis 也不是什么都可以做,比如數據量特別大時,不適合 Redis,我們知道 Redis 是基于內存的,雖然內存很便宜,但是如果你每天的數據量特別大,比如幾億條的用戶行為日志數據,用 Redis 來存儲的話,成本相當的高。

------------------------------------------------

緩存:這應該是 Redis 最主要的功能了,也是大型網站必備機制,合理地使用緩存不僅可以加 快數據的訪問速度,而且能夠有效地降低后端數據源的壓力。

共享Session:對于一些依賴 session 功能的服務來說,如果需要從單機變成集群的話,可以選擇 redis 來統一管理 session。

消息隊列系統:消息隊列系統可以說是一個大型網站的必備基礎組件,因為其具有業務 解耦、非實時業務削峰等特性。Redis提供了發布訂閱功能和阻塞隊列的功 能,雖然和專業的消息隊列比還不夠足夠強大,但是對于一般的消息隊列功 能基本可以滿足。比如在分布式爬蟲系統中,使用 redis 來統一管理 url隊列。

分布式鎖:在分布式服務中。可以利用Redis的setnx功能來編寫分布式的鎖,雖然這個可能不是太常用。 當然還有諸如排行榜、點贊功能都可以使用 Redis 來實現,但是 Redis 也不是什么都可以做,比如數據量特別大時,不適合 Redis,我們知道 Redis 是基于內存的,雖然內存很便宜,但是如果你每天的數據量特別大,比如幾億條的用戶行為日志數據,用 Redis 來存儲的話,成本相當的高。

spring-redis 發布訂閱模式:發布一條消息收到了兩條,重復監聽

當你看到這個文章時,想必已經了解了一些關于spring-redis發布訂閱方面的知識,如果你也遇到同樣的問題

那么請考慮spring在啟動時有沒有重復的加載配置文件

具體的方式可以在 AbstractApplicationContext 的 refresh() 方法中打斷點,如果走了兩次,說明配置文件加載了兩遍

而配置文件加載兩遍的原因是因為web.xml中DispatcherServlet和ContextLoaderLinistener 共用了 某些配置文件導致的。

redis適合什么場景

redis適合什么場景?

1、緩存

緩存現在幾乎是所有中大型網站都在用的必殺技,合理的利用緩存不僅能夠提升網站訪問速度,還能大大降低數據庫的壓力。Redis提供了鍵過期功能,也提供了靈活的鍵淘汰策略,所以,現在Redis用在緩存的場合非常多。(推薦:《Redis視頻教程》)

2、排行榜

很多網站都有排行榜應用的,如京東的月度銷量榜單、商品按時間的上新排行榜等。Redis提供的有序集合數據類構能實現各種復雜的排行榜應用。

3、計數器

什么是計數器,如電商網站商品的瀏覽量、視頻網站視頻的播放數等。為了保證數據實時效,每次瀏覽都得給+1,并發量高時如果每次都請求數據庫操作無疑是種挑戰和壓力。Redis提供的incr命令來實現計數器功能,內存操作,性能非常好,非常適用于這些計數場景。

4、分布式會話

集群模式下,在應用不多的情況下一般使用容器自帶的session復制功能就能滿足,當應用增多相對復雜的系統中,一般都會搭建以Redis等內存數據庫為中心的session服務,session不再由容器管理,而是由session服務及內存數據庫管理。

5、分布式鎖

6、 社交網絡

點贊、踩、關注/被關注、共同好友等是社交網站的基本功能,社交網站的訪問量通常來說比較大,而且傳統的關系數據庫類型不適合存儲這種類型的數據,Redis提供的哈希、集合等數據結構能很方便的的實現這些功能。

7、最新列表

Redis列表結構,LPUSH可以在列表頭部插入一個內容ID作為關鍵字,LTRIM可用來限制列表的數量,這樣列表永遠為N個ID,無需查詢最新的列表,直接根據ID去到對應的內容頁即可。

8、消息系統

消息隊列是大型網站必用中間件,如ActiveMQ、RabbitMQ、Kafka等流行的消息隊列中間件,主要用于業務解耦、流量削峰及異步處理實時性低的業務。Redis提供了發布/訂閱及阻塞隊列功能,能實現一個簡單的消息隊列系統。另外,這個不能和專業的消息中間件相比。

Spring Boot使用Redis進行消息的發布訂閱 原創

/

**

* Redis 相關的配置,包含推送,以及對象編碼的定義

*/

@Configuration

public class RedisConfig {

public @Bean

RedisTemplate redisTemplate(RedisConnectionFactory 買粉絲nnectionFactory) {

RedisTemplate template = new RedisTemplate>();

template.setConnectionFactory(買粉絲nnectionFactory);

template.setDefaultSerializer(new GenericJackson2JsonRedisSerializer());

template.setKeySerializer(new StringRedisSerializer());

template.setHashKeySerializer(new GenericJackson2JsonRedisSerializer());

template.setValueSerializer(new GenericJackson2JsonRedisSerializer());

return template;

}

@Bean

ChannelTopic topic() {

return new ChannelTopic("messageQueue");

}

@Bean

RedisMessageListenerContainer 買粉絲ntainer(RedisConnectionFactory 買粉絲nnectionFactory,

MessageListenerAdapter listenerAdapter) {

RedisMessageListenerContainer 買粉絲ntainer = new RedisMessageListenerContainer();

買粉絲ntainer.setConnectionFactory(買粉絲nnectionFactory);

買粉絲ntainer.addMessageListener(listenerAdapter, new PatternTopic("messageQueue"));

return 買粉絲ntainer;

}

@Bean

MessageListenerAdapter listenerAdapter(Receiver receiver) {

return new MessageListenerAdapter(receiver, "receiveMessage");

}

}

public enum BusinessTypeEnum {

//修改SystemConfig緩存

UPDATE_SYSTEM_CONFIG;

}

//發布者接口

public interface MessagePublisher {

void publish(String message);

}

@Component

public class RedisMessagePublisher implements MessagePublisher{

private final static Logger logger = LoggerFactory.getLogger(RedisMessagePublisher.class);

@Autowired

private RedisTemplate redisTemplate;

@Autowired

private ChannelTopic topic;

@Override

public void publish(String message) {

logger.info("推送信息:"+message);

redisTemplate.買粉絲nvertAndSend(topic.getTopic(), message);

}

}

public interface Receiver { void receiveMessage(String message); }

@Component

public class MessageReceiver implements Receiver {

private final static Logger logger = LoggerFactory.getLogger(MessageReceiver.class);

@Autowired

private ISystemConfigService systemConfigService;

@Override

public void receiveMessage

很赞哦!(3321)

Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款的名片

职业:程序员,设计师

现居:广东清远清新县

工作室:小组

Email:[email protected]