博文目录:
一, 关系型数据库与非关系型数据库的区别.
二, Redis 数据库介绍.
三, Redis 的安装部署.
四, Redis 命令工具及常用命令
五, Redis 群集配置实例.
一, 关系型数据库与非关系型数据库的区别:
Redis 数据库是一个非关系型数据库, 和 oracle,MySQL,sql server 等关系型数据库不是同一类型. NoSQL 是非关系型数据库的总称, 主流的 NoSQL 数据库有 Redis,MongBD 等. NoSQL 的存储方式, 存储结构以及使用的场景都是完全不同的. NoSQL 数据库凭借着其非关系型, 分布式, 开源和横向扩展等优势, 被认为是下一代数据库产品.
NoSQL 可以解决关系型数据库产生的三高问题:
对数据库高并发读写需求.
对海量数据高效存储与访问需求.
对数据库高可扩展性与高可用性需求.
关系型数据库和非关系型数据库都有各自的特点与应用场景, 两者精密结合将会给 web 2.0 的数据库发展带来新的思路. 让关系型数据库关注在关系上, 非关系型数据库关注在存储上.
二, Redis 数据库介绍:
Redis 是一个开源的, 使用 C 语言编写, 支持网络, 可基于内存也可持久化的日志类型, key-value(键值对) 数据库, 是目前分布式架构中不可或缺的一环.
Redis 服务器是单进程模型, 也就是在一台服务器上可以同时启动多个 Redis 进程, 而 Redis 的实际处理速度则完全依靠主进程的执行效率. 若在服务器上只运行一个 Redis 进程, 当多个 client 同时访问时, 服务器的处理能力会有一定程度的下降; 若在同一台服务器上开启多个 Redis 进程, Redis 在提高并发处理能力的同时会给服务器的 CPU 造成很大的压力. 也就是说, 在实际生产环境中, 需要根据实际的需求来决定开启多少个 Redis 进程. 若对高并发要求更高些, 可能会考虑在同一台服务器上开启多个进程; 若 CPU 资源比较紧张, 采用单进程即可.
Redis 具有以下几个有点:
具有极高的读写速度, 数据读取的速度最高可达到 110000 次 / s, 数据的写入速度最高可以达到 81000 次 / s.
支持丰富的数据类型, 不仅仅支持简单的 key-value 数据类型, 还支持 strings,lists,hashes,sets 及 ordered sets 等数据类型操作.
支持数据的持久化, 可以将内存中的数据保存在磁盘中, 重启的时候可以再次加载进行使用.
原子性, Redis 所有操作都是原子性的.
支持数据备份, 即 master-salve 模式的数据备份.
Redis 是基于内存运行的数据库, 缓存是它比较常应用的场景之一, 除此之外, Redis 常见应用场景还包括获取最新 N 个数据的操作, 排行榜应用, 计数器应用, 存储关系, 实时分析系统, 日志记录等.
三, Redis 的安装部署:
需先去 Redis 官网 https://redis.io/ 下载相应的源码包或从这个 Redis 下载链接 https://pan.baidu.com/s/1jn0S4UdiwyG2a4t13srVMg (提取码: z0da) 直接下载.
- [root@Redis ~]# tar zxf Redis-5.0.5.tar.gz -C /usr/src/ #解包
- [root@Redis ~]# cd /usr/src/Redis-5.0.5/ #切换至解压出来的目录
- [root@Redis Redis-5.0.5]# make && make install #无需./configure 配置, 直接安装即可.
- [root@Redis Redis-5.0.5]# cd /usr/src/Redis-5.0.5/utils/ #设置相关配置文件
- [root@Redis utils]# ./install_server.sh #执行该脚本文件, 相关配置文件就生成了.
- # 接下来是在指定各种配置文件的存放目录, 一路按回车确认即可.
- [root@Redis utils]# cd /etc/init.d/ #优化控制服务启停
- [root@Redis init.d]# mv redis_6379 Redis
- [root@Redis init.d]# chkconfig --add Redis #添加为系统服务.
- [root@Redis init.d]# systemctl restart Redis
- [root@Redis init.d]# systemctl restart Redis
- [root@Redis init.d]# systemctl restart Redis
- [root@Redis init.d]# netstat -anpt | grep Redis #Redis 默认监听 6379 和群集端口 16379
- tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 7098/Redis-server 1
- # 现在只是安装了 Redis, 并没有配置群集, 所以 16379 端口并没有监听.
- [root@Redis init.d]# VIM /etc/Redis/6379.conf #查看 Redis 配置文件
- bind 127.0.0.1 192.168.1.1 #监听的主机地址
- appendonly yes #改为 "yes", 以便在每次更新操作后进行日志记录, 进行数据同步写入
- port 6379 #监听端口
- daemonize yes #启用守护进程
- pidfile /var/run/redis_6379.pid #指定 PID 文件
- loglevel notice #日志级别
- logfile /var/log/redis_6379.log #指定日志文件
上面为部分配置参数, 主配置中还有很多更多的配置参数, 具体可参考如下:
四, Redis 命令工具及常用命令:
Redis 软件提供了很多命令工具, 在安装 Redis 时, 所包含的软件工具同时会被安装到系统中, 在系统中可以直接使用, 这些命令工具的作用如下所示:
Redis-server: 用于启动 Redis 的工具.
Redis-benchmark: 用于检测 Redis 在本机的运行效率.
Redis-check-aof: 修复 AOF 持久化文件.
Redis-check-rdb: 修复 RDB 持久化文件.
Redis-cli:Redis 命令行工具.
下面是 Redis-cli 和 Redis-benchmark 工具的用法:
1,Redis-cli 命令行工具:
Redis-cli 命令可以连接指定的数据库, 可以用 "-h" 指定远程主机;"-p 指定服务的端口号", 若设置了密码, 可以用 "-a" 指定密码, 若没设置连接密码, 则可以省略 "-a" 选项. 如下:
- [root@Redis Redis]# Redis-cli -h 192.168.1.1 -p 6379
- # 若端口号默认监听 6379, 也可省略 - p 选项.
- 192.168.1.1:6379>
在数据库操作环境中, 使用 help 命令可获取命令类型的帮助. 其中, 有三种获取命令帮助的方式.
help @<group>: 获取 < group > 中的命令列表.
help <command>: 获取某个命令的帮助.
help <tab> : 获取可能帮助的主题列表.
示例如下:
- 192.168.1.1:6379> help @list #查看所有与 list 数据类型相关的命令
- BLPOP key [key ...] timeout
- summary: ck until one is available
- since: 2.0.0
- BRPOP key [key ...] timeout
- summary: block until one is available
- since: 2.0.0
- ...........................
- 192.168.1.1:6379> help set #查看 set 命令的命令帮助.
- SET key value [expiration EX seconds|PX milliseconds] [NX|XX]
- summary: Set the string value of a key
- since: 1.0.0
- group: string
2,Redis-benchmark 压力测试工具:
Redis-benchmark 是官方自带的 Redis 性能测试工具, 可以有效地测试 Redis 服务的性能. 该工具的常用选项如下:
用法示例:
- [root@Redis Redis]# Redis-benchmark -h 192.168.1.1 -p 6379 -c 100 -n 100000
- # 向指定 IP 地址及端口的 Redis 服务器发送 100 个并发连接与 100000 个请求测试性能.
- .........................
- ====== MSET (10 keys) ======
- 100000 requests completed in 1.74 seconds
- 100 parallel clients
- 3 bytes payload
- keep alive: 1
- 23.94% <= 1 milliseconds
- 98.02% <= 2 milliseconds
- 99.64% <= 3 milliseconds
- 99.76% <= 4 milliseconds
- 99.82% <= 5 milliseconds
- 99.89% <= 6 milliseconds
- 99.90% <= 7 milliseconds
- 99.94% <= 8 milliseconds
- 99.97% <= 9 milliseconds
- 100.00% <= 10 milliseconds
- 100.00% <= 10 milliseconds
- 57603.69 requests per second
- # 测试结果, milliseconds 为毫秒, 时间越短, 性能越好.
- [root@Redis Redis]# Redis-benchmark -h 192.168.1.1 -p 6379 -q -d 100
- # 测试向指定 Redis 服务器的指定端口 6379 存取大小为 100B 的数据包的性能.
- [root@Redis Redis]# Redis-benchmark -t set,lpush -n 100000 -q
- # 测试本机上 Redis 服务在进行 set 与 lpush 操作时的性能.
- SET: 67659.00 requests per second
- LPUSH: 64516.13 requests per second
Redis 数据库常用命令:
Redis 数据库采用 key-value(键值对) 的数据存储形式, 所使用的命令是 set 和 get.
set: 存放数据, 命令格式为 set key value.
get: 获取数据, 命令格式为 get key.
- [root@localhost ~]# Redis-cli #连接本地数据库
- 127.0.0.1:6379> set yuangong zhangsan #插入数据
- OK
- 127.0.0.1:6379> get yuangong #查询键值
- "zhangsan"
- 127.0.0.1:6379> keys y* #查询以 "y" 开头的数据
- 1) "yuangong"
- 127.0.0.1:6379> keys y? #查询以 "y" 开头后面包含一个任意一位的数据
- (empty list or set) #没有查到, 代表没有符合条件的数据
- 127.0.0.1:6379> keys y?? #查询以 "y" 开头后面包含一个任意两位的数据
- (empty list or set)
- 127.0.0.1:6379> exists yuangong #判断 "yuangong" 键是否存在
- (integer) 1 #表示 yuangong 键存在
- 127.0.0.1:6379> exists yu #判断 "yu" 键是否存在
- (integer) 0
- 127.0.0.1:6379> keys * #查询当前库中所有键
- 1) "counter:__rand_int__"
- 2) "mylist"
- 3) "key:__rand_int__"
- 4) "yuangong"
- 5) "myset:__rand_int__"
- 127.0.0.1:6379> del yuangong #删除 yuangong 键
- (integer) 1
- 127.0.0.1:6379> set lv 23
- OK
- 127.0.0.1:6379> type lv #获取键 "lv" 对应的 value 值类型
- string
rename 命令可以对已有的 key 进行重命名, 还有一个重命名的命令为 renamenx. 两者区别是前者更改的目标 key 值不管存在与否, 都将进行更改, 直接覆盖目标 key 值的数据; 后者 renamenx 命令是在更改时, 会检查目标键值是否存在, 若存在, 将放弃更改.
- 127.0.0.1:6379> get lvjian
- "23"
- 127.0.0.1:6379> set liuyi 30 #插入一条数据
- OK
- 127.0.0.1:6379> renamenx lvjian liuyi #将 "lvjian" 更改为 "liuyi"
- (integer) 0 #"liuyi" 存在, 放弃更改
- 127.0.0.1:6379> rename lvjian liuyi #使用 rename 命令进行更改
- OK
- 127.0.0.1:6379> get liuyi #直接覆盖目标数据
- "23"
- 127.0.0.1:6379> dbsize #查看当前数据库中 key 的数目
- (integer) 5
多数据库常用的命令
Redis 支持多数据库, Redis 在没有任何改动的情况下默认包含 16 个数据库, 数据库名使用数字 0--15 来依次命名. 每个库中的数据是独立的, 也就是说在 10 库中查不到 0 库中的数据.
- 127.0.0.1:6379> select 10 #切换至编号 10 的库
- OK
- 127.0.0.1:6379[10]> select 15 #切换至编号 15 的库
- OK
- 127.0.0.1:6379[15]> select 0 #切换至编号 0 的库
- OK
- 127.0.0.1:6379> move liuyi 10 #将该库中的数据移动到 10 库中
- (integer) 1
- 127.0.0.1:6379> select 10 #切换至编号 10 的库
- OK
- 127.0.0.1:6379[10]> get liuyi #查看移动过来的库
- "23"
- # 现在 0 库中已经查不到 "liuyi" 的数据了
清除数据库内数据:
Redis 数据库的整库数据删除主要分为两个部分: 清空当前数据库中的数据, 使用 flushdb 命令实现; 清空所有库中的数据, 使用 flushall 命令. 数据库清空操作比较危险, 生产环境下慎用!!!
五, Redis 群集配置实例:
基于 CentOS 7 的 Redis 群集原理及配置
来源: http://blog.51cto.com/14154700/2418347