redis→分布式缓存
简介
1. redis 是什么?
- REmote DIctionary Server(远程字典服务器)
- 是完全开源免费的,用 C 语言编写的,遵守 BSD 协议,是一个高性能的 (key/value)分布式内存数据库,基于内存运行并支持持久化的 NoSQL 数据库, 是当前最热门的 NoSql 数据库之一,也被人们称为数据结构服务器。
- 能满足对海量数据的读写
- redis 的键只能是字符串
- redis 的值支持多种数据类型:
- 字符串:string
- 哈希:hash
- 字符串列表:list
- 字符串集合:set
- 有序集合:zset(sorted set) HyperLogLog 结构:redis2.8.9 版本之后才有,用来做统计的算法
- GEO 结构:redis3.2 版本之后才有,是地理位置相关的数据类型
2. redis 的优点?
- 高性能(Redis 读的速度是 11W 次/s,写的速度是 8.1W 次/s)
- 原子性(保证数据的准确性)
- 持久存储(两种方式 RDB/快照,AOF/日志)
- 主从结构,主机会自动将数据同步到从机,可以进行读写分离
- 从 3.0 版本开始,支持集群
3. redis 的缺点?
- 由于是内存数据库,所以,单台机器存储的数据量,跟机器本身的内存 大小有关。虽然 redis 本身有 key 过期策略,但是还是需要提前预估和 节约内存。如果内存增长过快,需要定期删除数据。
- 修改配置文件,进行重启,将硬盘中的数据加载进内存,时间比较久。 在这个过程中,redis 不能提供服务。
4. redis 的主要功能?
- KV
- Cache
- Persistence
5. redis 与其他 key-value 缓存产品的区别
- redis 支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的 时候可以再次加载进行使用。
- redis 不仅仅支持简单的 key-value 类型的数据,同时还提供 list,set, zset,hash 等数据结构的存储。
- redis 支持数据的备份,即 master-slave 模式的数据备份。
6. redis 的主要功能
- 内存存储和持久化:redis 支持异步将内存中的数据写到硬盘上,同时 不影响继续服务。
- 分布式缓存
- 取最新 N 个数据的操作,如:可以将最新的 10 条评论的 ID 放在 List 集合。
- 模拟类似于 HttpSession 这种需要设定过期时间的功能。
- 发布、订阅消息系统。
- 定时器、计数器。
7. redis 的应用场景?
- 主要应用在高并发和实时请求的场景
- 关注列表,粉丝列表
- 微博数,粉丝数
- 热门微博
8. redis 版本下载
- https://redis.io/
- http://www.redis.cn/
- 下载最新稳定版,如下图所示。
9.阿里商品信息如何存放?
(1)商品的基本信息
RDBMS中,mysql(内部工程师自己根据业务改造)
(2)商品描述、详情、评论(多文字类的):MongDB中
(3)商品图片
- 淘宝自己的TFS
- Google的GFS
- Hadoop HDFS
(4)商品关键字:淘宝Isearch搜索引擎(多隆,蔡景现)
(5)商品的波段性热点高频信息:Redis,Tair
(6)商品交易、价格计算、支付系统
外部系统,第三方提供支付接口
支付宝,由苗人凤负责
Redis安装
(1)将tar包上传 /usr/local并解压
(2)安装一些可能用到的东西
(3)在redis解压路径,进行编译
(4)进行安装
(5)安装好的可执行文件在以下目录
Redis启动和停止
(1)启动redis
(2)停止 ctrl + C
(3)修改配置文件
(4)修改为yes,表示走守护进程
(5)使用刚修改的配置,不占用当前窗口
(6)查看启动后的进程
(7)关闭服务端
Redis客户端
(1)进入客户端
Redis杂项知识
(1)redis-benchmark可用于性能测试
必须redis-server启动后,再运行
(2)redis默认端口6379
6379对应着号码MERZ
(3)redis所有的索引都是从零开始
(4)redis的默认库有16个(索引0~15)
(5)查看多少个键
(6)前一个清当前库,后一个清所有库
Redis配置文件详解
(1)对大小写不敏感,只支持bytes类型
(2)redis.conf作为一个总的文件,可以包含其他文件
(3)设置后台进程,端口号,日志级别,库的数量
(4)快照的配置,用于配置RDB策略,配置dump文件相关信息
(5)主从复制的配置
(6)可以配置密码,默认无密码,配置密码,16个库是用同一个密码
(7)最大连接,最大内存的一些设置
(8)这里可以配置AOF的持久化策略
Redis的RDB策略
RDB 是什么
- Redis DataBase,在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是 Snapshot 快照,它恢复时是将快照文件直接读到内存里
- Redis 会单独创建(fork,可以理解为拷贝)一个子进程来进行持久化,会先将数 据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持 久化好的文件
- 整个过程中,主进程是不进行任何 IO 操作的,这就确保了极高的性能如果需要进 行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那 RDB 方式要比 AOF 方式更加的高效。
- RDB 的缺点是最后一次持久化后的数据可能丢失。
Fork
- Fork 的作用是复制一个与当前进程一样的进程。
- 新进程的所有数据(变量、环境变量、程序计数器等)数值都和原进程一致,但是 是一个全新的进程,并作为原进程的子进程
RDB 的优点
- 适合大规模的数据恢复
- 对数据完整性和一致性要求不高
RDB 的缺点
- 在一定间隔时间做一次备份,所以如果 redis 意外 down 掉的话,就会丢失最后一 次快照后的所有修改
- Fork 的时候,内存中的数据被克隆了一份,大致 2 倍的膨胀性需要考虑
(1)如何配置RDB
(2)性能配置:持久化的RDB文件会进行压缩,改为NO就不压缩
(3)redis会对持久化的数据进行校验,增加10%的性能消耗
Redis的AOF策略
AOF 是什么
- 以日志的形式来记录每个写操作,将 Redis 执行过的所有写指令记录下来(读操作 不记录),只许追加文件但不可以改写文件
- redis 启动之初会读取该文件重新构建数据,换言之,redis 重启的话就根据日志文 件的内容将写指令从前到后执行一次以完成数据的恢复工作
(1)以日志的形式持久化操作(只读写的日志)
(2)配置AOF策略,改yes,开启AOF
(3)AOF数据修复
(4)dump和AOF同时存在,是AOF生效
Redis的事务
redis 的事务是什么?
- 可以一次执行多个命令,批处理,本质是一组命令的集合。一个事务中的所有命令 都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞
redis 的事务能做什么?
- 一个队列中,一次性、顺序性、排他性的执行一系列命令
(1)正常执行
(2)取消事务
(3)全体连坐
(4)redis支持部分事务(要求语法正确)
(5)watch监控
乐观锁和悲观锁
悲观锁:生产环境下用的不多
乐观锁:加个行锁