Redis从青铜到王者,从环境搭建到熟练使用,看这一篇就够了,超全整理详细解析,赶紧收藏吧

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

在这里插入图片描述

本期与大家分享的是小北用心整理的Redis数据库从入门到精通详细介绍希望对大家能有帮助大家喜欢就给点鼓励吧欢迎各位大佬评论区指教讨论

💜🧡💛制作不易各位大佬们给点鼓励
🧡💛💚点赞👍 ➕ 收藏⭐ ➕ 关注✅
💛💚💙欢迎各位大佬指教一键三连走起


目录

        一、常见的非关系型数据库NOSQL分类
        二、了解Redis
        三、Redis的单节点安装教程
        四、Redis的常用命令
                1、Help帮助命令
                2、SET命令
                3、过期命令
                4、查找键命令
                5、操作键命令
                6、GET命令
                7、步长命令
                8、登录不同的库命令
                9、清除当前库数据命令
                10、清除所有库中的数据命令
        五、BITMAP位图
                1、位图常用命令
                2、位操作命令
                3、统计指定位区间上值为1的个数
        六、Redis的数据模型
                1、Redis的 key 键
                2、Redis的 Value 值
                                1、String字符串
                                2、 List列表
                                3、 Hash散列
                                4、Set集合
                                5、SortedSet有序集合
        七、Redis持久化
                1、Redis持久化-RDB
                                1RDB使用策略
                                2SAVE命令
                                3BGSAVE命令
                                4SAVE 和 BGSAVE 命令的区别
                                5RDB持久化的优缺点
                2、Redis持久化-AOF
                                1AOF写入机制
                                2 写入磁盘的策略
                                3AOF重写机制
                                4AOF重写触发
                                5AOF持久化的优缺点
        八、idea使用Jedis连接Redis


一、常见的非关系型数据库NOSQL分类

                          点我返回目录

NOSQL类型主要数据库产品类型特色
K-V键值对存储类型Redis、Memcached使用key可以快速的查询到valueMemcached可以支持String类型的值valueRedis支持的值的数据类型很多如String\set\hash\sortset\list等等
文档存储类型MongoDB、CouchDB使用JSON或类JSON的BSON数据结构存储的内容为文档型能够实现部分关系型数据库的功能
列存储类型HBase、Cassandra按照列进行数据存储该类型便于存储结构化和半结构化的数据可以方便做数据压缩和针对某一列或者某几列的数据查询
图存储类型Neo4J、FlockDB以图形关系存储数据能够很好的弥补关系型数据库在图形存储时的不足
对象存储类型Db4o、Versant该存储类型的数据库通过类似面向对象的方式操作数据库通过对象的方式存取数据
XML存储类型Berkeley DB XML、BaseX该类型数据库可以高效的存储XML数据并且支持XML的内部查询语法例如XQuery、XPath

二、了解Redis

                          点我返回目录

        RedisRemote Dictionary Server )即远程字典服务是一个开源的BSD协议使用ANSI C语言编写基于内存的且支持持久化高性能的Key-Value的NOSQL数据库;Redis支持的数据结构类型很丰富如 字符串strings 散列hashes 列表lists 集合sets 有序集合sorted sets 以及范围查询 bitmaps位图 hyperloglogs 超级日志和 地理空间geospatial 索引半径查询等等。并且Redis有着丰富的支持主流语言的客户端C/C++、Python、Erlang、R、C#、Java、PHP、Objective-C、Perl、Ruby、Scala、Go、JavaScript等Redis 内置复制、Lua 脚本、LRU 驱逐、事务和不同级别的磁盘持久化并通过 Redis Sentinel 和 Redis Cluster 自动分区提供高可用性我们可以将Redis应用在缓存StackOverFlow、数据库、消息中间件等上。

Redis官网链接 https://redis.io/

三、Redis的单节点安装教程

                          点我返回目录

安装准备Linux虚拟机CentOS7、操作工具Xshell 、Xftp
Redis安装包下载地址https://download.redis.io/releases/

1、在安装Redis之前我们需要先配置阿里云的yum源

下载配置文件

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

生成缓存

yum makecache

2、安装Redis

1、因为Redis是使用ANSI C语言编写的所以我们要先安装gcc依赖

yum install -y gcc-c++ gcc tcl

2、使用Xftp上传Redis压缩的安装包到Linux虚拟机并解压

