Redis笔记,全网最详细!!(16)

本文全面介绍Redis,从NoSQL的背景到Redis的特性,详细讲解Redis的安装过程,包括下载、编译、配置及启动,然后探讨Redis的客户端、基本操作、数据结构、事务、持久化策略、主从复制、哨兵模式,还涉及Jedis的使用和可视化客户端操作。
摘要由CSDN通过智能技术生成

文章目录

第一章、NoSQL简介

1.1 数据库应用的演变历程

单机数据库时代、Memcached时代、读写分离时代、分表分库时代(集群)、nosql时代。

1.2 NoSQL数据库

彻底改变底层存储机制。不再采用关系数据模型,而是采用聚合数据结构存储数据
有Redis、MongoDB、HBASE…
在这里插入图片描述

1.3 当前NoSQL的使用

NoSQL和传统的关系型数据库不是排斥和取代的关系,在一个分布式应用中往往是结合使用的。复杂的互联网应用通常都是多数据源、多数据类型,应该根据数据的使用情况和特点,存放在合适的数据库中。

1.4 NoSQL数据模型

传统关系型数据库:表
在这里插入图片描述
NoSql数据库:聚合结构。把组相关联的数据作为一个整体进行存储和管理
BSON:数据保存到键值对中、数据和数据之间用逗号隔开,{}表示对象,[]表示数组。
k-v键值对、列簇、图标模型等。
Redis采用的是k-v模型存储数据
在这里插入图片描述

第二章、Redis

2.1 Redis简介

Redis中的数据大部分时间都是存储在内存中的,适合存储频繁访问、数据量比较小的数据。
缓存数据库
在这里插入图片描述

2.2 Redis的特点

在这里插入图片描述

2.3 Linux上安装Redis

第一步:下载redis

https://redis.io/
在这里插入图片描述

第二步:使用Xftp工具上传redis-5.0.2.tar.gz到linux 系统

在这里插入图片描述

第三步:解压redis-5.0.2.tar.gz到/opt目录

在这里插入图片描述

第四步:编译redis,进入解压目录,并且执行make命令

在这里插入图片描述

报错:gcc命令未找到
在这里插入图片描述

第五步:安装gcc

什么是 gcc ?
gcc是GNU compiler collection的缩写,它是Linux下一个编译器集合(相当于javac ),是c或c++程序的编译器。

1.怎么安装gcc ?
方式一:在有外网的情况下,使用yum进行安装。执行命令:yum -y install gcc。
在这里插入图片描述
2.执行gcc –v查看Linux内核版本
在这里插入图片描述

第六步:再次回到redis解压目录执行make命令进行编译

在这里插入图片描述

第七步:进行清理工作

在这里插入图片描述

第八步:再次执行make指令进行编译

在这里插入图片描述

第九步:执行make install安装redis

在这里插入图片描述
注意:在make执行之后再执行 make install,该操作则将 src下的许多可执行文件复制到/usr/local/bin 目录下,这样做可以在任意目录执行redis的软件的命令(例如启动,停止,客户端连接服务器等), make install 可以不用执行,看个人习惯。

查看make编译结果,cd src目录
在这里插入图片描述
在这里插入图片描述

第十步:启动Redis

启动方式:
① 前台启动 redis-server
使用配置文件中的默认参数启动
在这里插入图片描述
②后台启动 redis-server &
使用配置文件中的默认参数启动
在这里插入图片描述
③根据配置文件启动 启动命令 配置文件 &
在这里插入图片描述
注意:如果修改了redis的配置文件redis.conf,必须在启动时指定配置文件,否则还是使用默认参数启动!

第十一步:关闭Redis服务

关闭方式:
①使用redis客户端关闭,向服务器发出关闭命令
任意目录下执行 指令redis-cli shutdown
推荐使用这种方式, redis先完成数据操作,然后再关闭。
例如:
在这里插入图片描述
②kill pid 或者 kill -9 pid
这种不会考虑当前应用是否有数据正在执行操作,直接就关闭应用。
先使用 ps -ef | grep redis 查出进程号,在使用 kill pid
在这里插入图片描述

