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
Zimbabwean James Manyika, becomes Google’s first Senior Vice President of Technology and Society thumbnail

Zimbabwean James Manyika, becomes Google’s first Senior Vice President of Technology and Society

Google has appointed Zimbabwean James Manyika as the company’s first Senior Vice President of Technology and Society. Manyika will report directly to Alphabet’s (Google’s parent company) CEO Sundar Pichai and will be working on the impact of technology on society and the environment. “I’m thrilled that James Manyika will be joining Google’s leadership team,” Pichai…
Read More
Dell XPS 15 vs. Razer Blade 15: which to buy in 2022 thumbnail

Dell XPS 15 vs. Razer Blade 15: which to buy in 2022

You can pick up a dedicated gaming notebook and put up with a sci-fi aesthetic with jet fighter exhausts, or you can pick up a stodgy business-oriented machine that looks like something out of a cubicle farm. Those are your only choices, right? Wrong. Today, you have other options, tweeners that straddle the gamer aesthetic
Read More
PGGM and Sydney’s Apt.Residential Tie Up for $1B Aussie BTR Venture thumbnail

PGGM and Sydney’s Apt.Residential Tie Up for $1B Aussie BTR Venture

Matt Carolan, Apt.Residential co-founder and managing director With Australia’s rental housing market facing a surge in demand on the back of population growth and tight supply, Dutch pension giant PGGM is backing a A$1.5 billion ($1 billion) bet on the country’s burgeoning apartment market. A property fund managed by Netherlands-based PGGM has formed a partnership
Read More
Sensibointegrates OpenAI’s ChatGPT into Smart HVAC thumbnail

Sensibointegrates OpenAI’s ChatGPT into Smart HVAC

Sensibo is a company that specialises in IoT solutions, combining smart ACs with a more sustainable world. This week, they announced the integration of OpenAI’s ChatGPT into all smart AC products. Since being released in late 2022 by OpenAI, ChatGPT has taken the world by storm, accelerating an AI revolution. While Artificial Intelligence has been
Read More
Netflix will edit phone numbers out of Squid Game following prank calls thumbnail

Netflix will edit phone numbers out of Squid Game following prank calls

Netflix’s immensely popular Squid Game is getting an edit after phone numbers shown in the series dialed real numbers, leading to what the company described as “unfortunate” prank dials. The Korean drama about a sadistic “game,” in which players find themselves with no option but to participate in a series of twisted challenges, contains visible…
Read More
Index Of News