redis简介
- Redis是Remote Dictionary Server(远程字典服务器),
- 存储结构:它以字典结构来存储数据,Redis允许其他应用通过TCP协议读写字典中的内容,且其字典中的键值可以是多种数据类型:
字符串类型
散列类型
列表类型
集合类型
有序集合类型
- 内存存储与持久化
Redis数据库中的所有数据都存储在内存中,读写速度快,为了防止程序退出后内存中的数据会丢失,Redis提供了对持久化的支持,即可以将内存中的数据异步写入到硬盘中,同时不影响继续提供服务
- 功能丰富
Redis可以为每个键设置生存时间(Time to Live,TTL),这一功能以及出色的性能使得Redis可以作为缓存系统来使用
Redis还可以限定数据占用的最大内存空间,当超出后可自动淘汰不需要的键
Redis的列表类型键可以用来实现队列,并且支持阻塞式读取,可以很容易地实现一个高性能的优先级队列
Redis还支持“发布-订阅”的消息模式
- 简单稳定:
Redis使用命令来读写数据
Redis提供了十几种不同编程语言的客户端库,这些库很好的封装了Redis的命令
Redis使用C语言开发,代码量只有3万多行,修改源代码难度降低
Redis是开源的,良好的开发氛围和严谨的版本发布机制使得Redis的稳定版本非常可靠
Redis的安装与启动
- Redis的安装:redis的安装非常简单,随便百度一个教程就好
- Redis可执行文件说明
文件名 | 说明 |
redis-server | Redis服务器 |
redis-cli | Redis命令行客户端 |
redis-benchmark | Redis性能测试工具 |
redis-check-aof | AOF文件修复工具 |
redis-check-dump | RDB文件检查工具 |
redis-sentinel | Sentinel服务器 |
- Redis的启动:
直接启动:
通过redis-server即Redis服务端直接启动
Redis服务器默认使用6379端口,通过--post参数可以自定义端口号
通过初始化脚本启动
在源代码目录的utils文件夹中有一个redis_init_script初始化脚本文件
1)配置初始化脚本:将初始化脚本复制到/etc/init.d目录中,文件名为redis_端口号
2)建立需要的文件夹
目录名 | 说明 |
/etc/redis | 存放Redis的配置 |
/var/redis/端口号 | 存放Redis的持久化文件 |
3)修改配置文件,首先将配置文件模板(redis源代码目录中的redis.conf)复制到/etc/redis目录中以端口号命名
参数 | 值 | 说明 |
daemonize | yes | 使Redis以守护进程模式运行 |
pidfile | /var/run/redis_端口号.pid | 设置Redis的PID文件位置 |
port | 端口号 | 设置Redis监听的端口号 |
dir | /var/redis/端口号 | 是指持久化文件存放位置 |
4)通过脚本启动Redis
5)设置开机自启
要在初始化脚本redis_6379里加一行
否则第二条命令实施不了
- redis的关闭
正确的停止方式应该事先Redis发送SHUTDOWN命令,当Redis收到SHUTDOWN命令后,会先断开所有客户端连接,然后根据配置执行持久化,最后完成退出
Redis命令行客户端
- 通过redis-cli向Redis发送命令有两种
1)将命令作为redis-cli的参数执行,比如前面redis的关闭操作;redis-cli执行时会自动按照默认配置(服务器地址为127.0.0.1,端口号为6379)连接Redis,通过-h和-p参数可以自定义地址和端口号
Redis提供了PING命令来测试客户端与Redis的连接是否正常,如果连接正常会恢复PONG,如
2)不附带参数运行redis-处理,进入交互模式,可以自由输入命令
可以使用exit退出该模式
-
命令返回值,命令返回值有5中类型
1)状态回复:直接显示状态信息,
如测试客户端与Redis的连接是否正常
如向Redisfasong发送SET命令设置键的值是,设置成功的话会返回状态OK
2)错误回复
当命令不存在或命令格式有错误等情况时Redis会返回错误回复(以ERR开头,后面跟着错误信息);
如:当命令不存在时
部分错误信息会议具体的错误类型开头
如:
3)整数回复
Redis没有整数类型,但却提供了一些用于整数操作的命令,如递增键值的INCR命令会议整数形式返回递增后的键值,除此之外,一些其他命令也会返回整数,如可以获取当前数据库中键的数量的DBSIZE命令等。整数回复以(integer)开头,并在后面跟上整数数据
4)字符串回复
字符创回复以双引号包裹,当请求一个字符串类型键的键值或一个其他类型键中的某个元素是就会得到一个字符串回复
特殊情况是当请求的键值不存在时会返回一个空结果,显示为(nil),如:
5)多行字符串回复
当请求一个非字符串类型键的元素列表时就会收到多行字符串回复。多行字符串回复中的每行字符串都以一个序号开头,如:
Redis的配置
前面我们通过redis-server的启动参数port设置了Redis的端口号,除此之外Redis还支持其他配置选项,如是否开启持久化、日志级别等。但由于可以配置的选项较多,通过启动参数设置很不方便,所以Redis支持通过配置文件来设置这些选项。启动配置文件的方法是在启动是将配置文件的路径作为启动参数传递给redis-server,如:
通过启动参数传递同名的配置选项会覆盖配置文件中相应的参数,如
Redis提供了一个配置文件的模板redis.conf,位于源代码目录的更目录中,除此之外还可以在Redis运行时通过CONFIG SET命令在不重新启动Redis的情况下动态修改部分Redis配置,运行的时候也可以使用CONFIG GET命令获得Redis当前的配置情况,如
并不是所有的配置都可以使用CONFIG SET命令来修改
多数据库
Redis是一个字典结构的存储服务器,而实际上一个Redis实例提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中,每个数据库对外都是以一个从0 开始的递增数字命名,Redis默认支持16个数据库,可以通过配置参数databases来修改这一数字,客户端与Redis建立连接后会自动选择0号数据库,不过可以随时使用SELECT命令更换数据库,如要选择1号数据库:
Redis不支持自定义数据库的名字,每个数据库都以编号命名,开发者必须自己记录哪些数据库存储了哪些数据
Redis也不支持为每个数据库设置不同的访问密码,客户端要么可访问全部数据库,要么一个也访问不了
最重要的是多个数据库并不是完全隔离的,比如FLUSHALL命令可以清空一个Redis实例中所有数据库中的数据