2.4 Redis的客户端

Redis客户端是一个程序,通过网络连接到Redis服务器,从而实现跟 Redis服务器的交互。
Redis客户端发送命令,同时显示Redis服务器的处理结果。

redis-cli(Redis Command Line Interface)是Redis自带的基于命令行的Redis客户端,用于与服务端交互,我们可以使用该客户端来执行redis的各种命令。

2.4.1 启动Redis客户端

先开启redis服务
在这里插入图片描述
一、直接连接
在任意目录执行 redis-cli:默认连接(本机)127.0.0.1 ,端口6379的redis服务

二、指定IP和端口连接redis

-h redis主机IP(可以指定任意的redis服务器)
-p端口号(不同的端口表示不同的redis应用)
在这里插入图片描述
在任意目录下执行 redis-cli -h 127.0.0.1 -p 6379
在这里插入图片描述

2.4.2 关闭Redis客户端

退出Redis客户端:exit或者quit指令。
在这里插入图片描述

2.5 Redis基本知识

2.5.1 测试Redis性能

在这里插入图片描述
在这里插入图片描述

2.5.2 查看Redis 服务是否正常运行

redis >ping 返回PONG
解释:输入ping,redis给我们返回PONG,表示redis服务运行正常
在这里插入图片描述

2.5.3 查看redis服务器的统计信息:info

语法:info [section]

作用:以一种易于解释且易于阅读的格式,返回关于 Redis 服务器的各种信息和统计数值。section 用来返回指定部分的统计信息。 section的值:server , clients ,memory等等。不加section 返回全部统计信息

返回值:指定section的统计信息或全部信息

例1:统计server的信息
在这里插入图片描述
例2:统计全部信息
在这里插入图片描述

2.5.4 redis默认使用16个库

库就相当于是MySQL中自己定义的数据库,比如CRM数据库…
Redis默认使用16个库,从0到15。 对数据库个数的修改,在redis.conf文件中databases 16,理论上可以配置无限多个。
在这里插入图片描述
Redis的库和关系型数据库中的数据库实例类似,但又有一些不同,比如redis中各个库不能自定义命名,只能用序号表示,redis中各个库不是完全独立的,使用时最好一个应用使用一个redis实例,不建议一个redis实例中保存多个应用的数据。Redis实例本身所占存储空间其实是非常小的,因此不会造成存储空间的浪费。
Redis中的数据库实例只能由redis服务来创建和维护,开发人员不能修改和自行创建数据库实例,但是MySQL可以

2.5.5切换库命令:select db

默认使用第0个,如果要使用其他数据库,命令是 select index

例子:切换到1数据库
在这里插入图片描述

2.5.6 查看当前数据库中key的数目:dbsize

语法:dbsize

作用:返回当前数据库的 key 的数量。

返回值:数字,key的数量
在这里插入图片描述

2.5.7 查看当前数据库中有哪些key:keys *

在这里插入图片描述

2.5.8 清空当前库:flushdb

在这里插入图片描述

2.5.9 清空所有的数据库:flushall

在这里插入图片描述
这也体现出redis中的库并不是完全无关的。

2.5.10 config get * 获得redis的所有配置值

语法:config get parameter

作用:获取运行中Redis服务器的配置参数, 获取全部配置可以使用*。参数信息来自redis.conf 文件的内容。

例1:获取数据库个数 config get databases
在这里插入图片描述
例2:获取端口号config get port
在这里插入图片描述

2.6 Redis的5种数据结构

2.6.1 字符串类型 string

字符串类型是Redis中最基本的数据结构,它能存储任何类型的数据,包括二进制数
据,序列化后的数据,JSON化的对象甚至是一张图片。最大512M。