上传的压缩包的路径可以自己指定或创建上传的目录
小北是上传到了/usr/local/module/目录然后解压到了/usr/local/soft/目录下

tar -xvf redis-3.0.0.tar.gz 

在这里插入图片描述

3、进入解压好的目录redis-3.0.0编译make

cd redis-3.0.0
make

在这里插入图片描述

1、Redis的 key 键

                          点我返回目录

Redis的 key 值是二进制安全的这意味着可以用任何二进制序列作为key值从形如”foo”的简单字符串到一个JPEG文件的内容都可以。空字符串也是有效key值。

Key取值原则

  • 键值不需要太长太长会消耗内存且在数据中查找这类键值的计算成本较高
  • 键值不宜过短过短则可读性较差

2、Redis的 Value 值

                          点我返回目录

1、String字符串

                          点我返回目录

        字符串是一种最基本的Redis值类型。Redis字符串是二进制安全的这意味着一个Redis字符串能包含任意类型的数据并且一个字符串类型的值最多能存储512M字节的内容。

2、 List列表

                          点我返回目录

        List列表是基于Linked List实现的列表中的元素是字符串类型而列表的头尾增删速度快中间增删速度慢正常使用过程中增删元素是常态列表中元素可以重复出现并且列表中最多能包含2^32-1个元素列表的索引从左至右从0开始从右至左从-1开始

1注意 
	 命令说明
			B --》block 块阻塞
			L --》left 左
			R --》right 右
			X --》exist 存在
			
2左右或者头尾压入元素
		左头压入元素
			格式 LPUSH key value [value ...]
			举例 LPUSHX key value
			
		左头压入元素
			格式RPUSH key value [value ...]
			举例RPUSHX key value

在这里插入图片描述

3左右或者头尾弹出元素取出元素后原先的位置就没有了
		LPOP key
		RPOP key
		
4从一个列表尾部弹出元素压入到另一个列表的头部
		RPOPLPUSH source destination

5返回列表中指定范围元素返回元素后原先的位置还有
		LRANGE key start stop
		LRANGE key 0 -1 表示返回所有元素
		
6获取指定位置的元素
		LINDEX key index
		
7设置指定位置元素的值
		LSET key index value
		
8获取列表长度元素个数
		LLEN key
		
9从列表头部开始删除值等于value的元素count次
		LREM key count value
count > 0 : 从表头开始向表尾搜索移除与 value 相等的元素数量为 count
count < 0 : 从表尾开始向表头搜索移除与 value 相等的元素数量为 count 的绝对值
count = 0 : 移除表中所有与 value 相等的值

10去除指定范围外元素
		LTRIM key start stop
		
11在列表中某个存在的值pivot前或后插入元素
		LINSERT key BEFORE|AFTER pivot value
		若key和pivot不存在则不进行任何操作
		
12阻塞
	如果弹出的列表不存在或者为空就会造成阻塞
	若超时时间设置为0就是永久阻塞直到有数据可以弹出
	如果多个客户端阻塞在同一个列表上那么使用First In First Service原则先到先服务
	
13左右或者头尾阻塞弹出元素
		BLPOP key [key ...] timeout
		BRPOP key [key ...] timeout
		
14从一个列表尾部阻塞弹出元素压入到另一个列表的头部
		BRPOPLPUSH source destination timeout

3、 Hash散列

                          点我返回目录

        Hash散列是由field和关联的value组成的map键值对而field和value都是字符串类型一个hash中最多包含2^32-1键值对。

1设置单个字段
		HSET key field value
		HSETNX key field value
		当在key的filed不存在的情况下执行那么key不存在会直接创建
		
2设置多个字段
		HMSET key field value [field value ...]
		
3返回字段个数
		HLEN key
		
4判断字段是否存在
		HEXISTS key field
		key或者field不存在返回0
		
5返回字段值
		HGET key field
		
6返回多个字段值
		HMGET key field [field ...]
		
7返回所有的键值对
		HGETALL key
		
8返回所有字段名
		HKEYS key
		
9返回所有值
		HVALS key
		
10在字段对应的值上进行整数的增量计算
		HINCRBY key field increment
		
11在字段对应的值上进行浮点数的增量计算
		HINCRBYFLOAT key field increment
		
12删除指定的字段
		HDEL key field [field ...]
		

