Redis作为基于键值对的NoSQL数据库,具有高性能、丰富的数据结构、持久化、高可用、分布式等特性,同时Redis本身非常稳定,已经得到业界的广泛认可和使用。
Redis由C语言编写,它的数据结构可以由 string、hash、list、set、zset(有序列表)、bitmaps(位图)、HyperLogLog等多种数据结构与算法组成,因为Redis会将所有数据都存放在内存中,所以它的读写性能非常的惊人,不仅如此,Redis还将内存中的数据利用快照和日志的方式存放到硬盘上,它还提供了键过期、发布订阅、事务、流水线、Lua脚本等附加功能。
Redis可以做什么?
Redis不能做什么呢?
站在数据规模的角度看,数据可以分为大规模数据和小规模数据,我们 知道Redis的数据是存放在内存中的,虽然现在内存已经足够便宜,但是如果数据量非常大,例如每天有几亿的用户行为数据,使用Redis来存储的话,基本上是个无底洞,经济成本相当的高。
在Linux系统下使用源码的方式进行安装,整个安装只需以下六步即可完成:
$ wget http://download.redis.io/releases/redis-3.0.7.tar.gz $ tar xzf redis-3.0.7.tar.gz $ ln -s redis-3.0.7 redis $ cd redis $ make $ make install
1)下载Redis指定版本的源码压缩包到当前目录。
2)解压缩Redis源码压缩包。
3)建立一个redis目录的软连接,指向redis-3.0.7。
4)进入redis目录。
5)编译(编译之前确保操作系统已经安装gcc)。
6)安装。注:第一,第3步中建立了一个redis目录的软链接,这 样做是为了不把redis目录固定在指定版本上,有利于Redis未来版本升级, 算是安装软件的一种好习惯。第二,第6步中的安装是将Redis的相关运行文件放到/usr/local/bin/下,这样就可以在任意目录下执行Redis的命令。例如安装后,可以在任何目录执行redis-cli–v查看Redis的版本。
Redis安装之后,src和/usr/local/bin 目录下多了几个以redis开头可执行文 件,我们称之为Redis Shell,这些可执行文件可以做很多事情,例如可以启动和停止Redis、可以检测和修复Redis的持久化文件,还可以检测Redis的性能。表中分别列出这些可执行文件的说明。
有三种方法启动Redis:默认配置、运行配置、配置文件启动。
1):默认配置:使用 redis-server
注:因为直接启动无法自定义配置,所以该方式是不会在生产环境下使用的
2)运行启动
redis-server加上要修改配置名和值(可以是多对),没有设置的配置将 使用默认配置:
redis-server --configKey1 configValue1 --configKey2 configValue2
例如,如果要用6380作为端口启动Redis,那么可以执行:
redis-server --port 6380
虽然运行配置可以自定义配置,但是如果需要修改的配置较多或者希望 将配置保存到文件中,不建议使用这种方式。
3)配置文件启动
将配置写到指定文件里,例如我们将配置写到了/opt/redis/redis.conf 中,那么只需要执行如下命令即可启动Redis:
redis-server /opt/redis/redis.conf
显然通过配置文件启动的方式提供了更大的灵活性,所以大部分生产环境会使用这种方式启动Redis。
一些基础配置,其他的在后文中介绍:
提示:
Redis目录下都会有一个redis.conf配置文件,里面就是Redis的默认配 置,通常来讲我们会在一台机器上启动多个Redis,并且将配置集中管理在 指定目录下,而且配置不是完全手写的,而是将redis.conf作为模板进行修改。
redis-cli可以使用两种方式连接Redis服务器
2:命令方式
用redis-cli-h ip{host}-p{port}{command}就可以直 接得到命令的返回结果,例如:
这里有要注意:1)如果没有-h参数,那么默认连接127.0.0.1;如 果没有-p,那么默认6379端口,也就是说如果-h和-p都没写就是连接 127.0.0.1:6379这个Redis实例。
Redis提供了shutdown命令来停止Redis服务,例如要停掉127.0.0.1上 6379端口上的Redis服务,可以执行如下操作:
redis-cli shutdown
可以看到Redis的日志输出如下:
注:
(1)除了可以通过shutdown命令关闭Redis服务以外,还可以通过kill进程号的方式关闭掉Redis,但这种方式,不但不会做持久化操作,还会造成缓冲区等资源不能被优雅关闭,极端情况会造成AOF和复制丢失数据的情况。
(2)shutdown还有一个参数,代表是否在关闭Redis前,生成持久化文件:
powershell redis-cli shutdown nosave|save