单key:单value
在这里插入图片描述

2.6.2 列表类型 list

Redis列表是简单的字符串列表,按照插入顺序排序,元素可以重复。你可以添加一个元素到列表的头部(左边)或者尾部(右边),底层是个链表结构。

单key:多有序value
在这里插入图片描述

2.6.3 集合类型 set

Redis的Set是string类型的无序无重复集合。

单key:多无序value
在这里插入图片描述

2.6.4 哈希类型 hash

Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。

单key:对象(属性:值)
在这里插入图片描述

2.6.5 有序集合类型 zset (sorted set)

Redis 有序集合zset和集合set一样也是string类型元素的集合,且不允许重复的成员。
不同的是zset的每个元素都会关联一个分数(分数可以重复),redis通过分数来为集合中的成员进行从小到大的排序。

单key:多有序value:
你输入是Salary:5000 李四,3500 张三,8000 周丽
内部存储是Salary:3500 张三,5000 李四,8000 周丽
在这里插入图片描述

2.7 Redis的常用操作命令

2.7.1 Redis的Key的操作命令

2.7.1.1 keys

在这里插入图片描述
在这里插入图片描述

2.7.1.2 exists

在这里插入图片描述
在这里插入图片描述

2.7.1.3 move

在这里插入图片描述
在这里插入图片描述

2.7.1.4 ttl

在这里插入图片描述
在这里插入图片描述

2.7.1.5 expire

在这里插入图片描述
在这里插入图片描述

2.7.1.6 type

在这里插入图片描述
在这里插入图片描述

2.7.1.7 rename

在这里插入图片描述
在这里插入图片描述

2.7.1.8 del

在这里插入图片描述
在这里插入图片描述

2.7.2 字符串类型(string)的数据操作命令

在这里插入图片描述

2.7.2.1 set

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.7.2.2 get

在这里插入图片描述
在这里插入图片描述

2.7.2.3 append

在这里插入图片描述
在这里插入图片描述

2.7.2.4 strlen

在这里插入图片描述
在这里插入图片描述

2.7.2.5 incr

在这里插入图片描述
在这里插入图片描述

2.7.2.6 decr

在这里插入图片描述
在这里插入图片描述

2.7.2.7 incrby

在这里插入图片描述
在这里插入图片描述

2.7.2.8 decrby

在这里插入图片描述
在这里插入图片描述

2.7.2.9 getrange

在这里插入图片描述
依次往前的字符是-2…
Getrange address 0 -1: 就是整个value
在这里插入图片描述

2.7.2.10 setrange

在这里插入图片描述
能覆盖几个就覆盖几个
在这里插入图片描述

2.7.2.11 setex

在这里插入图片描述
在这里插入图片描述

2.7.2.12 setnx

和set指令不同,set可以覆盖
在这里插入图片描述
在这里插入图片描述

2.7.2.13 mset

在这里插入图片描述
在这里插入图片描述

2.7.2.14 mget

在这里插入图片描述
在这里插入图片描述

2.7.2.15 msetnx

在这里插入图片描述
在这里插入图片描述

2.7.3 列表(List)的数据操作命令

在这里插入图片描述

2.7.3.1 lpush

在这里插入图片描述
在这里插入图片描述

2.7.3.2 rpush

在这里插入图片描述
在这里插入图片描述

2.7.3.3 lrange

在这里插入图片描述
在这里插入图片描述

2.7.3.4 lpop

在这里插入图片描述
在这里插入图片描述

2.7.3.5 rpop

在这里插入图片描述
在这里插入图片描述

2.7.3.6 lindex

在这里插入图片描述
在这里插入图片描述

2.7.3.7 llen

在这里插入图片描述
在这里插入图片描述

2.7.3.8 lrem

在这里插入图片描述
在这里插入图片描述

2.7.3.9 ltrim

在这里插入图片描述
在这里插入图片描述

2.7.3.10 lset

