key-value databases in practice redis @ dotnettoscana
TRANSCRIPT
![Page 1: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/1.jpg)
Key-value databases in
practice
Matteo Baglini Software Developer, [email protected]://it.linkedin.com/in/matteobaglinihttp://github.cpom/bmatte
www.dotnettoscana.org
![Page 2: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/2.jpg)
2
What is Redis?
«Advanced key-value store. It is often
referred to as a data structure server»
![Page 3: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/3.jpg)
3
Key-Value
Key Value
page:index <html><head>[...]
user:123:session xDrSdEwd4dSlZkEkj+
user:123:avatar 77u/PD94bWwgdm+
Everything is a «blob»Commands, primarily, can GET and SET the
values
![Page 4: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/4.jpg)
4
Advanced Key-ValueKey Value Type
page:index <html><head>[...] String
events:timeline { «Joe logged», «File X Uploaded», …} List
logged:today { 1, 2, 3, 4, 5 } Set
user:123:profile time => 10927353username => bmatte Hash
game:leaderboardjoe ~ 1.3483smith ~ 293.45fred ~ 83.22
Sorted Set
Different «data type/structure»Rich set of specialized commands
![Page 5: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/5.jpg)
5
Advanced Key-Value Everything is stored in memory Screamingly fast performance Persistent via snapshot or append-only log file Replication (only Master/Slave) Extensible via embedded scripting engine (Lua) Rich set of client libraries High availability (In progress)
◦ Cluster (Fault tolerance, Multi-Node consistence) ◦ Sentinel (Monitoring, Notification, Automatic failover)
![Page 6: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/6.jpg)
6
Project Created by Salvatore
Sanfilippo (@antirez) First «public release»
in March 2009. Since 2010 sponsored
by VMware.
Initially written to improve performance of Web Analytics product LLOOGG out of his
startup
![Page 7: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/7.jpg)
7
Project
Written in ANSI C No external dependencies Single thread (asynchronous evented I/O) Works on all POSIX-like system Exist unofficial build for Windows Open-source BSD licensed Community (list, IRC & wiki)
![Page 8: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/8.jpg)
8
Manifest
1. A DSL for Abstract Data Types.2. Memory storage is #1.3. Fundamental data structures for a
fundamental API.4. Code is like a poem.5. We're against complexity.6. Two levels of API.7. We optimize for joy.
![Page 9: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/9.jpg)
9
Getting Started
![Page 10: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/10.jpg)
10
Install
Latest stable version (2.6.*)
![Page 11: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/11.jpg)
11
Install
Latest unstable version (2.9.7)
![Page 12: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/12.jpg)
12
Server
![Page 13: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/13.jpg)
13
Configuration
![Page 14: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/14.jpg)
14
Client
![Page 15: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/15.jpg)
15
Telnet
![Page 16: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/16.jpg)
16
Data Types
![Page 17: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/17.jpg)
17
Strings
![Page 18: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/18.jpg)
18
Strings
Any blob will do(A value can be at max 512MB)
![Page 19: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/19.jpg)
19
Strings
Operations on strings holding an integer
![Page 20: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/20.jpg)
20
Strings Commands
![Page 21: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/21.jpg)
21
Strings Patterns
Sharing state across processes◦Distribute lock, Incremental ID, Time series,
User session. Web Analytics
◦User visit (day, week, month), Feature Tracking.
Caching◦String values can hold arbitrary data.
Rate limiting◦Limit number of API calls/minute.
![Page 22: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/22.jpg)
22
Keys
![Page 23: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/23.jpg)
23
Expiration
Any item in can be made to expireafter or at a certain time.
![Page 24: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/24.jpg)
24
Keys Commands
![Page 25: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/25.jpg)
25
Lists
![Page 26: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/26.jpg)
26
Lists
Sequence of string values
![Page 27: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/27.jpg)
27
Lists
Sequence of string values(Max length is 232 - 1 elements)
![Page 28: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/28.jpg)
28
Lists
Prevent indefinite growth
![Page 29: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/29.jpg)
29
Lists Commands
![Page 30: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/30.jpg)
30
Lists Patterns
Events Store or Notification◦Logs, Social Network Timelines, Notifications.
Fixed Data◦Last N activity.
Message Passing◦Durable MQ, Job Queue.
Circular list
![Page 31: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/31.jpg)
31
Sets
![Page 32: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/32.jpg)
32
Sets
Unordered set of unique values
![Page 33: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/33.jpg)
33
Sets
Unordered set of unique values(Max number of members is 232 – 1)
![Page 34: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/34.jpg)
34
SetsYou can do unions, intersections, differences of sets in very short
time.
![Page 35: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/35.jpg)
35
Sets Commands
![Page 36: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/36.jpg)
36
Sets Patterns
Web Analytics◦Unique Page View, IP addresses visiting.
Relations◦Friends, Followers, Tags.
Caching Result◦Store result of expensive intersection of data.
![Page 37: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/37.jpg)
37
Sorted Set
![Page 38: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/38.jpg)
38
Sorted Sets
Ordered set of unique values
![Page 39: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/39.jpg)
39
Sorted Sets
Access by rank
![Page 40: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/40.jpg)
40
Sorted Sets
Access by score
![Page 41: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/41.jpg)
41
Sorted Sets Commands
![Page 42: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/42.jpg)
42
Sorted Sets Patterns
Web Analytics◦Online users, Most visited pages.
Leaderbord◦Show top N.
Order by data◦Maintain a set of ordered data like user by
age.
![Page 43: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/43.jpg)
43
Hashes
![Page 44: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/44.jpg)
44
Hashes
Key → Value map (as value)
![Page 45: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/45.jpg)
45
Hashes
Set attributes(Store up to 232 - 1 field-value pairs)
![Page 46: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/46.jpg)
46
Hashes
Get attributes
![Page 47: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/47.jpg)
47
Hashes Commands
![Page 48: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/48.jpg)
48
Hashes Patterns
Storing Objects◦Hashes are maps between string fields and
string values, so they are the perfect data type to represent objects.
![Page 49: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/49.jpg)
49
Persistence
![Page 50: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/50.jpg)
50
Snapshot (RDB)Dump data to disk after certain
conditions are met
![Page 51: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/51.jpg)
51
Snapshot (RDB) Pro:
◦ RDB is a very compact single-file.◦ RDB files are perfect for backups.◦ RDB is very good for disaster recovery.◦ RDB allows faster restarts with big datasets.◦ RDB maximizes performances (backgr. I/O via
fork(2)). Contro:
◦ RDB is NOT good if you need to minimize the chance of data loss in case Redis stops working (for example after a power outage).
◦ Fork can be time consuming if the dataset is very big.
![Page 52: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/52.jpg)
52
Append-only (AOF)Append all write operations to a log
![Page 53: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/53.jpg)
53
Append-only (AOF)Durability depends on fsync(2)
policy
![Page 54: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/54.jpg)
54
Append-only (AOF) Pro:
◦ AOF is much more durable.◦ AOF is an append only log, no seeks, nor corruption
problems (for example after a power outage).◦ AOF contains a log of all the operations one after the
other in an easy to understand and parse format. Contro:
◦ AOF files are usually bigger than the equivalent RDB.◦ AOF can be slower then RDB depending on the exact
fsync policy.
![Page 55: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/55.jpg)
55
What should I use? Use both persistence methods if you want a degree of
data safety comparable to what any RDBMS can provide you.
If you care a lot about your data, but still can live with a few minutes of data lose in case of disasters, you can simply use RDB alone.
There are many users using AOF alone, but we discourage it since to have an RDB snapshot from time to time is a great idea for doing database backups, for faster restarts.
![Page 56: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/56.jpg)
56
C# Clients
![Page 57: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/57.jpg)
57
C# clients
Rich set of clients
![Page 58: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/58.jpg)
58
C# clients
![Page 59: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/59.jpg)
59
BookSleeve
![Page 60: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/60.jpg)
60
Code
![Page 61: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/61.jpg)
61
Transactions
![Page 62: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/62.jpg)
62
Transactions
Multiple commands (ACID)
![Page 63: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/63.jpg)
63
Transactions Commands
![Page 64: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/64.jpg)
64
Transactions Patterns Classic scenario
◦Multi atomic commands. Optimistic locking
◦Check and Set (CAS Pattern) write only if not changed.
![Page 65: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/65.jpg)
65
Publish Subscribe
![Page 66: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/66.jpg)
66
PubSub
Provide 1-N messaging
![Page 67: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/67.jpg)
67
PubSub
Subscribe multi channels decoupled from the key space
![Page 68: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/68.jpg)
68
PubSub
Publish on some channel
![Page 69: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/69.jpg)
69
PubSub
Subscriber getting notified
![Page 70: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/70.jpg)
70
PubSub Commands
![Page 71: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/71.jpg)
71
PubSub Patterns
Message Passing◦Distribute message-oriented system, Event-
Driven Architecture, Service Bus.
![Page 72: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/72.jpg)
72
Code
![Page 73: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/73.jpg)
73
Replication
![Page 74: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/74.jpg)
74
Replication
One master replicate to multiple slaves
![Page 75: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/75.jpg)
75
ReplicationSlave send SYNC command and master transfers the database
file to the slave
![Page 76: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/76.jpg)
76
ReplicationSlaves can perform only read
operation
![Page 77: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/77.jpg)
77
Replication Patterns
Scalability◦Multiple slaves for read-only queries.
Redundancy◦Data replication.
Slave of Slave◦Graph-like structure for more scalability e
redundancy.
![Page 78: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/78.jpg)
78
Performance
![Page 79: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/79.jpg)
79
Performance
~50K read/write operations per seconds.
~100K read/write ops per second on a regular EC2 instance.
Screamingly fast performance
![Page 80: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/80.jpg)
80
Performanceredis-benchmark tool on a Ubuntu
virtual machine ~36K rps
![Page 81: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/81.jpg)
81
Application Architecture
![Page 82: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/82.jpg)
82
Infrastructure
Application Server
SQL Server
Redis
![Page 83: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/83.jpg)
83
Who is using Redis?
![Page 84: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/84.jpg)
84
Finally
![Page 85: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/85.jpg)
85
This is Redis
«I see Redis definitely more as a flexible tool than as a solution specialized to solve
a specific problem: his mixed soul of cache, store, and messaging server shows
this very well»
Salvatore Sanfilippo
![Page 86: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/86.jpg)
86
Risources http://redis.io/ http://github.com/antirez/redis http://groups.google.com/group/redis-db
![Page 87: Key-value databases in practice Redis @ DotNetToscana](https://reader035.vdocuments.mx/reader035/viewer/2022062703/554f7498b4c9058a148b551b/html5/thumbnails/87.jpg)
That’s all!