非关系数据库:Redis

一、Redis简介

1.Redis概述

  • Redis是一个开源的、使用c语言编写的NosQL数据库。
  • Redis基于内存运行并支持持久化(支持存储在磁盘),采用key-value(键值对)的存储形式,是目前分布式架构中不可或缺的一环

Redis服务器程序默认是单进程模型

  • Redis服务在一台服务器上可以同时启动多个Redis进程,Redis的实际处理速度则是完全依靠于主进程的执行效率

开双进程的好处

  • 备份
  • 抗高并发的同时尽量不给CPU造成太大的压力

2.Redis的优点

  • 具有极高的数据读写速度
    数据读取的速度最高可达到110000 次/s,数据写入速度最高可达到81000 次/s
  • 支持丰富的数据类型
    支持key-value、 Strings、 Lists、Hashes ( 散列值)、Sets 及Ordered Sets等数据类型操作
  • 支持数据的持久化
    可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用
  • 原子性
    Redis所有操作都是原子性的:一起成功,一起失败
  • 支持数据备份
    即master-salve 模式的数据备份

3.常见应用场景

  • 获取最新N个数据的操作
  • 排行榜类应用
  • 计数器应用
  • 存储关系
  • 实时分析系统
  • 日志记录

二、Redis命令工具

命令结果
redis-server用于启动Redis的工具
redis-benchmark用于检测Redis在本机的运行效率
redis-check-aof修复AOF持久化文件
redis-check-rdb修复RDB持久化文件
redis-cliRedis命令行工具

1.redis-benchmark 测试工具

redis-benchmark是官方自带的Redis性能测试工具,可以有效的测试Redis服务的性能

常用参数含义
-h指定服务器主机名
-p指定服务器端口
-s指定服务器socket (套接字)
-c指定并发连接数
-n指定请求数
-d以字节的形式指定SET/GET8值的数据大小
-k1=keep alive 0=reconnect
-rSET/GET/ INCR使用随机key, SADD使用随机值
-P通过管道传输请求
-q强制退出redis。 仅显示query/sec值
–csv以csv格式输出
-1生成循环,永久执行测试
-t仅运行以逗号分隔的测试命令列表
-IIdle模式。 仅打开N个idle连接并等待

2.redis-cli 远程登录的命令行工具

redis-cli的全程即redis-client,表示以客户端的身份登录

常用参数含义
-h指定远程主机
-p指定Redis服务的端口号
-a指定密码,未设置数据库密码可以省略-a选项

3.redis-check-aof 和 redis-check-rdb

aof和rdb是redis服务中持久化功能的两种形式AOF、RDB

三、部署Redis

1.安装依赖包

[root@localhost ~]# yum -y install gcc gcc-c++ make
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
软件包 gcc-4.8.5-44.el7.x86_64 已安装并且是最新版本
软件包 gcc-c++-4.8.5-44.el7.x86_64 已安装并且是最新版本
软件包 1:make-3.82-24.el7.x86_64 已安装并且是最新版本
无须任何处理
[root@localhost ~]# 

2.解压并安装

[root@localhost redis-5.0.7]# make && make PREFIX=/usr/local/redis install

在这里插入图片描述

[root@localhost utils]# ./install_server.sh 
Welcome to the redis service installer
This script will help you easily set up a running redis server

Please select the redis port for this instance: [6379] 
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf] 
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] 
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] 
Selected default - /var/lib/redis/6379
Please select the redis executable path [] /usr/local/redis/bin/redis-server
Selected config:
Port           : 6379   //默认监听端口
Config file    : /etc/redis/6379.conf    //配置文件路径
Log file       : /var/log/redis_6379.log   //日志文件路径
Data dir       : /var/lib/redis/6379    //数据文件路径
Executable     : /usr/local/redis/bin/redis-server            //可执行文件路径
Cli Executable : /usr/local/redis/bin/redis-cli   //客户端命令工具
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!
[root@localhost utils]# 

[root@localhost utils]# ln -s /usr/local/redis/bin/* /usr/local/bin/   //优化管理

3.修改配置文件

[root@localhost utils]# vim /etc/redis/6379.conf 
bind 127.0.0.1 192.168.30.7  //添加监听IP
port 6379                    //默认监听端口  
daemonize yes                //开启守护进程
pidfile /var/run/redis_6379.pid  //指定PID文件
loglevel notice                  //指定日志级别
logfile /var/log/redis_6379.log  //指定日志文件

4.重启服务

[root@localhost utils]# /etc/init.d/redis_6379 restart
Stopping ...
Redis stopped
Starting Redis server...
[root@localhost utils]# 

四、Redis数据库常用命令

1.存放和获取数据

set :存放数据     set key value
get :获取数据     get key
127.0.0.1:6379> keys *  //查看数据库中所有键
(empty list or set)
127.0.0.1:6379> set k1 1  //设置k1键值为1
OK
127.0.0.1:6379> set k11 2
OK
127.0.0.1:6379> set v1 1
OK
127.0.0.1:6379> set v11 2
OK
127.0.0.1:6379> keys *
1) "v11"
2) "k11"
3) "k1"
4) "v1"
127.0.0.1:6379> get k1   //获取k1的键值
"1"
127.0.0.1:6379> get k2
(nil)
127.0.0.1:6379> get v1
"1"
127.0.0.1:6379> get v11
"2"
127.0.0.1:6379> keys k*  //获取以k开头的键
1) "k11"
2) "k1"
127.0.0.1:6379> keys k?  //获取以k开头,包含任意一位的键
1) "k1"

