【redis】初识redis入门,基础部署以及介绍

avatar
作者
猴君
阅读量:0

 本站以分享各种运维经验和运维所需要的技能为主

《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.缓存(放在数据库前面,memcache,mongodb) 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.支持的客户端语言很多   java,php,python,nodejs,C语言 ​ 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[root@db01 ~]# rz redis-3.2.12.tar.gz 或者 [root@db01 ~]# wget http://download.redis.io/releases/redis-3.2.12.tar.gz

2.安装依赖

Copy[root@db01 ~]# yum install -y gcc gcc-c++

3.解压移动

Copy[root@db01 ~]# tar xf redis-3.2.12.tar.gz  [root@db01 ~]# mv redis-3.2.12 /usr/local/ [root@db01 ~]# ln -s /usr/local/redis-3.2.12 /usr/local/redis

4.安装

Copy[root@db01 ~]# cd /usr/local/redis [root@db01 redis]# make

5.启动redis

Copy[root@db01 redis]# ./src/redis-server & ​ [root@db01 redis]# netstat -lntp   tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      11759/./src/redis-s

6.连接redis

Copy#配置环境变量 [root@db01 redis]# vim /etc/profile.d/redis.sh export PATH=/usr/local/redis/src:$PATH ​ #连接 [root@db01 redis]# redis-cli  127.0.0.1:6379> 

7.关闭redis

Copy[root@db01 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 ​ ​ [root@db01 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#默认的配置文件 [root@db01 redis]# pwd /usr/local/redis [root@db01 redis]# ll -rw-rw-r--  1 root root 46695 Jun 13  2018 redis.conf ​ #创建reids配置文件目录 [root@db01 redis]# mkdir /service/redis/6379 -p ​ #编写配置文件 [root@db01 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[root@db01 redis]# redis-server /service/redis/6379/redis.conf

五、redis操作

1.基本操作

Copy1.连接redis   [root@db01 redis]# redis-cli      127.0.0.1:6379> 2.查看所有数据     127.0.0.1:6379> keys *     (empty list or set)   #查看时注意不要轻易使用,如想查看数据,先查看数据量DBSIZE   127.0.0.1:6379> DBSIZE   (integer) 2018041 3.添加数据     127.0.0.1:6379> set k1 v1     OK 4.查看数据     127.0.0.1:6379> keys *     1) "k1"     127.0.0.1:6379> get k1     "v1" 5.删除数据     127.0.0.1:6379> keys *     1) "k1"     127.0.0.1:6379> DEL k1     (integer) 1     127.0.0.1:6379> keys *     (empty list or set) 6.修改数据   127.0.0.1:6379> set k1 v1     OK     127.0.0.1:6379> set k1 v11111     OK     127.0.0.1:6379> get k1     "v11111" 7.追加数据   127.0.0.1:6379> APPEND k1 000000     (integer) 12     127.0.0.1:6379> get k1     "v11111000000" 8.切换库     127.0.0.1:6379> SELECT 1     OK     127.0.0.1:6379[1]> SELECT 2     OK     127.0.0.1:6379[2]> SELECT 3     OK     127.0.0.1:6379> SELECT 16     (error) ERR invalid DB index

2.密码的设置

Copy1.配置文件配置密码     [root@db01 redis]# vim redis.conf      requirepass 123 2.使用密码连接   [root@db01 redis]# redis-cli -a 123 3.登陆后输入密码   [root@db01 redis]# redis-cli     127.0.0.1:6379> AUTH 123     OK     127.0.0.1:6379> DBSIZE     (integer) 2018041 4.redis连接后获取密码     127.0.0.1:6379> CONFIG GET requirepass     1) "requirepass"     2) "123" 5.redis连接后修改密码     127.0.0.1:6379> CONFIG set requirepass 234     OK     [root@db01 redis]# redis-cli   127.0.0.1:6379> DBSIZE     (error) NOAUTH Authentication required.     127.0.0.1:6379> auth 123     (error) ERR invalid password     127.0.0.1:6379> auth 234     OK

3.通用操纵

Copy1.判断key是否存在     127.0.0.1:6379> EXISTS k1     (integer) 1           #存在则返回1     127.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) "k1"     127.0.0.1:6379> RENAME k1 k100     OK     127.0.0.1:6379> KEYS *     1) "k100" 3.查看数据类型   127.0.0.1:6379> TYPE k100     string 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) 93     127.0.0.1:6379> PERSIST qiudao     (integer) 1     127.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)
1)RDB工作模式
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#编辑配置文件 [root@db01 ~]# 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 不会出发持久化

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!