Do you need Redis? PostgreSQL does queuing, locking, and pub/sub

There’s a tried-and-true architecture that I’ve seen many times for supporting your web services and applications:

  • PostgreSQL for data storage
  • Redis for coordinating background job queues (and some limited atomic operations)

Redis is fantastic, but what if I told you that its most common use cases for this stack could actually be achieved using only PostgreSQL?

Use Case 1: Job Queuing

Perhaps the most common use of Redis I’ve seen is to coordinate dispatching of jobs from your web service to a pool of background workers. The concept is that you’d like to record the desire for some background job to be performed (perhaps with some input data) and to ensure that only one of your many background workers will pick it up. Redis helps with this because it provides a rich set of atomic operations for its data structures.

But since the introduction of version 9.5, PostgreSQL has a SKIP LOCKED option for the SELECT ... FOR ...statement (here’s the documentation). When this option is specified, PostgreSQL will just ignore any rows that would require waiting for a lock to be released.

Consider this example from the perspective of a background worker:


BEGIN;

WITH job AS (
  SELECT
    id
  FROM
    jobs
  WHERE
    status='pending'
  LIMIT 1
  FOR UPDATE SKIP LOCKED
)
UPDATE
  jobs
SET
  status='running'
WHERE
  jobs.id=job.id
RETURNING
  jobs.*;
  
COMMIT;

By specifying FOR UPDATE SKIP LOCKED, a row-level lock is implicitly acquired for any rows returned from the SELECT. Further, because you specified SKIP LOCKED, there’s no chance of this statement blocking on another transaction. If there’s another job ready to be processed, it will be returned. There’s no concern about multiple workers running this command receiving the same row because of the row-level lock.

The biggest caveat for this technique is that, if you have a large number of workers trying to pull off this queue and a large number of jobs feeding them, they may spend some time stepping through jobs and trying to acquire a lock. In practice, most of the apps I’ve worked on have fewer than a dozen background workers, and the cost is not likely to be significant.

Use Case 2: Application Locks

Let’s imagine that you have a synchronization routine with a third-party service, and you only want one instance of it running for any given user across all server processes. This is another common application I’ve seen for Redis: distributed locking.

PostgreSQL can achieve this as well using its advisory locks. Advisory locks allow you to leverage the same locking engine PostgreSQL uses internally for your own application-defined purposes.

Use Case 3: Pub/Sub

I saved the coolest example for last: pushing events to your active clients. For example, say you need to notify a user that they have a new message available to read. Or perhaps you’d like to stream data to the client as it becomes available. Typically, web sockets are the transport layer for these events while Redis serves as the Pub/Sub engine.

However, since version 9, PostgreSQL also provides this functionality via the LISTEN and NOTIFY statements. Any PostgreSQL client can subscribe (LISTEN) to a particular message channel, which is just an arbitrary string. When any other client sends a message (NOTIFY) on that channel, all other subscribed clients will be notified. Optionally, a small message can be attached.

If you happen to be using Rails and ActionCable, using PostgreSQL is even supported out of the box.

Taking Full Advantage of PostgreSQL

Redis fundamentally fills a different niche than PostgreSQL and excels at things PostgreSQL doesn’t aspire to. Examples include caching data with TTLs and storing and manipulating ephemeral data.

However, PostgreSQL has a lot more capabilities than you may expect when you approach it from the perspective of just another SQL database or some mysterious entity that lives behind your ORM.

There’s a good chance that the things you’re using Redis for may actually be good tasks for PostgreSQL as well. It may be a worthy tradeoff to skip Redis and save on the operational costs and development complexity of relying on multiple data services.

Note: This article have been indexed to our site. We do not claim legitimacy, ownership or copyright of any of the content above. To see the article at original source Click Here

Related Posts
Bugatti lanceert gouden auto inclusief NFT thumbnail

Bugatti lanceert gouden auto inclusief NFT

Auteur: RubenPriest, gepost 22 februari 2022 om 18:07 – Reageer Je krijgt niet alleen deze Bugatti als een echte auto, maar ook de NFT die eraan gelinkt is. Je krijgt niet alleen deze Bugatti als een echte auto, maar ook de NFT die eraan gelinkt is. Het is een samenwerking tussen Bugatti en Asprey Af…
Read More
Oracle’s Quarterly Earnings Growth Fueled by AI Demand thumbnail

Oracle’s Quarterly Earnings Growth Fueled by AI Demand

Oracle Corporation has reported better-than-expected quarterly profits, driven by the surging demand for generative artificial intelligence (AI) services. The 46-year-old database giant’s shares surged nearly 14% in extended trading following the announcement, adding more than $40 billion to its market capitalisation.  The late-day rally shows the growing investor enthusiasm for companies positioned to capitalise on the
Read More
TikTok hit $951 million e-commerce GMV in 2021: report thumbnail

TikTok hit $951 million e-commerce GMV in 2021: report

The e-commerce business of short video app TikTok achieved nearly RMB 6 billion in gross merchandise value (GMV) in 2021, Chinese local media outlet 36Kr reported, citing several people with knowledge of the matter. The sources said that Indonesia accounts for more than 70% of the app’s GMV, while the UK represents the remaining 30%.…
Read More
Samsung Internet Browser comes to the Galaxy Watch 4 watches thumbnail

Samsung Internet Browser comes to the Galaxy Watch 4 watches

Desde el lanzamiento de los nuevos relojes Samsung Galaxy Watch 4 el ecosistema Wear OS no ha parado de ganar nuevas aplicaciones y funciones, como la aplicaciones de YouTube Music o la reproducción offline de Spotify, aunque también ha desaparecido una aplicación. Otra de las nuevas aplicaciones que pueden descargar los usuarios de un Samsung…
Read More
New pictures on the cover of the Samsung Galaxy S22 thumbnail

New pictures on the cover of the Samsung Galaxy S22

Samsung ByRasmus Hellmyrs on 31 januari, 2022, 0:15 9 februari kommer S22- serien visas upp och läckorna kring de här enheterna fortsätter. Nu ser det ut som att officiella bilder på skal till serien.  Det ser ut som att den här serien kommer få ett gäng olika modeller och det är ju nice! Ni kan…
Read More
Index Of News
Total
0
Share