一.redis简介
Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。Redis全称为:Remote Dictionary Server(远程字典服务器),该软件使用C语言编写,Redis是一个key-value存储系统,是当前最受欢迎的NoSQL数据库之一。
二.redis支持的语言
三.redis特点
Redis以内存作为数据存储介质,所以读写数据的效率极高,远远超过数据库。以设置和获取一个256字节字符串为例,它的读取速度可高达110000次/s,写速度高达81000次/s。
Redis跟memcache不同的是,储存在Redis中的数据是持久化的,断电或重启后,数据也不会丢失。因为Redis的存储分为内存存储、磁盘存储和log文件三部分,重启后,Redis可以从磁盘重新将数据加载到内存中,这些可以通过配置文件对其进行配置,正因为这样,Redis才能实现持久化。
Redis支持主从模式,可以配置集群,这样更利于支撑起大型的项目,这也是Redis的一大亮点。
四.redis适用场景
(1)会话缓存(最常用)
(2)消息队列,比如支付
(3)活动排行榜或计数
(4)发布,订阅消息(消息通知)
(5)商品列表,评论列表等
五.redis不适用场景
(1)需要事务支持(非关系型数据库)
(2)基于sql结构化查询储存,关系复杂
六.redis支持的数据类型
Redis一共支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)和zset(sorted set有序集合)。
(1)字符串(字符串)
它是redis的最基本的数据类型,一个键对应一个值,需要注意是一个键值最大存储512MB。
(2)hash(哈希)
redis hash是一个键值对的集合,是一个string类型的field和value的映射表,适合用于存储对象
(3)表(列表)
是redis的简单的字符串列表,它按插入顺序排序
(4)组(集合)
是字符串类型的无序集合,也不可重复
(5)zset(sorted set有序集合)
是string类型的有序集合,也不可重复
有序集合中的每个元素都需要指定一个分数,根据分数对元素进行升序排序,如果多个元素有相同的分数,则以字典序进行升序排序,sorted set因此非常适合实现排名
七.redis的发布与订阅
redis的发布与订阅(发布/订阅)是它的一种消息通信模式,一方发送信息,一方接收信息。
下图是三个客户端同时订阅同一个频道
下图是有新信息发送给频道1时,就会将消息发送给订阅它的三个客户端
八.Linux下的redis
(1)redis目录:usr/local/bin
(2)linux下redis常用命令:redis-benchmark:性能测试工具、redis-server:启动redis服务器、redis-cli:启动redis客户端,操作入口
九.Redis基础知识
(1)端口:6379
(2)默认16个数据库,下标从0开始
(3)单线程:redis是单线程+io多路复用:检查文件描述的就绪状态
(Memchached:多线程+锁)
十.redis的持久化
redis持久化有两种方式:快照(快照),仅附加文件(AOF)
快照(快照)
(1)将存储在内存的数据以快照的方式写入二进制文件中,如默认dump.rdb中
(2)保存900 1
#900秒内如果超过1个Key被修改,则启动快照保存
(3)保存300 10
#300秒内如果超过10个Key被修改,则启动快照保存
(4)保存60 10000
#60秒内如果超过10000个重点被修改,则启动快照保存
仅附加文件(AOF)
(1)使用AOF持久化时,服务会将每个收到的写命令通过写函数追加到文件中(appendonly.aof)
(2)AOF持久化存储方式参数说明
appendonly yes
#开启AOF持久化存储方式
appendfsync always
#收到写命令后就立即写入磁盘,效率最差,效果最好
appendfsync everysec
#每秒写入磁盘一次,效率与效果居中
appendfsync no
#完全依赖操作系统,效率最佳,效果没法保证
十一.redis的性能测试
自带相关测试工具
实际测试同时执行100万的请求
十二.除了Redis,还有什么NoSQL型数据库
市面上类似于Redis,同样是NoSQL型的数据库有很多,如下图所示,除了Redis,还有MemCache、Cassadra和Mongo。下面,我们就分别对这几个数据库做一下简要的介绍:
Memcache:这是一个和Redis非常相似的数据库,但是它的数据类型没有Redis丰富。Memcache由LiveJournal的Brad Fitzpatrick开发,作为一套分布式的高速缓存系统,被许多网站使用以提升网站的访问速度,对于一些大型的、需要频繁访问数据库的网站访问速度的提升效果十分显著。
Apache Cassandra:(社区内一般简称为C*)这是一套开源分布式NoSQL数据库系统。它最初由Facebook开发,用于储存收件箱等简单格式数据,集Google BigTable的数据模型与Amazon Dynamo的完全分布式架构于一身。Facebook于2008将 Cassandra 开源,由于其良好的可扩展性和性能,被 Apple、Comcast、Instagram、Spotify、eBay、Rackspace、Netflix等知名网站所采用,成为了一种流行的分布式结构化数据存储方案。
MongoDB:是一个基于分布式文件存储、面向文档的NoSQL数据库,由C++编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系型数据库的,它支持的数据结构非常松散,是一种类似json的BSON格式。