在这里插入图片描述
在这里插入图片描述

2.7.3.11 linsert

在这里插入图片描述
在这里插入图片描述

2.7.4 集合类型(set)的数据操作命令

在这里插入图片描述

2.7.4.1 sadd

在这里插入图片描述
在这里插入图片描述

2.7.4.2 smembers

在这里插入图片描述
在这里插入图片描述

2.7.4.3 sismember

在这里插入图片描述
在这里插入图片描述

2.7.4.4 scard

在这里插入图片描述
在这里插入图片描述

2.7.4.5 srem

在这里插入图片描述
在这里插入图片描述

2.7.4.6 srandmember

在这里插入图片描述
在这里插入图片描述

2.7.4.7 spop

在这里插入图片描述
在这里插入图片描述

2.7.4.8 smove

在这里插入图片描述
在这里插入图片描述

2.7.4.9 sdiff

在这里插入图片描述
在这里插入图片描述

2.7.4.10 sinter

在这里插入图片描述
在这里插入图片描述

2.7.4.11 sunion

在这里插入图片描述
在这里插入图片描述

2.7.5 哈希类型(hash)数据的操作命令

在这里插入图片描述
在这里插入图片描述

2.7.5.1 hset

在这里插入图片描述
在这里插入图片描述

2.7.5.2 hget

在这里插入图片描述
在这里插入图片描述

2.7.5.3 hmset

在这里插入图片描述
在这里插入图片描述

2.7.5.4 hmget

在这里插入图片描述
在这里插入图片描述

2.7.5.5 hgetall

在这里插入图片描述
在这里插入图片描述

2.7.5.6 hdel

在这里插入图片描述
在这里插入图片描述

2.7.5.7 hlen

在这里插入图片描述
在这里插入图片描述

2.7.5.8 hexists

在这里插入图片描述
在这里插入图片描述

2.7.5.9 hkeys

在这里插入图片描述
在这里插入图片描述

2.7.5.10 hvals

在这里插入图片描述
在这里插入图片描述

2.7.5.11 hincrby

在这里插入图片描述
在这里插入图片描述

2.7.5.11 hincrbyfloat

在这里插入图片描述
在这里插入图片描述

2.7.5.12 hsetnx

在这里插入图片描述
在这里插入图片描述

2.7.6 有序集合类型(Zset)数据的操作命令

在这里插入图片描述

2.7.6.1 zadd

在这里插入图片描述
在这里插入图片描述

2.7.6.2 zrange

在这里插入图片描述
在这里插入图片描述

2.7.6.3 zrangebyscore

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.7.6.4 zrem

在这里插入图片描述
在这里插入图片描述

2.7.6.5 zcard

在这里插入图片描述
在这里插入图片描述

2.7.6.6 zcount

在这里插入图片描述
在这里插入图片描述

2.7.6.7 zrank

在这里插入图片描述
在这里插入图片描述

2.7.6.8 zscore

在这里插入图片描述
在这里插入图片描述

2.7.6.9 zrevrank

在这里插入图片描述
在这里插入图片描述

2.7.6.10 zrevrange

在这里插入图片描述
在这里插入图片描述

2.7.6.11 zrevrangebyscore

在这里插入图片描述
在这里插入图片描述

2.8 Redis的配置文件

2.8.1 redis.conf存放位置

在这里插入图片描述

2.8.2 Redis的网络相关配置

在这里插入图片描述
1.修改ip和端口
在这里插入图片描述
2.第三种服务启动方式,指定配置文件
在这里插入图片描述
3.客户端连接,指定ip和端口
在这里插入图片描述
4.关闭服务,也要指定ip和端口
在这里插入图片描述

2.8.3 Redis的常规配置

在这里插入图片描述
在这里插入图片描述

2.8.4 Redis的安全配置

在这里插入图片描述

2.8.5 Redis的RDB配置

在这里插入图片描述
2.8.6 Redis AOF配置
在这里插入图片描述

2.9 Redis的持久化

在这里插入图片描述

2.9.1 RDB策略

在这里插入图片描述
在这里插入图片描述

2.9.2 AOF策略

在这里插入图片描述

2.9.3 持久化小结

在这里插入图片描述

2.10 Redis的事务

在这里插入图片描述

2.10.1 Redis事务的常用命令

2.10.1.1 multi

在这里插入图片描述
在这里插入图片描述

2.10.1.2 exec

在这里插入图片描述
在这里插入图片描述
第三条执行失败了,但是其他的执行成功了,这显然不符合事务的标准,所以Redis的事务只能保证部分原子性

2.10.1.3 discard

在这里插入图片描述
在这里插入图片描述

2.10.1.4 watch

在这里插入图片描述
在这里插入图片描述

2.10.1.5 unwatch

在这里插入图片描述
在这里插入图片描述

2.10.1.6 Redis事务小结

在这里插入图片描述

2.11 Redis消息的发布与订阅(了解)

2.11.1 Redis发布订阅

在这里插入图片描述

2.11.2 Redis发布订阅示意图

在这里插入图片描述
在这里插入图片描述

2.11.3 Redis发布订阅的常用命令

2.11.3.1 subscribe

在这里插入图片描述
在这里插入图片描述

2.11.3.2 publish

在这里插入图片描述
在这里插入图片描述

2.11.3.3 psubscribe

在这里插入图片描述
在这里插入图片描述

2.12 Redis的主从复制

在这里插入图片描述

2.12.1一主二从的Redis集群

2.12.1.1 一主二从原理

在这里插入图片描述

2.12.1.2 一主二从搭建

1、一台服务器模拟三台主机:

第一步:将redis.conf 拷贝三份,名字分别是,redis6379.conf,redis6380.conf,redis6381.conf

修改三份配置文件:以redis6379.conf为例
修改 port端口,pid文件名,日志文件名,rdb文件名
如:
port 6379
pidfile /var/run/redis_6379.pid
logfile “6379.log”
dbfilename dump6379.rdb

第二步:分别打开三个窗口模拟三台服务器,通过各自的redis配置文件开启

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过redis客户端分别连接三台redis服务
redis-cli –h 127.0.0.1 –p 6379
redis-cli –h 127.0.0.1 –p 6380
redis-cli –h 127.0.0.1 –p 6381

第三步:查询三台redis服务在集群中的主从信息:info replication

默认情况下,所有的redis服务都是主机,即都能写和读,但是都还没有从机。
在这里插入图片描述

第四步:先在6379进行写操作

在这里插入图片描述
6380服务器没有k1
在这里插入图片描述
说明三台redis服务器互相独立,互不影响

第五步:设置主从关系:设从不设主

在6380和6381主机上分别执行命令:slaveof 127.0.0.1 6379
让6380和6381从属于6379主机
在这里插入图片描述
在这里插入图片描述
这时看6379,已经有两个从机了
在这里插入图片描述
另一种方式,就是修改6380和6381的配置文件,在最后加上:
在这里插入图片描述
注意:如果主redis设置了密码,从库的redis.conf中还需要设置masterauth为主redis的密码。

第六步::全量复制:

在6380和6381分别执行命令get k1
在这里插入图片描述
在这里插入图片描述

第七步:增量复制:

6379执行命令:set k2 v2。
在这里插入图片描述
然后6380端口和6381端口,分别执行命令:get k2
在这里插入图片描述
在这里插入图片描述

第八步:主写从读、读写分离:

在6380和6381上执行写操作set k3 v3
在这里插入图片描述
在这里插入图片描述

第九步:主机宕机,从机原地待命

6379执行指令shutdown,
在这里插入图片描述
并查看6380和6381的redis信息
在这里插入图片描述

第十步:主机宕机后恢复,一切恢复正常

重启6379
在这里插入图片描述
在这里插入图片描述

