一直想写一篇关于Redis的教程,给自己对Redis的学习做个总结。这里写一个简明教程,大概简述下Redis是什么,有什么特性,可以做什么,怎么去运维和监控。
1. Redis是什么
初次接触Redis大概是在18年,那时候只知到Redis是一套缓存系统,可以缓存数据库的查询结果,可以缓存session,可以用来替换memcached。深入学习之后才发现Redis可以做的事情可多了,但是最常见的应用场景估计还是缓存。
1.1 Redis的定义
Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。
- Redis是基于内存的,所以它很快。
- Redis有多种数据结构,这就是它和memcached的一个不同,memcached只支持string类型,而Redis还支持哈希、列表、集合、有序集合以及在这个基础上衍生的更多的数据类型。
- 因为多样的数据类型,Redis可以用来做数据库、高速缓存甚至是消息队列。
1.2 Redis的特性
- Redis是单线程的,虽然是单线程,但是它很快。并且因为它的单线程特性,所以服务端处理模型也非常简单,不用考虑并发的冲突。
- 比起memcache,Redis支持多种的数据机构,并且还可以做持久化。持久化的方式有RDB和AOF两种。
- Redis还支持主从复制,可以做集群。
- 快,非常快。主要是由于基于内存以及单线程的特性,官方给出的读写性能可以达到10万/秒。
1.3 Redis的应用场景
- 缓存:和Memcached一样,用来缓存数据库查询的结果。
- 排行榜系统:这是由于其有序集合的数据类型。
- 社交网络:这是由于集合类型,可以做集合运算。
- 消息队列:Redis提供了发布订阅功能和阻塞队列的功能。虽然在功能性上比不上专业的消息队列,但是基本的需求还是可以满足的。
2. Redis的数据结构
Redis支持多种的数据结构,这里做个大概的介绍。
2.1 string(字符串)
字符串是Redis中最基础的数据类型,可以简单认为这是一个键值对。字符串类型的值可以是字符串、数字甚至是二进制,最大不能超过512M。常用的命令包括:
##设置及获取键值set key valueget key #删除del key##批量设置和获取键值mset key valuemget key##自增自减incr keydecr key
字符串类型的应用常见通常为缓存系统,这就是和memcached一样的地方。此外,Redis还适合做计数器,因为它的自增和自减的性能非常高。
2.2 hash(哈希)
Redis的哈希数据类型与python中的字典基本一致,这是一个键值对的结构,形如value={{field1,value1},...{fieldN,valueN}}。在这里说的value指的是field(字段)的值,而不是key的值,需要和前面的字符串类型做区别。常用的命令包括: