为把网站建设更好,织梦可以做淘宝客网站吗,如何做网站答题领红包链接,wordpress 修改教程本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》#xff1a;python零基础入门学习 《python运维脚本》#xff1a; python运维脚本实践 《shell》#xff1a;shell学习 《terraform》持续更新中#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8… 本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》python零基础入门学习 《python运维脚本》 python运维脚本实践 《shell》shell学习 《terraform》持续更新中terraform_Aws学习零基础入门到最佳实战 《k8》暂未更新 《docker学习》暂未更新 《ceph学习》ceph日常问题解决分享 《日志收集》ELK各种中间件 《运维日常》运维日常 《linux》运维面试100问 《DBA》db的介绍使用mysql、redis、mongodb... 一、Redis简介
1.redis是什么
CopyRedis是一款开源的ANSI C语言编写的高级键值(key-value)缓存和支持永久存储NoSQL数据库产品。
Redis采用内存(In-Memory)数据集(DataSet) 。
支持多种数据类型。
运行于大多数POSIX系统如Linux、*BSD、OS X等。
redis就是非关系型数据库的一种存储方式是key:value
2.redis的作用
Copy1.会话保持键过期
2.缓存放在数据库前面memcachemongodb
3.消息队列kafka
3.为什么要用Redis
Copy1.redis功能全面
2.redis企业使用率高
4.redis优点
Copy1.高速读写将所有数据存储在内存单线程服务使用C语言
2.部署简单使用稳定
3.数据类型丰富String 字符串类型Hash 哈希类型List 列表类型Set 集合类型Sorted set 顺序集合类型
4.支持持久化将内存的数据写入磁盘
5.多种内存分配及回收策略
6.支持事物、锁
7.消息队列、消息订阅
8.支持高可用哨兵模式
9.支持分布式分片集群
10.支持的客户端语言很多javaphppythonnodejsC语言
11.redis为什么速度快呢· 因为存储在内存当中所以读写数据的时候不会受到磁盘i/o速度的限制所以速度极快
12.redis为什么要部署多实例呢· 因为redis是使用单线程方式所以无法发挥多核cpu的性能所以可能通过多实例来完善
13.为什么redis要基于单线程呢· 单线程在每秒就能抗住10万的并发速度已经非常快了所以就没有考虑多线程毕竟也比较复杂但是在redis4.0版本之后就 在某些功能上进行多线程操作
5.redis帮助
Copy官方网站https://redis.io/
下载网站http://download.redis.io/releases/
帮助网站http://redisdoc.com/
6.缓存服务对比
Copy#Memcached:
1.优点高性能读写、单一数据类型、支持客户端式分布式集群、一致性hash多核结构、多线程读写性能高。
2.缺点无持久化、节点故障可能出现缓存穿透、分布式需要客户端实现、跨机房数据同步困难、架构扩容复杂度高
#Redis:
1.优点高性能读写、多数据类型支持、数据持久化、高可用架构、支持自定义虚拟内存、支持分布式分片集群、单线程读写性能极高
2.缺点多线程读写较Memcached慢
#Tair
1.优点高性能读写、支持三种存储引擎ddb、rdb、ldb、支持高可用、支持分布式分片集群、支撑了几乎所有淘宝业务的缓存。
2.缺点单机情况下读写性能较其他两种产品较慢
#对比结论
1.Memcached多核的缓存服务更加适合于多用户并发访问次数访问次数较少的应用场景。
2.Redis单核缓存服务在单节点情况下更加适合少量用户多次访问的应用场景。
二、Redis使用场景
Copy1.缓存放在数据库前面
2.会话保持登录cookie、session折扣券代金券
3.排行榜
4.计数器论坛帖子点赞点踩
5.社交软件QQ共同好友微博共同爱好
6.消息队列结合ELK做日志收集
三、redis搭建
1.下载软件包
Copy[rootdb01 ~]# rz redis-3.2.12.tar.gz
或者
[rootdb01 ~]# wget http://download.redis.io/releases/redis-3.2.12.tar.gz
2.安装依赖
Copy[rootdb01 ~]# yum install -y gcc gcc-c
3.解压移动
Copy[rootdb01 ~]# tar xf redis-3.2.12.tar.gz
[rootdb01 ~]# mv redis-3.2.12 /usr/local/
[rootdb01 ~]# ln -s /usr/local/redis-3.2.12 /usr/local/redis
4.安装
Copy[rootdb01 ~]# cd /usr/local/redis
[rootdb01 redis]# make
5.启动redis
Copy[rootdb01 redis]# ./src/redis-server
[rootdb01 redis]# netstat -lntp
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 11759/./src/redis-s
6.连接redis
Copy#配置环境变量
[rootdb01 redis]# vim /etc/profile.d/redis.sh
export PATH/usr/local/redis/src:$PATH
#连接
[rootdb01 redis]# redis-cli
127.0.0.1:6379
7.关闭redis
Copy[rootdb01 redis]# redis-cli shutdown
11759:M 03 Aug 10:20:20.535 # User requested shutdown...
11759:M 03 Aug 10:20:20.535 * Saving the final RDB snapshot before exiting.
11759:M 03 Aug 10:20:20.546 * DB saved on disk
11759:M 03 Aug 10:20:20.546 # Redis is now ready to exit, bye bye...
[1] Done ./src/redis-server
[rootdb01 redis]# redis-cli
127.0.0.1:6379 shutdown
11851:M 03 Aug 10:20:59.580 # User requested shutdown...
11851:M 03 Aug 10:20:59.580 * Saving the final RDB snapshot before exiting.
11851:M 03 Aug 10:20:59.584 * DB saved on disk
11851:M 03 Aug 10:20:59.584 # Redis is now ready to exit, bye bye...
not connected quit
[1] Done ./src/redis-server
四、redis配置文件
1.配置
Copy#默认的配置文件
[rootdb01 redis]# pwd
/usr/local/redis
[rootdb01 redis]# ll
-rw-rw-r-- 1 root root 46695 Jun 13 2018 redis.conf
#创建reids配置文件目录
[rootdb01 redis]# mkdir /service/redis/6379 -p
#编写配置文件
[rootdb01 redis]# vim /service/redis/6379/redis.conf
bind 172.16.1.51 127.0.0.1 #绑定的主机地址
port 6379 #端口
daemonize no #守护进程模式启动
pidfile /service/redis/6379/redis_6379.pid #指定pid文件
loglevel notice #指定日志级别
logfile /service/redis/6379/redis_6379.log #指定日志文件
databases 16 #设置数据库的数量默认数据库为0
dbfilename redis_6379.rdb #指定本地持久化文件的文件名,默认是dump.rdb
dir /etc/redis/6379 #持久化数据文件存储地址
2.指定配置文件启动
Copy[rootdb01 redis]# redis-server /service/redis/6379/redis.conf
五、redis操作
1.基本操作
Copy1.连接redis[rootdb01 redis]# redis-cli 127.0.0.1:6379
2.查看所有数据127.0.0.1:6379 keys *(empty list or set)#查看时注意不要轻易使用如想查看数据先查看数据量DBSIZE127.0.0.1:6379 DBSIZE(integer) 2018041
3.添加数据127.0.0.1:6379 set k1 v1OK
4.查看数据127.0.0.1:6379 keys *1) k1127.0.0.1:6379 get k1v1
5.删除数据127.0.0.1:6379 keys *1) k1127.0.0.1:6379 DEL k1(integer) 1127.0.0.1:6379 keys *(empty list or set)
6.修改数据127.0.0.1:6379 set k1 v1OK127.0.0.1:6379 set k1 v11111OK127.0.0.1:6379 get k1v11111
7.追加数据127.0.0.1:6379 APPEND k1 000000(integer) 12127.0.0.1:6379 get k1v11111000000
8.切换库127.0.0.1:6379 SELECT 1OK127.0.0.1:6379[1] SELECT 2OK127.0.0.1:6379[2] SELECT 3OK127.0.0.1:6379 SELECT 16(error) ERR invalid DB index
2.密码的设置
Copy1.配置文件配置密码[rootdb01 redis]# vim redis.conf requirepass 123
2.使用密码连接[rootdb01 redis]# redis-cli -a 123
3.登陆后输入密码[rootdb01 redis]# redis-cli127.0.0.1:6379 AUTH 123OK127.0.0.1:6379 DBSIZE(integer) 2018041
4.redis连接后获取密码127.0.0.1:6379 CONFIG GET requirepass1) requirepass2) 123
5.redis连接后修改密码127.0.0.1:6379 CONFIG set requirepass 234OK[rootdb01 redis]# redis-cli127.0.0.1:6379 DBSIZE(error) NOAUTH Authentication required.127.0.0.1:6379 auth 123(error) ERR invalid password127.0.0.1:6379 auth 234OK
3.通用操纵
Copy1.判断key是否存在127.0.0.1:6379 EXISTS k1(integer) 1 #存在则返回1127.0.0.1:6379 EXISTS k2(integer) 0 #不存在则返回0
状态码:
0 表示这个key不存在
1 表示这个key存在
N 表示有的N个key存在
2.修改key的名字127.0.0.1:6379 KEYS *1) k1127.0.0.1:6379 RENAME k1 k100OK127.0.0.1:6379 KEYS *1) k100
3.查看数据类型127.0.0.1:6379 TYPE k100string
4.设置生存时间#以秒为单位127.0.0.1:6379 EXPIRE qiudao 10(integer) 1#以毫秒为单位127.0.0.1:6379 PEXPIRE k100 10000(integer) 1
5.查看生存时间127.0.0.1:6379 TTL k100(integer) 1 #正整数生存时间倒计时127.0.0.1:6379 TTL k100(integer) -1 #-1代表没有设置生存时间127.0.0.1:6379 TTL k100(integer) -2 #代表设置过生存时间已删除已过期
6.取消生存时间127.0.0.1:6379 TTL qiudao(integer) 93127.0.0.1:6379 PERSIST qiudao(integer) 1127.0.0.1:6379 TTL qiudao(integer) -1
六、持久化
1.什么是持久化
Copy将内存中的数据写入到磁盘永久保存
2.持久化的模式
Copy1.RDB模式
2.AOF模式
3.RDB和AOF优缺点
Copy1.RDB和AOF优缺点
RDB: 可以在指定的时间间隔内生成数据集的时间点快照,把当前内存里的状态快照到磁盘上
优点: 压缩格式/恢复速度快,适用于备份,主从复制也是基于rdb持久化功能实现
缺点: 可能会丢失数据
AOF: 类似于mysql的binlog,重写,、每次操作都写一次/1秒写一次,文件中的命令全部以redis协议的格式保存,新命令会被追加到文件的末尾
优点: 安全,有可能会丢失1秒的数据
缺点: 文件比较大,恢复速度慢
4.RDB模式
Copy可以在指定的时间间隔内生成数据集的时间点快照point-in-time snapshot
1RDB工作模式
Copy1.默认情况下Redis保存数据集快照到磁盘名为dump.rdb的二进制文件。你可以设置让Redis在N秒内至少有M次数据集改动时保存数据集或者你也可以手动调用SAVE或者BGSAVE命令。
2.在上文中我们已经在配置文件中做过对应的配置
例如这个配置会让Redis在每个60秒内至少有1000次键改动时自动转储数据集到磁盘
save 60 1000
3.当 Redis 需要保存 dump.rdb 文件时服务器执行以下操作
Redis 调用 fork() 同时拥有父进程和子进程。
子进程将数据集写入到一个临时的 RDB 文件中。当子进程完成对新 RDB 文件的写入时 Redis 用新RDB 文件替换原来的 RDB 文件并删除旧的 RDB 文件。
4.这种方式使得 Redis 可以从写时复制机制中获益。
2配置RDB持久化
Copy#编辑配置文件
[rootdb01 ~]# vim /service/redis/6379/redis.conf
bind 172.16.1.51 127.0.0.1
port 6379
daemonize yes
pidfile /service/redis/6379/redis_6379.pid
loglevel notice
logfile /service/redis/6379/redis_6379.log
#设置redis密码
requirepass 123
#持久化数据文件存储位置
dir /etc/redis/6379
#rdb持久化数据文件名
dbfilename dump.rdb
#900秒15分钟内有1个更改
save 900 1
#300秒5分钟内有10个更改
save 300 10
#60秒1分钟内有10000个更改
save 60 10000
3使用RDB文件
Copy1.先停止redis
2.将rdb文件放到指定目录下
3.启动redis
结论:
1.执行shutdown的时候,内部会自动执行bgsave,然后再执行shutdown
2.pkill kill killall 都类似于执行shutdown命令.会触发bgsave持久化
3.恢复的时候,rdb文件名称要和配置文件里写的一样
4.如果没有配置save参数,执行shutdown不会自动bgsave持久化
5.如果没有配置save参数,可以手动执行bgsave触发持久化保存
6.kill -9 redis 不会出发持久化