第十一步:从机宕机:主机少一个从机,其他从机不变

6380执行指令shutdown,
在这里插入图片描述
并查看6379和6381的redis信息
在这里插入图片描述
在这里插入图片描述

第十二步:从机宕机后恢复,需要重新设置主从关系

重启6380
在这里插入图片描述
并查看6380、6379和6381的redis信息
在这里插入图片描述
在这里插入图片描述
注意:从机跟master断开联系,必须重新连接,除非写进配置文件。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第十三步:从机上位:

第一步:主机宕机,6379执行命令:shutdown
在这里插入图片描述
第二步:6380断开主从关系,执行命令:slaveof no one
在这里插入图片描述
第三步:重新搭建主从,6381执行命令:info replication,slaveof 127.0.0.1 6380
在这里插入图片描述
第四步:之前主机恢复,重启6379的Redis服务,并执行命令:info replication
在6379主机宕机后,6380从机断开主从关系,6381开始还在原地待命;后来6380从机上位,6381投靠6380,6379主机即使回来但它已是孤寡老人,空头司令。
在这里插入图片描述

第十四步:天堂变地狱

6379执行命令slaveof 127.0.0.1 6381,并在63796381执行info replication
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一台主机配多台从机,一台从机再配多台从机,从而实现了庞大的集群架构。同时也减轻了一台主机的压力,缺点是增加了服务器间的延迟。

2.12.2 复制原理

2.12.2.1 全量复制

在这里插入图片描述

2.12.2.2 增量复制

Master将新的所有收集到的修改命令依次传给slave,完成同步

2.13 哨兵模式

2.13.1哨兵模式原理

在这里插入图片描述

2.13.2 哨兵模式搭建

1—5步跟一主二从搭建一样:一台服务器模拟三台主机、查询主从信息、写操作6379、设置主从关系、全量复制、增量复制、主写从读、读写分离。
6、在redis安装目录下创建redis_sentinel.conf文件,并编辑里边的内容:sentinel monitor dc-redis 127.0.0.1 6379 1,表示:指定监控主机的ip地址,port端口,得到哨兵的投票数(当哨兵投票数大于或者等于此数时切换主从关系)。

在这里插入图片描述
在这里插入图片描述

7、新开窗口,启动哨兵:redis-sentinel redis_sentinel.conf

在这里插入图片描述

8、主机宕机

在这里插入图片描述

9、等待从机投票,在sentinel窗口中查看打印信息

在这里插入图片描述

10、查看6379和6381的redis信息:

在这里插入图片描述
在这里插入图片描述

11、原主机恢复,启动6379:

在这里插入图片描述
在这里插入图片描述

2.14 主从复制小结

在这里插入图片描述
在这里插入图片描述

2.15 Jedis操作Redis

2.15.1 Jedis简介

使用Redis官方推荐的Jedis,在java应用中操作Redis。Jedis几乎涵盖了Redis的所有命令。操作Redis的命令在Jedis中以方法的形式出现。
方法名和命令行中的命令一样

2.15.2 Jedis的使用

2.15.2.1 在Linux中开启Redis服务

1.修改redis6379.conf中的bind为Linux的ip地址,因为我们要从外部连接,就不能用127.0.0.1了
在这里插入图片描述
2.开启redis服务
在这里插入图片描述
3.关闭Linux防火墙
在这里插入图片描述

2.15.2.2 在idea中创建maven项目,操作Jedis

添加Jedis的依赖
在这里插入图片描述
这里只是举例,所有redis中的指令,用Jedis都能实现
1.对key的操作举例
在这里插入图片描述
2.对String数据操作举例
在这里插入图片描述
在数据库中添加了
在这里插入图片描述
3.事务操作
在这里插入图片描述
数据库中有了数据
在这里插入图片描述

2.16 Redis的可视化客户端

2.16.1 安装

在这里插入图片描述

2.16.2 操作

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值