2.重命名

rename 源key 目标key    无论目标key是否存在都会进行重命名并覆盖
renamenx 源key 目标key  目标key存在则取消重命名
127.0.0.1:6379> rename k1 k2  //k2不存在
OK
127.0.0.1:6379> get k1
(nil)
127.0.0.1:6379> get k2
"1"
127.0.0.1:6379> renamenx k2 k11   //k11存在
(integer) 0
127.0.0.1:6379> get k2
"1"
127.0.0.1:6379> get k11
"2"
127.0.0.1:6379> 

3.判断键值是否存在,键值类型

127.0.0.1:6379> exists k1   //0表示不存在
(integer) 0
127.0.0.1:6379> exists k2    //1表示存在
(integer) 1
127.0.0.1:6379> type k2     //string类型
string

4.查看当前数据库的key的数目

127.0.0.1:6379> dbsize 
(integer) 4
127.0.0.1:6379> keys *
1) "k11"
2) "v11"
3) "k2"
4) "v1"

5.多数据库切换

默认情况下只包含16个数据库

127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> keys *
1) "k11"
2) "v11"
3) "k2"
4) "v1"
127.0.0.1:6379> select 15
OK
127.0.0.1:6379[15]> keys *
(empty list or set)
127.0.0.1:6379[15]> select 16
(error) ERR DB index is out of range
127.0.0.1:6379[15]> 

6.多数据库间移动数据

格式 move 键值 数据库序号
127.0.0.1:6379> select 1  //切换至数据库1
OK
127.0.0.1:6379[1]> keys *   //无数据
(empty list or set)
127.0.0.1:6379[1]> select 0  
OK
127.0.0.1:6379> move v1 1    //移动到1
(integer) 1
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *    //数据存在
1) "v1"
127.0.0.1:6379[1]> 

7.清空数据库数据

127.0.0.1:6379[1]> flushdb  //清空当前数据库数据
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> keys *
1) "k11"
2) "v11"
3) "k2"
127.0.0.1:6379> flushall  //清空所有库数据,慎用
OK
127.0.0.1:6379> keys *
(empty list or set)

五、性能管理

1.查看内存使用

127.0.0.1:6379> info memory
# Memory
used_memory:853328
used_memory_human:833.33K
used_memory_rss:10747904
used_memory_rss_human:10.25M
used_memory_peak:853328
used_memory_peak_human:833.33K
used_memory_peak_perc:100.01%
used_memory_overhead:841102
used_memory_startup:791408
used_memory_dataset:12226
used_memory_dataset_perc:19.74%
allocator_allocated:1433688
allocator_active:1859584
allocator_resident:8970240
total_system_memory:3954188288
total_system_memory_human:3.68G
used_memory_lua:37888
used_memory_lua_human:37.00K
used_memory_scripts:0
used_memory_scripts_human:0B
number_of_cached_scripts:0

2.内存碎片率

操作系统分配的内存值used_memory_rss除以Redis使用的内存值used_memory计算得出内存碎片是由操作系统低效的分配/回收物理内存导致的(不连续的物理内存分配)
跟踪内存碎片率对理解Redis实例的资源性能是非常重要的:

  • 内存碎片率稍大于1是合理的,这个值表示内存碎片率比较低
  • 内存碎片率超过1.5,说明Redis消耗了实际需要物理内存的150号,其中50号是内存碎片率。需要在redis-cli工具上输入shutdown save命令,并重启Redis服务器。
  • 内存碎片率低于1的,说明Redis内存分配超出了物理内存,操作系统正在进行内存交换。需要增加可用物理内存或减少Redis内存占用

3.内存使用率

redis实例的内存使用率超过可用最大内存,操作系统将开始进行内存与swap空间交换
避免内存交换发生的方法:

  • 针对缓存数据大小选择安装Redis实例(云平台里面使用RDS服务,ECS云主机选择内存、缓存型配置)
  • 尽可能的使用Hash数据结构存储
  • 设置key的过期时间

4.内回收key

保证合理分配redis有限的内存资源。
当达到设置的最大阀值时,需选择–种key的回收策略,默认情况下回收策略是禁止删除。
配置文件中修改maxmemory- policy属性值

vim /etc/redis/6379.conf
598 maxmemory-policy noenviction
volatile-lru //使用LRU算法从已设置过期时间的数据集合中淘汰数据
volatile-ttl  //从已设置过期时间的数据集合中挑选即将过期的数据淘汰
volatile-random //从已设置过期时间的数据集合中随机挑选数据淘汰
allkeys-lru  //使用LRU算法从所有数据集合中淘汰数据
allkeys-random  //从数据集合中任意选择数据淘汰
noenviction     //禁止淘汰数据

小结

redis是一种非关系型数据库(内存/缓存)
redis相比于其他非关数据库优势在于:
①数据类型丰富
②持久化(redis重启时,会进行数据恢复)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值