Nick Fisher's tech blog

Reactive

An Introduction to Redis Streams via Lettuce

The source code for this article can be found on Github.

Redis streams are an interesting data structure that act as a sort of go-between for list and pub/sub operations: It’s like a list in the sense that anything pushed onto the stream is retained, it’s like pub/sub in the sense that multiple consumers can see what is happening to it. There are many other features of streams that are covered in that article, but that’s at least how you can think of it at the start.

Redis Transactions, Reactive Lettuce: Buyer Beware

The source code for what follows can be found on Github.

Redis Transactions do not operate exactly the way you would expect if you’re coming from a relational database management system like MySQL or postrgres. It’s mostly useful for optimistic locking, but honestly there are better ways to accomplish many of the things you’re probably trying to, like running a lua script with arguments [which is guaranteed to be atomic]. The documentation on transactions in redis describes some of the caveats, the biggest one probably being that it does not support rollbacks, only commits or discards.

Subscribing to Redis Channels with Java, Spring Boot, and Lettuce

The source code for what follows can be found on Github.

Pub/Sub in redis allows a publisher to send things to subscribers without knowing who is actually subscribed. In a previous post, we covered a simple unit test for publishing and subscribing to lettuce, but if you want to have a subscription initialized on application startup, and respond to events, we’ll have to do a bit more, which I’ll demonstrate here.

Expiring Individual Elements in a Redis Set

The source code for what follows can be found on Github.

Redis does not allow you to set the expiration on individual members in a set, it only allows you to set an expiration on the entire set itself. If you want to have a sort of expiry on individual elements in a set, this article shares a workaround to that problem that works well in practice. Because I have already written a lot of boilerplate code for testing any redis operation using lettuce, I’m going to be showing you this technique using a reactive lettuce client, however the basic concept should transfer easily to any other client.