目录
关系型数据库与非关系型数据库
关系型数据库
非关系型数据库
非关系型数据库产生背景
Redis简介
实验步骤
初始化文件
查看进程
配置参数的修改
连接本机redis
获取帮助
(1)查看所有与 List 数据类型的相关命令
redis-benchmark 测试工具
测试请求性能
备注:
测试存取性能
备注:
set与lpush操作性能
备注:
key相关命令
查询指令
查看当前数据库的所有键
查看当前数据库中以 v 开头的数据
查看当前数据库中以 v 开头后面包含任意一位的数据
查看当前数据库中以 v 开头 v 开头后面包含任意两位的数据
exists
type
rename(会覆盖)
renamenx(检测是否有同名的key)
dbsize
清空数据库内数据
Redis持久化
Redis持久化配置
RDB持久化配置
AOC持久化配置
AOF重写
性能管理
查看内存信息
回收策略
redis设置密码
关系型数据库与非关系型数据库
-
关系型数据库
- 一个结构化的数据库,创建在关系模型基础上
- 一般面向于记录
- 包括
- oraacle、MySQL、SQL Server、Microsoft Access、DB2等
-
非关系型数据库
- 除了主流的关系型数据库外的数据库,都认为是非关系型
- 包括
- Redis、MongBD、Hbase、CouhDB等
非关系型数据库产生背景
- High performance-----对数据库高并发读写需求
- Huge Storage -----对海量数据高效存储与访问需求
- High Scalability && High Availability ------对数据库高可扩展性与高可用性需求
Redis简介
- Redis基于内存运行支持持久化
- 采用key-value(键值对)的存储形式
- 优点
- 具有极高的数据读写速度
- 支持丰富的数据类型
- 支持数据的持久化
- 原子性
- 支持数据备份
实验步骤
安装部署redis,关闭防火墙,安装对应的依赖包
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# tar zxvf redis-4.0.9.tar.gz
[root@localhost ~]# yum -y install gcc* zlib-devel #安装对应的依赖关系
[root@localhost ~]# cd redis-4.0.9
[root@localhost redis-4.0.9]# make
[root@localhost redis-4.0.9]# make PREFIX=/usr/local/redis install #编译后的redis程序文件安装到对应的路径目录下
[root@localhost ~]# ln -s /usr/local/redis/bin/* /usr/local/bin/ #创建软链接
初始化文件
[root@localhost ~]# cd redis-4.0.9
[root@localhost redis-4.0.9]# cd utils/
[root@localhost utils]# ./install_server.sh
#运行下一直回车直到退出这个编辑程序
查看进程
[root@localhost utils]# netstat -anpt | grep redis
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 4914/redis-server 1
配置参数的修改
[root@localhost utils]# vim /etc/redis/6379.conf
#大概在70行下
bind 127.0.0.1 192.168.10.101 //修改监听的主机地址
port 6379 //端口
daemonize yes //启用守护进程
pidfile/var/run/redis_6379.pid //指定 PID 文件
loglevel notice //日志级别
logfile/var/log/redis_6379.log //指定日志文件
[root@localhost utils]# cd /etc/init.d
[root@localhost init.d]# ./redis_6379 restart #重新加载redis服务
[root@localhost init.d]# netstat -anpt | grep redis #查看进程服务
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 15010/redis-server
tcp 0 0 192.168.10.101:6379 0.0.0.0:* LISTEN 15010/redis-server
连接本机redis
[root@localhost ~]# redis-cli
127.0.0.1:6379>
远程连接
[root@localhost ~]# redis-cli -h 192.168.10.101 -p 6379
192.168.10.101:6379>
获取帮助
help@:获取中的命令列表;
help:获取某个命令的帮助;
help :获取可能帮助的主题列表。
备注:
help :获取可能帮助的主题列表。
输入help后,按下tab键
(1)查看所有与 List 数据类型的相关命令
127.0.0.1:6379>help @list
(2)查看 set 命令的命令帮助
127.0.0.1:6379>helpset
redis-benchmark 测试工具
redis-benchmark 是官方自带的 Redis 性能测试工具,可以有效的测试 Redis 服务的性能。
-h:指定服务器主机名;
-p:指定服务器端口;
-s:指定服务器 socket;
-c:指定并发连接数;
-n:指定请求数;
-d:以字节的形式指定 SET/GET 值的数据大小;
-k:1=keep alive 0=reconnect;
-r:SET/GET/INCR 使用随机 key, SADD 使用随机值;
-P:通过管道传输请求;
-q:强制退出 redis。仅显示 query/sec 值;
--csv:以 CSV 格式输出;
-l:生成循环,永久执行测试;
-t:仅运行以逗号分隔的测试命令列表;
-I:Idle 模式。仅打开 N 个 idle连接并等待。
测试请求性能
向 IP 地址为 192.168.10.101、端口为6379 的 Redis 服务器发送 100 个并发连接与100000 个请求测试性能
[root@localhost ~]# redis-benchmark -h 192.168.10.101 -p 6379 -c 100 -n 10000
备注:
-h:指定服务器主机名;
-p:指定服务器端口;
-c:指定并发连接数;
-n:指定请求数;
测试存取性能
测试存取大小为 100 字节的数据包的性能
[root@localhost ~]# redis-benchmark -h 192.168.10.101 -p 6379 -q -d 100
备注:
-h:指定服务器主机名;
-p:指定服务器端口;
-d:以字节的形式指定 SET/GET 值的数据大小;
-q:强制退出 redis。仅显示 query/sec 值;
set与lpush操作性能
测试本机上 Redis 服务在进行 set 与lpush 操作时的性能。
Lpush 命令将一个或多个值插入到列表头部
[root@localhost ~]# redis-benchmark -h 192.168.10.101 -p 6379 -t set,lpush -n 10000-q
备注:
-n:指定请求数;
-q:强制退出redis。仅显示 query/sec 值;
-t:仅运行以逗号分隔的测试命令列表;
key相关命令
查询指令
在 Redis 数据库中,与 key 相关的命令主要包含以下几种。
添加键值对使用 keys 命令可以取符合规则的键值列表,通常情况可以结合*、?等选项来使用。
127.0.0.1:6379> set k2 2
OK
127.0.0.1:6379> set k3 3
OK
127.0.0.1:6379> set k4 4
OK
127.0.0.1:6379> set k5 5
OK
查看当前数据库的所有键
127.0.0.1:6379> keys *
1) "key:__rand_int__"
2) "mylist"
3) "counter:__rand_int__"
4) "k3"
5) "k1"
6) "myset:__rand_int__"
7) "k2"
8) "k4"
9) "k5"
查看当前数据库中以 v 开头的数据
127.0.0.1:6379>keys v*
1) "v1"
2) "v5"
3) "v22"
查看当前数据库中以 v 开头后面包含任意一位的数据
127.0.0.1:6379>keys v?
1) "v1"
2) "v5"
查看当前数据库中以 v 开头 v 开头后面包含任意两位的数据
127.0.0.1:6379>keys v??
1) "v22"
exists
exists命令可用判断键值是否存在
结果为1,表示teacher键是否存在
127.0.0.1:6379> exists v1
(integer) 1
结果为0,表示v11不存在
127.0.0.1:6379> exists v11
(integer) 0
del 命令可以删除当前数据库的指定 v1
127.0.0.1:6379> del v1
(integer) 1
type
使用 type 命令可以获取 key 对应的 value 值类型
127.0.0.1:6379> type v2
string
redis支持的数据类型
String:最简单的类型,就是普通的set和get,作key value缓存。
Hash:类似map的一种结构,一般就是可以将结构化的数据,比如一个对象给缓存在redis里
List:List是有序列表,可以通过list存储一些列表型的数据结构,类似粉丝列表、文章的评论列表之类的西
Set:Set是无序集合,自动去重。
Sorted Set:Sorted Set是排序的set,去重但可以排序,写进去的时候给一个分数,自动根据分数排序。
rename(会覆盖)
rename 命令是对已有 key 进行重命名
在实际使用过程中,建议先用 exists 命令查看目标 key 是否存在,然后再决定是否执行 rename 命令,以避免覆盖重要数据
127.0.0.1:6379>keys v*
1) "v1"
2) "v22"
127.0.0.1:6379>rename v22 v2
OK
127.0.0.1:6379>keys v*
1) "v1"
2) "v2"
127.0.0.1:6379>get v1
"4"
127.0.0.1:6379>get v2
"5"
127.0.0.1:6379>rename v1 v2
OK
127.0.0.1:6379>get v1
(nil)
127.0.0.1:6379>get v2
"4"
renamenx(检测是否有同名的key)
renamenx 命令的作用是对已有 key 进行重命名,并检测新名是否存在。
使用renamenx 命令进行重命名时,如果目标 key 存在则不进行重命名。
127.0.0.1:6379>renamenx v2 teacher
(integer) 0
127.0.0.1:6379>keys *
1) "teacher"
2) "k3"
3) "k1"
4) "k2"
5) "v2"
127.0.0.1:6379>get teacher
"zhanglong"
127.0.0.1:6379>get v2
"4
dbsize
dbsize 命令的作用是查看当前数据库中 key 的数目。带原来自己的数目
127.0.0.1:6379> dbsize
(integer) 10
清空数据库内数据
清空当前数据库数据,使用flushdb
清空所有数据库的数据,使用 flushall 命令实现
Redis持久化
- 持久化概述
- Redis是运行在内存中,内存中的数据断电丢失
- 为了能够重用Redis数据,或者防止系统故障1,需要将Redis中的数据写入到磁盘空间中,即持久化
- 持久化分类
- RDB方式:创建快照的方式获取某一时刻Redis中所有数据的副本
- AOF方式:将执行的写命令写道文件末尾,以日志的方式来记录数据的变化
- 默认文件dump.rdb
- 触发条件
- 优缺点
- 适合大规模的数据恢复
- 如果业务对数据完整性和一致性要求不高,RDB是很好的选择
- 数据的完整性
Redis持久化配置
RDB持久化配置
[root@localhost ~]# vim /etc/redis/6379.conf
打开 6379.conf 文件之后,搜索 save,可以看到如下所示配置信息。
save 900 1:在 900 秒(15分钟)之后,如果至少有 1 个 key 发生变化,则 dump内存快照。
save 300 10:在 300 秒(5 分钟)之后,如果至少有 10 个key 发生变化,则 dump内存快照。
save 60 10000:在 60 秒(1 分钟)之后,如果至少有 10000个 key 发生变化,则dump 内存快照。
dbfilename dump.rdb :RDB文件名称 ##254行
dir /var/lib/redis/6379 :RDB文件路径 ##264行
rdbcompression yes :是否进行压缩 ##242行
AOC持久化配置
- Redis默认不开启
- 弥补RDB的不足(数据的不一致性)
- 采用日志的形式来记录每个写操作,并追加到文件中
- Redis重启会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作
AOF重写
appendonly yes #修改成为yes
避免磁盘IO操作冲突,等重写完后在写入
127.0.0.1:6379> bgrewriteaof
Background append only file rewriting started
性能管理
查看内存信息
127.0.0.1:6379> info memory
used_memory:1210776 #已经内存使用的大小,以字节为单位
used_memory_human:1.15M # 带单位展示,以M为单位
used_memory_rss:7802880 # 从操作系统角度看redis内存占用多少
used_memory_rss_human:7.44M # 带单位展示
maxmemory:1073741824 # 最大内存大小
maxmemory_human:1.00G # 带单位展示
回收策略
127.0.0.1:6379> expire k5 10
设置key的过期时间
expire k5 10
k5pk的过期时间为10秒
redis设置密码
通过配置文件redis.conf设置密码
requirepass pwd123 #取消注释
连接时输入密码
[root@localhost bin]# ./redis-cli -a pwd123
关闭
redis-cli -a pwd123 shutdown