1.使用Hash的优点

  • 节约内存空间
  • 每创建一个键它都会为这个键储存一些附加的管理信息例如这个键最后一次被访问的时间等等所以数据库里面的键越多Redis数据库服务器在储存附加管理信息方面耗费的内存就会越多那么用在管理数据库键上的CPU也会越多在字段对应的值上进行浮点数的增量计算。

2.不适合使用Hash的情况

  • 使用二进制位操作命令因为Redis目前支持对字符串键进行SETBIT、GETBIT、BITOP等操作若要使用这些操作那么只能使用字符串键虽然散列也能保存二进制数据
  • 使用过期键功能Redis的键过期功能目前只能对键进行过期操作而不能对散列的字段进行过期操作因此如果你要对键值对数据使用过期功能的话那么只能把键值对储存在字符串里面

4、Set集合

                          点我返回目录

        Set集合内存储的元素是无序的、去重的元素是字符串类型最多包含2^32-1个元素

1增加一个或多个元素
		SADD key member [member ...]
		如果元素已经存在则自动忽略
		
2移除一个或者多个元素
		SREM key member [member ...]
		元素不存在自动忽略
		
3返回集合包含的所有元素
		SMEMBERS key
	如果集合元素过多例如百万个需要遍历可能会造成服务器阻塞生产环境应避免使用
	
4检查给定元素是否存在于集合中
		SISMEMBER key member
		
5集合的无序性
		SADD friends "java" "hadoop" "tomcat" "hive" "mapreduce" "spark"
		SADD anotherfriends "java" "hadoop" "tomcat" "hive" "mapreduce" "spark"
		SMEMBERS friends
		SMEMBERS anotherfriends
	注意:
	SMEMBERS 有可能返回不同的结果
	如果需要存储有序且不重复的数据使用有序集合存储有序可重复的使用列表
	
(6)随机返回集合中指定个数的
		SRANDMEMBER key [count]
	如果 count 为正数且小于集合基数
		那么命令返回一个包含 count 个元素的数组数组中的元素各不相同。
	如果 count 大于等于集合基数那么返回整个集合
	如果 count 为负数
		那么命令返回一个数组数组中的元素可能会重复出现多次而数组的长度为 count 的绝对值
	如果 count 为 0返回空
	如果 count 不指定随机返回一个元素
	
(7)返回集合中元素的个数
		SCARD key
	键的结果会保存信息集合长度就记录在里面所以不需要遍历
	
(8)随机从集合中移除并返回这个被移除的元素
		SPOP key
		
(9)把元素从源集合移动到目标集合
		SMOVE source destination member
		
(10)求差集
		SDIFF key [key ...]从第一个key的集合中去除其他集合和自己的交集部分
		SDIFFSTORE destination key [key ...]将差集结果存储在目标key中
		
(11)求交集
		SINTER key [key ...]取所有集合交集部分
		SINTERSTORE destination key [key ...]将交集结果存储在目标key中
		
(12)求并集
		SUNION key [key ...]取所有集合并集
		SUNIONSTORE destination key [key ...]将并集结果存储在目标key中

5、SortedSet有序集合

                          点我返回目录

        SortedSet有序集合与Set集合类似它是有序的、去重的元素是字符串类型每一个元素都关联着一个浮点数分值Score并按照分值从小到大的顺序排列集合中的元素。其分值可以相同最多包含2^32-1个元素。

1增加一个或多个元素
		ZADD key score member [score member ...]
		如果元素已经存在则使用新的score
		
2移除一个或者多个元素
		ZREM key member [member ...]
		元素不存在自动忽略
		
3显示分值
		ZSCORE key member
		
4增加或者减少分值
		ZINCRBY key increment member
			increment为负数就是减少
			
5返回元素的排名索引
		ZRANK key member
		
6返回元素的逆序排名
		ZREVRANK key member
		
7返回指定索引区间元素
		ZRANGE key start stop [WITHSCORES]
		如果score相同则按照字典序lexicographical order 排列
		默认按照score从小到大如果需要score从大到小排列使用ZREVRANGE
		
8返回指定索引区间元素
		ZREVRANGE key start stop [WITHSCORES]
		如果score相同则按照字典序lexicographical order 的 逆序 排列
		默认按照score从大到小如果需要score从小到大排列使用ZRANGE
		
