纸上得来终觉浅,绝知此事要躬行。——陆游《冬夜读书示子聿》
redis基础概念
- redis是一个字典结构的存储服务器。以字典结构键值对(key=>value)形式存储数据,并允许其他应用通过TCP协议读写字段中的内容。
我们可以把 redis 存储数据的形式想象成一本本的新华词典。一个 Redis 实例提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中。
Redis 数据库(字典)是以数字索引的形式存在的,Redis 不支持用户自定义数据库名称,Redis 也不支持为每个数据库设置独立的访问密码,多个数据库之间并不相互隔离,比如 FULLSHALL 命令可以清空一个 Redis 实例中所有的数据库中的数据。Redis 默认支持 16 个数据库,可以通过配置参数 databases 来修改支持的数据库个数。 这些数据库更像是一种命名空间,而不适宜存储不同应用程序的数据。比如可以使用0号数据库存储某个应用生产环境中的数据,使用1号数据库存储测试环境中的数据,但不适宜使用0号数据库存储A应用的数据而使用1号数据库存储B应用的数据,不同的应用应该使用不同的Redis实例存储数据
客户端与 Redis 建立连接后会自动选择 0 号数据库。可以通过 SELECT 命令来更改选择的数据库。
redis> SELECT 1
特性
- redis支持的数据类型一共有string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
- 可以根据实际应用需要将数据以灵活的结构存储在redis中。
- Redis数据库中的所有数据都存储在内存中。
- Redis可以将内存中的数据一部写入到硬盘中,同时不影响继续提供服务。
- Redis可以为每个键设置生存时间,生存时间到期后键会被自动删除。
- Redis可以限定数据占用的最大内存空间,在数据达到空间限制后可以按照一定的规则自动淘汰不需要的键。[TODO:解释这里的规则]
- 简单稳定。
Redis直观的存储结构使得通过程序与Redis交互十分简单。 在Redis中使用命令来读写数据,命令语句之于Redis就相当于SQL语言之于关系数据库。
Redis的应用场景
- 缓存
- 排行榜
- 计数器
- 分布式会话
- 分布式锁
- 社交网络
- 最新列表
- 消息系统
- 队列
Redis的列表类型键可以用来实现队列,并且支持阻塞式读取,可以很容易地实现一个高性能的优先级队列。同时在更高层面上,Redis还支持“发布/订阅”的消息模式,可以基于此构建聊天室等系统。
- 点赞、好友等相互关系的存储
- 热点数据的缓存
- 秒杀、抢购等限时业务 ……