知识铺垫
Redis经常被用来当做高速缓存和存储。
如果只是读,只想做高速缓存,选择用Memcache效率高一点;如果想一专多能,又想读又想写想要效率就用Redis或Tair。
面试的时候别人会问对Redis的理解:KV、Cache、Persistence(持久化),通常就是这三点。
3V+3高
大数据时代的3V:海量(Volume)、多样(Variety)、实时(Velocity)
互联网需求的3高:高并发、高可扩、高性能
Redis是NoSQL的一部分
NoSQL分类:
- key/value
- 列存储数据库
- 文档型数据库
- 图形数据库
传统数据库的规则是:RDBMS 的 ACID (原子性、一致性、独立性、持久性)
现在NoSQL的规则是,CAP (强一致性、可用性、分区容错性)但是不能都满足,只能三选二。
所以分为下面三大类:
CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。这就是传统的RDBMS
CP - 满足一致性,分区容忍性的系统,通常性能不是特别高。MongoDB、HBase、Redis
AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些(弱一致性,允许实现最终一致性,如发一条微博消息,首先自己能够看到,然后过十几二十秒后其他人才看到,这是允许的!)。CouchDB、Cassandra、DynamoDB
分布式必须满足 P .
AP 大多数网站架构的选择。互联网公司很多就妥协到 AP。如京东淘宝商品浏览数和点赞数。
所以很多地方都是 AP+BASE ,BASE 就是为了解决关系数据库强一致性引起的问题而引起的可用性降低而提出的解决方案。
BASE 其实是由下面三个术语的缩写:
基本可用(Basically Available)
软状态(Soft state)
最终一致(Eventually consistent)
它的思想是通过让系统放松对某一时刻数据一致性的要求来换取系统整体伸缩性和性能上的改观。
为什么这样说呢?缘由就在于大型系统往往由于地域分布和极高性能的要求,不可能采用分布式事务来完成
这些指标,要想获得这些指标,我们必须采用另外一种方式来完成,这里 BASE 就是解决这个问题的办法。也就是最终一致。
简单来说:
分布式:不同的多台服务器上面部署不同的服务模块(工程),他们之间通过Rpc/Rmi 之间通信
和调用,对外提供服务和组内协作。
集群:不同的多台服务器上面部署相同的服务模块,通过分布式调度软件进行统一的调度,对外
提供服务和访问。
Redis学习
Redis:Remote Dictionary Server(远程字典服务器)
是完全开源免费的,用C语言编写的,遵守 BSD 协议,是一个高性能的(Key/Value)分布式内存数据库,基于内存运行并支持持久化 NoSQL 数据库,是当前最热门的 NoSQL 数据库之一,也被人们称为数据结构服务器。
但是在之前 MemoCache 为什么会被 Redis 取代呢???
Redis 与其他 Key - Value 缓存产品有以下三个特点:
1.Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
2.Redis 不仅仅支持简单的 Key - Value 类型的数据,同时还提供 List、Set 、ZSet 、Hash 等等多种数据结构的存储。
3.Redis 支持数据的备份,即 Master-Slave 模式的数据备份。
Redis能干什么:
1.内存存储和持久化:Redis支持异步将内存中的数据写到硬盘上,同时不影响继续服务取最新N个数据的操作,如:可以将最新10条评论的ID放在Redis的List集合里面,模拟类似于HttpSession这种需要设定过期时间的功能。
2.发布、订阅消息系统。
3.定时器、计数器。
Redis安装:
企业里面做Redis开发,99%都是Linux版的运用和安装。
Linux安装第三方软件,都会放到/opt目录下:
1.所以,下载 Redis 客户端到 Linux 的 /opt 目录下:
2.解压:tar -zxvf 目标压缩文件
3.进入解压后的目录,在该目录下执行命令:make
4.有些时候可能会出现缺少GCC这个东西,导致不能安装 Redis.
5.那么GCC是什么???GCC是Linux下的一个编译程序,是C程序的编译工具。
6.GCC 原名为 GNU C 语言编译器(GNU C Compiler),因为它原本只能处理 C语言。GCC 很快地扩展,变得可处理 C++。后来又扩展能够支持更多编程语言,如Fortran、Pascal、Objective-C、Java、Ada、Go以及各类处理器架构上的汇编语言等,所以改名GNU编译器套件(GNU Compiler Collection)。
7.上网安装 GCC :yum install gcc-c++
8.如果下次安装的时候出现:Jemalloc/jemalloc.h:没有那个文件或目录—->解决办法:运行 make distclean 之后再 make
9.如果make完成后继续执行make install 检查是否彻底安装完成,相当于吃个定心丸!!!
10.查看Redis进程服务是否开启:ps -ef|grep redis
11.如果没有启动,到 Redis 的 bin 文件目录下, cd /usr/local/bin 这里面放的就是第三方程序安装后的命令,Linux不想Win那样可以选择路径,所以默认就会放在这里面。然后修改/myredis/redis.conf 里面的GENERAL选项,修改daemonize yes 让它以一个窗口方式运行,类似于Tomcat。
12.启动服务:redis-server /myredis/redis.conf 这里的/myredis/redis.conf 是单独从从/opt/redisxxxxxx/redis.conf 单独拷贝出来的一份。
13.进入 Redis :redis-cli -p 6379 其中 6379 是 Redis 默认的端口。
14.之后你会看到提示符已经变化了变成了类似 127.0.0.1:6379> 的提示符。
15.现在判断 Redis 的服务是否启动或者连接成功,通过输入 ping 然后它会返回 “PONG” 这个字符串。
16.然后输入 set k1 hello world 再 get k1 就会出现 hello world 这句话。
17.可以通过 redis-benchmark 测试 Redis 在本机中的性能。但是在此之前你需要打开 Redis 服务。
对 Redis 不得不提的一些东西:常用基础知识
1.Redis 是单进程的。
单进程模型来处理客户端的请求。对读写等事件的响应是通过对epoll函数的包装来做到的。Redis的实际处理速度完全依靠主进程的执行效率。
Epoll是Linux内核为处理大批量文件描述符而作了改进的epoll是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的cpu利用率。
2.默认 Redis 有 16 个数据库。类似数组下标从零开始,初始默认使用零号库。
3.通过 【select 下标】可以选择数据库。
4.分库会让不同数据库有所分担,并且也会让逻辑更加清晰。
5.查看当前数据库的 Key 数量用 Dbsize 查看。
6.想要知道是哪儿几个 Key ,可以通过 【keys *】查看。
但是在生产环境一半不用去用 【key *】的,一般我们会多多少少带点匹配。看第7个。
7.keys 也支持 【keys k?】 其中 ? 代表一个任意字符。
8.Flushdb:清空当前库。
9.Flushall:通杀全部库。
10.统一密码管理,16个库都是同样的密码,要么都OK要么一个也连接不上。
11.Redis索引都是从零开始的。