redis概述、安装和启动
一、NOSQL
在构建诸如搜索引擎、游戏服务器等大型互联网应用以及提供云计算服务的时候, 怎样保证系统在海量数据环境下的高性能、高可靠性、高扩展性、高可用性、低成本成为所有系统架构们挖苦心思考虑的重点,而怎样解决数据库服务器的性能瓶颈是最大的挑战。
对于传统的数据库,所有的数据持久在硬盘上,所有的操作都是通过IO的方式读写,效率相对较低,而对于大型的互联网企业,每时每刻都有无数的用户在使用它们提供的互联网服务,这些服务带来的就是大量的数据吞吐量,在同一时间,会并发的有成千上万的连接对数据库进行操作。在这种情况下,单台服务器或者几台服务器远远不能满足这些数据处理的需求,简单的升级服务器性能这样的扩展的方式也不行。此时采用的扩展方式是,将原来的DBMS系统进行垂直和水平的切割,将数据库部署到一个集群上,这样的优势在于我们熟悉RDBMS技术,但是缺点就是它针对于特定应用,不同的应用切割方法可能不太一样。使用比较麻烦。
还有一类就是google采用的方法,抛弃RDBMS,采用key-value形式存储,可以极大的增强系统的可扩展性。如果要处理的数据持续增大,多加机器就可以了。这种数据库将所有的数据都存储在内存中,内存的读写效率远大于硬盘因此在性能上存在很大优势,但是内存空间丢失,数据就会丢失,不过现在都提供对于持久化的支持。但是key=value存储结构简单,对于复杂关系映射就不能提供很好的支持。
Redis就是这种数据库中的一种。
二、Redis简介
Redis是完全开源免费的一个高性能的key-value【内存】数据库。
Redis 有三个主要使其有别于其它很多竞争对手的特点(redis的操作和memcached的操作最为相似,不过memcached不提供持久化):
Redis是完全在内存中保存数据的数据库,使用磁盘只是为了持久性目的,在重启的时候可以再次加载使用;
Redis相比许多键值数据存储系统有相对丰富的数据类型;
Redis可以将数据复制到任意数量的从服务器中;
三、Redis优点
异常快速 :
Redis是非常快的,每秒可以执行大约110000设置操作,81000个/每秒的读取操作。
相比需要依赖磁盘记录每个更新的数据库,基于内存的特性无疑给 Redis 带来了非常优秀的性能。读写操作之间有显著的性能差异。
支持丰富的数据类型 :
Redis支持最大多数开发人员已经知道如列表,集合,可排序集合,哈希等数据类型。这使得在应用中很容易解决各种问题,因为我们知道哪些问题处理使用哪种数据类型更好解决。
操作都是原子的 :
所有 Redis 的操作都是原子,从而确保当两个客户同时访问 Redis 服务器得到的是更新后的值(最新值)。
持久性:
通常,Redis 将数据存储于内存中,或被配置为使用虚拟内存。通过两种方式可以实现数据持久化:使用截图的方式,将内存中的数据不断写入磁盘;或使用类似 MySQL 的日志方式,记录每次更新的日志。前者性能较高,但是可能会引起一定程度的数据丢失;后者相反。
丰富的特性
Redis还支持 publish/subscribe(发布/订阅模式), 通知, key值过期等等特性。
四、redis安装
windows下下载后解压缩即可
linux需先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc:yum install gcc-c++
五 、redis启动
1.前端启动:直接运行bin/redis-server,前端模式启动的缺点是命令窗口关闭则redis-server程序结束
2.后端启动:修改redis.conf配置文件, daemonize yes 以后端模式启动。
执行如下命令启动redis:./bin/redis-server ./redis.conf
其他参数:
1. bind 127.0.0.1
指定 Redis 只接收来自于该 IP 地址的请求,如果不进行设置,那么将处理所有请求,在生产环境中最好设置该项
2.port
监听端口,默认为 6379
3. timeout
设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该连接.设置为0就是关闭该功能
例如: timeout 100 client一秒内没有请求,关闭 timeout 0 关闭此功能
4.loglevel
log 等级分为 4 级,debug, verbose, notice, 和 warning。生产环境下一般开启 notice(默认值) loglevel notice
5.logfile
配置 log 文件地址,默认使用标准输出,即打印在命令行终端的窗口上
6.databases
设置数据库的个数,可以使用 SELECT <dbid>命令来切换数据库。默认使用的数据库是 0
一个redis实例提供了多个用来存储数据的数据库,客户端可以指定将数据存储在哪个库中。这与我们熟知的在一个关系数据库实例中可以创建多个数据库类似。
每个数据库对外都是以一个从0开始的递增数字命名,redis默认支持16个数据库,可以通过配置参数databases来修改这个数字。客户端与redis建立连接后会自动选择0号数据库,不过可以随时使用select命令更换数据库,然而这些以数字命名的数据库又与我们理解的数据库有所区别。Redis不支持自定义数据库名字,每个数据库都以编号命名,开发者必须自己记录哪些数据库存储了哪些书库,另外redis也不支持为每个数据库设置不同的访问密码,所以一个客户端要么访问全部数据库,要么一个也不能访问。而且多个数据库之间并不是完全隔离的,比如flushall命令可以清空一个redis实例中所有的数据库中的数据。所以这些数据库更像是一种命名空间,而不适宜存储不同应用程序的数据。由于redis非常轻量级,一个空redis实例占用的内存只有1mb左右,所以不用担心多个redis实例会额外占用很多内存。
例如:databases 16
此时可以选择的数据库的编号从0---15,客户端可以输入命令:select 0--15 选择要使用的数据库。