9返回指定分值区间元素升序排序
		ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
		返回score默认属于[min,max]之间元素按照score升序排列若score相同则按照字典排序
		LIMIT中offset代表跳过多少个元素count是返回几个。类似于Mysql
		使用小括号则修改区间为开区间例如(5、(10、5)
		-inf 和 +inf 分别表示负无穷和正无穷
		
10返回指定分值区间元素降序排序
		ZREVRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
		返回score默认属于[min,max]之间元素按照score降序排列score相同字典降序
		LIMIT中offset代表跳过多少个元素count是返回几个。类似于Mysql
		使用小括号修改区间为开区间例如(5、(10、5)
		-inf和+inf表示负无穷和正无穷
		
11移除指定排名范围的元素
		ZREMRANGEBYRANK key start stop
		
12移除指定分值范围的元素
		ZREMRANGEBYSCORE key min max
		
13返回集合中元素个数
		ZCARD key
		
14返回指定范围中元素的个数
		ZCOUNT key min max
		ZCOUNT fruits 4 7
		ZCOUNT fruits (4 7

15求并集
	ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
numkeys必须指定key的数量
WEIGHTS选项与前面设定的key对应对应key中每一个score都要乘以这个权重
AGGREGATE选项指定并集结果的聚合方式
SUM将所有集合中某一个元素的score值之和作为结果集中该成员的score值
MIN将所有集合中某一个元素的score值中最小值作为结果集中该成员的score值
MAX将所有集合中某一个元素的score值中最大值作为结果集中该成员的score值

16求交集
	ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
numkeys指定key的数量必须
WEIGHTS选项与前面设定的key对应对应key中每一个score都要乘以这个权重
AGGREGATE选项指定并集结果的聚合方式
SUM将所有集合中某一个元素的score值之和作为结果集中该成员的score值
MIN将所有集合中某一个元素的score值中最小值作为结果集中该成员的score值
MAX将所有集合中某一个元素的score值中最大值作为结果集中该成员的score值

七、Redis持久化

                          点我返回目录

        Redis持久化是指将数据从掉电易失的内存存放到能够永久存储的设备上
        Redis持久化两种方式RDBRedis DB 和 AOFAppendOnlyFile

1、Redis持久化-RDB

                          点我返回目录

        在默认情况下Redis 将数据库快照保存在名字为 dump.rdb的二进制文件中

1RDB使用策略

                          点我返回目录

  • 自动按照配置文件中的条件满足就执行BGSAVE
    save 60 10000Redis要满足在60秒内至少有10000个键被改动会自动保存一次
  • 手动客户端发起SAVE、BGSAVE命令

注意RDB策略会容易造成数据丢失

2SAVE命令

                          点我返回目录

        在redis 客户端使用 save命令用于将数据持久化的保存到disk(磁盘)中但执行该命令时会阻塞Redis服务无法响应客户端请求也就是在服务器执行save命令期间Redis服务器不允许执行其它的命令直到save命令执行完执行save命令会创建新的dump.rdb替代旧文件

3BGSAVE命令

                          点我返回目录

该命令是在后台执行的是一个异步命令
        在redis客户端 使用 bgsave命令时不会阻塞Redis服务也就是非阻塞Redis服务正常接收处理客户端请求并且Redis会folk()一个新的子进程来创建RDB文件子进程处理完后会向父进程发送一个信号通知它处理完毕父进程用新的dump.rdb替代旧文件

4SAVE 和 BGSAVE 命令的区别

                          点我返回目录

  • SAVE不用创建新的进程速度略快
  • BGSAVE需要创建子进程消耗额外的内存
  • SAVE适合停机维护服务低谷时段
  • BGSAVE适合线上执行

5RDB持久化的优缺点

                          点我返回目录

优点

  • 完全备份不同时间的数据集备份可以做到多版本恢复
  • 紧凑的单一文件方便网络传输适合灾难恢复
  • 恢复大数据集速度较AOF快

缺点

  • 会丢失最近写入、修改的而未能持久化的数据
  • folk过程非常耗时会造成毫秒级不能响应客户端请求

2、Redis持久化-AOF

                          点我返回目录

        Append only fileAOF该方式采用追加的方式保存数据默认保存的文件appendonly.aof该方式会记录所有的写操作命令在服务启动的时候使用这些命令就可以还原数据库调整AOF持久化策略可以在服务出现故障时不丢失任何数据也可以丢失一秒的数据。相对于RDB方式损失要小得多

1AOF写入机制

                          点我返回目录

  • AOF方式不能保证绝对不丢失数据
  • 目前常见的操作系统中执行系统调用write函数将一些内容写入到某个文件里面时为了提高效率系统通常不会直接将内容写入硬盘里面而是先将内容放入一个内存缓冲区buffer里面等到缓冲区被填满或者用户执行fsync调用和fdatasync调用时才将储存在缓冲区里的内容真正的写入到硬盘里而在未写入磁盘之前数据可能会丢失。

2 写入磁盘的策略

                          点我返回目录

        在redis.conf文件中的appendfsync选项这个选项的值可以是always、everysec或者no

  • Always服务器每写入一个命令就调用一次fdatasync将缓冲区里面的命令写入到硬盘。这种模式下服务器出现故障也不会丢失任何已经成功执行的命令数据
  • Everysec默认服务器每一秒重调用一次fdatasync将缓冲区里面的命令写入到硬盘。这种模式下服务器出现故障最多只丢失一秒钟内的执行的命令数据
  • No服务器不主动调用fdatasync由操作系统决定何时将缓冲区里面的命令写入到硬盘。这种模式下服务器遭遇意外停机时丢失命令的数量是不确定的

运行速度always的速度慢everysec和no都很快

3AOF重写机制

                          点我返回目录

  • AOF文件过大
  • 合并重复的操作AOF会使用尽可能少的命令来记录

重写的过程

  • folk一个子进程负责重写AOF文件
  • 子进程会创建一个临时文件写入AOF信息
  • 父进程会开辟一个内存缓冲区接收新的写命令
  • 子进程重写完成后父进程会获得一个信号将父进程接收到的新的写操作由子进程写入到临时文件中
  • 新文件替代旧文件

注意如果写入操作的时候出现故障导致命令写半截可以使用redis-check-aof工具修复

4AOF重写触发

                          点我返回目录

  • 手动客户端向服务器发送BGREWRITEAOF命令
  • 自动配置文件中的选项自动执行BGREWRITEAOF命令
    • auto-aof-rewrite-min-size < size >触发AOF重写所需的最小体积只要在AOF文件的体积大于等于size时才会考虑是否需要进行AOF重写这个选项用于避免对体积过小的AOF文件进行重写
    • auto-aof-rewrite-percentage < percent >指定触发重写所需的AOF文件体积百分比当AOF文件的体积大于auto-aof-rewrite-min-size指定的体积并且超过上一次重写之后的AOF文件体积的percent %时就会触发AOF重写。如果服务器刚刚启动不久还没有进行过AOF重写那么使用服务器启动时载入的AOF文件的体积来作为基准值。将这个值设置为0表示关闭自动AOF重写

举例

	auto-aof-rewrite-percentage 100
	auto-aof-rewrite-min-size 64mb
	
	当AOF文件大于64MB时候可以考虑重写AOF文件
	只有当AOF文件的增量大于起始size的100%时
						也就是文件大小翻了一倍时启动重写

5AOF持久化的优缺点

                          点我返回目录

优点

  • 写入机制默认fysnc每秒执行性能很好不阻塞服务最多丢失一秒的数据
  • 重写机制优化AOF文件
  • 如果误操作了例如FLUSHALL等只要AOF未被重写停止服务移除AOF文件尾部FLUSHALL命令重启Redis可以将数据集恢复到 FLUSHALL 执行之前的状态

缺点

  • 相同数据集AOF文件体积较RDB大了很多
  • 恢复数据库速度叫RDB慢文本命令重演

八、idea使用Jedis连接Redis

                          点我返回目录

        首先需要在idea中的maven中的依赖配置文件pom.xml中导入jedis的依赖包这里北使用的3.0版本的redis,那么导入的jedis依赖也是对应版本的若是其它版本可以在maven仓库中选择对应版本链接地址https://mvnrepository.com/artifact/redis.clients/jedis

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.0.0</version>
        </dependency>

idea中建立连接

import redis.clients.jedis.Jedis;

/**
 * jdbc:是一种连接关系型数据的规范
 * redis 是kv结构的非关系型数据库(没有sql语句)使用jedis连接
 */

public class jedistest {
    public static void main(String[] args) {
        //创建redis连接
        Jedis jedis = new Jedis("master", 6379);
        //获取数据
        String name = jedis.get("name");
        System.out.println(name);
    }
}

在这里插入图片描述

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: redis

“Redis从青铜到王者,从环境搭建到熟练使用,看这一篇就够了,超全整理详细解析,赶紧收藏吧” 的相关文章