Open Bug 1513099 (bmo-redis) Opened 6 years ago Updated 6 years ago

BMO needs to support Redis as an alternative to Memcached, possibly replacing it

Categories

(bugzilla.mozilla.org :: General, enhancement)

Production
enhancement
Not set
normal

Tracking

()

People

(Reporter: dylan, Unassigned)

References

(Depends on 1 open bug)

Details

(Keywords: bmo-big)

There is no direct equivalent of the Elasticache memcached in GCP. As such it would be useful if instead of memcached, BMO could make use of Redis.

There's a number of options for this -- Cache::Redis, CHI with Cache::Redis,
or perhaps Mojo::Redis (but the later has a warning about using it, I'll need to ask batman about it).

Also open questions are if the calls we're making to memcached map well to redis, mostly the CAS (compare and set) operations used for rate limiting.

I intend to ask smacleod about this.
Alias: bmo-redis
Keywords: bmo-big
So, can we map the following memcached commands to redis?

Basic caching (core bugzilla feature too)
* get
* set
* delete

Used for rate limiting:
* get_multi
* gets (returns a value and its CAS token)
* cas (Check-And-Set or Compare-And-Swap)
Flags: needinfo?(smacleod)
(In reply to Dylan Hardison [:dylan] (he/him) from comment #1)
> So, can we map the following memcached commands to redis?
> 
> Basic caching (core bugzilla feature too)
> * get
https://redis.io/commands/get
> * set
https://redis.io/commands/set
> * delete
https://redis.io/commands/del

 
> Used for rate limiting:
> * get_multi
https://redis.io/commands/mget

> * gets (returns a value and its CAS token)
> * cas (Check-And-Set or Compare-And-Swap)
Redis doesn't work the same way, but you can handle the same use cases, see https://redis.io/topics/transactions

Other things you might want to take a look at:
 - https://redis.io/topics/lru-cache#eviction-policies
 - https://redis.io/topics/data-types-intro (redis has fancier data types and can do a lot more. Might handle some of your use cases better with built-in things. Also information about expiry etc.)
Flags: needinfo?(smacleod)
(In reply to Steven MacLeod [:smacleod] from comment #2)
> (In reply to Dylan Hardison [:dylan] (he/him) from comment #1)
> > * gets (returns a value and its CAS token)
> > * cas (Check-And-Set or Compare-And-Swap)
> Redis doesn't work the same way, but you can handle the same use cases, see
> https://redis.io/topics/transactions

Forgot to mention, sharing the specific use cases could be helpful, as they might be solved by purpose made commands like https://redis.io/commands/incr
Depends on: 1521883
You need to log in before you can comment on or make changes to this bug.