前言
由于业务需要,我要了解一下内存数据库,之前有使用过memcache
,对比于memcache
,有另外一款叫redis
的内存数据库更加吸引开发者的眼球。至于优缺点就不在这里叨絮了,以下直接摘录我的一些学习笔记。
安装
|
|
测试
|
|
配置
推荐在生产环境中使用启动脚本方式启动redis服务。启动脚本redis_init_script
位于位于Redis的 /utils/ 目录下。
确保守护进程开启 daemonize yes
12345vi redis.conf# By default Redis does not run as a daemon. Use 'yes' if you need it.# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.daemonize yes修改自启动脚本,
#!/bin/sh
下增加两行注。防止service redisd does not support chkconfig
报错!123456vi utils/redis_init_script#!/bin/sh# chkconfig: 2345 90 10# description: Redis is a persistent key-value database#根据启动脚本要求,将修改好的配置文件以端口为名复制一份到指定目录。需使用root用户
12mkdir /etc/rediscp redis.conf /etc/redis/6379.conf将启动脚本复制到/etc/init.d目录下,本例将启动脚本命名为redisd(通常都以d结尾表示是后台自启动服务)。
1cp redis_init_script /etc/init.d/redisd设置为开机自启动
123456#设置为开机自启动服务器chkconfig redisd on#打开服务service redisd start#关闭服务service redisd stop
数据类型
Strings - 字符串
命令:set、get,
字符串值可以存储最大512兆字节的长度Hashes - 哈希值
命令:hset、hmst、hget、hgetall,每个哈希可存储多达$2^{32}$-1个字段Lists - 列表
命令:lpush、lrange,排序插入顺序,列表的最大长度为$2^{32}$-1元素Sets - 集合
命令:sadd、smembers,成员唯一性,成员中集最大数量为$2^{32}$-1Zsets - 集合排序
命令:zadd、zrange、zrangebyscore, 类似于集合,字符串不重复的有序集合,根据score排序
客户端
|
|
Redis接受上配置监听TCP端口和Unix套接字客户端的连接,如果启用。当一个新的客户端连接被接受,如有以下操作进行:
客户端套接字置于非阻塞状态,因为Redis的使用复用和非阻塞I/O操作。
TCP_NODELAY选项设定是为了以确保我们没有连接延迟。
创建一个可读的文件时,这样Redis能够尽快收集客户端的查询作为新的数据可供读取的Socket中。
发布订阅
|
|
事务
Redis事务由指令 MULTI 启动,然后需要传递事务,而且整个事务是通过执行EXEC命令执行后,执行命令的列表。
常用命令介绍
- EVAL 执行LUA脚本
- AUTH password 服务器验证给定的密码
- ECHO message 打印给定的字符串
- PING 检查服务器是否正在运行
- QUIT 关闭当前连接
- SELECT index 更改当前连接所选数据库
- CLIENT LIST 获取客户端连接到服务器的连接列表
- MONITOR 监听由实时服务器接收到的所有请求
- INFO [section] 获取有关服务器的信息和统计数据
- CONFIG GET CONFIG_SETTING_NAME 获取配置
- FLUSHDB 从当前数据库中删除所有项
- DBSIZE 返回所选数据库中的键的数目
- KEYS * 返回所有key
备份
Redis的数据回写机制分同步和异步两种,
- 同步回写即SAVE命令,主进程直接向磁盘回写数据。在数据大的情况下会导致系统假死很长时间,所以一般不是推荐的。
- 异步回写即BGSAVE命令,主进程fork后,复制自身并通过这个新的进程回写磁盘,回写结束后新进程自行关闭。由于这样做不需要主进程阻塞,系统不会假死,一般默认会采用这个方法。
还原Redis数据
要恢复Redis数据只是移动Redis备份文件(dump.rdb)到Redis目录,然后启动服务器就行。
目前Redis持久化的方式有两种: RDB 和 AOF
RDB就是Snapshot快照存储,是默认的持久化方式。
可理解为半持久化模式,即按照一定的策略周期性的将数据保存到磁盘。
对应产生的数据文件为dump.rdb,通过配置文件中的save参数来定义快照的周期。
下面是默认的快照设置:
AOF(Append-Only File)比RDB方式有更好的持久化性。
由于在使用AOF持久化方式时,Redis会将每一个收到的写命令都通过Write函数追加到文件中,类似于MySQL的binlog。
当Redis重启是会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。
对应的设置参数为:
为了压缩AOF的持久化文件,Redis提供了bgrewriteaof命令。
收到此命令后Redis将使用与快照类似的方式将内存中的数据以命令的方式保存到临时文件中,最后替换原来的文件,以此来实现控制AOF文件的增长。
由于是模拟快照的过程,因此在重写AOF文件时并没有读取旧的AOF文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的AOF文件。
通常,如果你要想提供很高的数据保障性,那么建议你同时使用两种持久化方式。
安全
|
|
设置密码,如果任何客户端运行命令没有验证后,再(错误)NOAUTH需要验证。错误将再回到这点。因此,客户端需要使用AUTH命令进行认证。
基准
Redis的基准是实用程序运行n个命令检查Redis 的性能。
管道传输
Redis是一个TCP服务器,并支持请求/响应协议。redis的一个请求完成需要下面的步骤:
客户端发送一个查询到服务器,并从套接字中读取,通常在封闭的方式,对服务器的响应。
服务器处理命令并将响应返回给客户端。