Redis教程:介绍


关于NoSQL数据库

NoSQL = Not Only SQL,它的最大特点就是:

  • 以简单的键值对存储数据
  • 不遵循SQL标准
  • 不支持ACID
  • 性能远超SQL数据库且非常稳定

典型的NoSQL数据库

Memcache:

  • 数据都在内存中,一般不持久化。通过多线程+锁的方式实现其高性能。
  • 支持键值对
  • 常被用做数据库的缓存

Redis: 几乎具备了MemCache的所有功能,同时在其之上,支持持久化,支持多种数据结构。

MongoDB:文档数据库,支持存储文档及二进制文件。

DynamoDB: AWS家的主打NoSQL数据库,用于保存JSON数据。

安装和启动

我这里直接使用docker来启动Redis:

bash
docker run -d redis

进入Redis容器:

bash
docker exec -it REDIS_CONTAINER_ID /bin/bash

Redis介绍

在Redis中,默认有16个数据库(0-15号),进入Redis之后,默认使用0号数据库。比如:

bash
127.0.0.1:6379> set k '123'
OK
127.0.0.1:6379> KEYS *
1) "k"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> KEYS *
(empty array)
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> KEYS *
1) "k"

可以把Redis中的数据库看作是传统数据库中的Schema,对于不同的应用:

  • 如果把数据都放在同一个Redis数据库中,则数据会非常杂乱,不易管理
  • 如果开启多个Redis服务器,则会导致运维成本增加

Redis中的多个数据库方式则完美的解决了这个问题,对于不同应用,可以使用不同的Redis数据库

Redis通过单线程+多路IO复用技术实现了其高性能。注意很多Redis的操作都是原子性的,一旦开始,就不会被打断。

Redis中的数据类型

  • String:Redis的String是类似ArrayList的一个动态字符串(Simple Dynamic String),其中可以包含任何数据,包括二进制数据(图片,声音,序列化对象等)。但要注意,一个String类型中能够存储的值最多为512MB
  • List: Redis中的List是一个双向字符串列表。
  • Set:Set的最大特点就是没有重复数据。其内部实现采用的是哈希表。
  • Hash:是一个键值对集合,极适合存储对象。
  • Zset(有序集合):在这种类型中,元素同样不重复,但每个单元都关联了一个评分。成员的值唯一,但评分(score)不唯一。由于其有序性,因此访问中间位置的成员同样时非常快的。
  • Bitmaps: 通过这个类型实现位操作。其实它本身也是一个字符串。和其他方式相比,Bitmaps的最大优势就是其占据内存空间小(每个值只占据一个bit)。
  • HyperLogLog: 主要针对和基数相关的统计,比如:Unique Visitors
  • Geospatial: 专门针对GPS的数据类型

对发布/订阅的支持

在Redis中还支持消息的发布和订阅。比如在客户端中进行订阅指定频道的消息:

bash
127.0.0.1:6379> subscribe news
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "news"
3) (integer) 1

在另一个客户端中发布消息到该频道:

bash
127.0.0.1:6379> publish news "breaking news"
(integer) 1

在第一个客户端中可以收到消息通知:

bash
3) "breaking news"

文章作者: 逻思
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 逻思 !