基于《狂神说Java》Redis--学习笔记

前言:

本笔记仅做学习与复习使用,不存在刻意抄袭。

给各位学友强烈推荐《遇见狂神说》他的整套Java学习路线使我获益匪浅!!!

点击跳转至遇见狂神说哔哩哔哩首页

点击跳转至原笔记地址

如果你也是狂神的小迷弟,可以加我好友一起探讨学习。


目录

前言:

Redis详细笔记

一、NoSQL概述

1、为什么要使用NoSQL

3、NoSQL的四大分类

 二、Redis入门

1.Redis是什么

2.能干什么?

3.特性

4.安装(因为Redis更适合在linux下使用,所以只有linux的安装版本)

5.性能测试

6.基本知识说明(基本命令)

三、五大数据类型

String(字符串)

List(列表)

Set(集合)

Hash(哈希)

Zset(有序集合)

四、三种特殊数据类型

Geospatial

Hyperloglog

Bitmaps

五、事务

正常事务的执行

取消事务

异常执行

监控 Watch(面试常问)

六、Jedis

1、什么是Jedis

2、使用

七、SpringBoot整合

进阶

八、Redis.conf详解

单位

包含

网络

通用

快照

APPEND ONLY MODE (AOF配置)

九、Redis持久化(重点)

1、RDB(Redis DataBase)

2、AOF(Append Only File)

扩展

十、Redis发布订阅

命令

测试

测试

原理

使用场景:

做订阅的缺点

十一、主从复制

概念

环境配置

十二、哨兵模式

单哨兵模式

哨兵的作用:

多哨兵模式

测试(一主二从,单哨兵)

优缺点

哨兵模式的全部配置

十三、缓存穿透和雪崩(面试高频,工作常用)

1、缓存穿透(查不到)

2、缓存雪崩(集中失效)

3、缓存击穿(查询量太大,缓存过期瞬间)


Redis详细笔记

一、NoSQL概述

1、为什么要使用NoSQL

  • 现在是大数据时代(一般的数据库已经解决不了的数据:大数据(海量存储和并行计算))

    SQL => NoSQL

1、单机时代(如MySQL)的瓶颈

  • 数据量太大,一个机器存不下
  • 数据的索引<B+Tree>(MySQL单表300万条数据,一定要建立索引),一个机器内存放不下
  • 访问量大(MySQL读写混合 — 性能降低),一个服务器承受不了

2、Memcached缓存(减轻服务器的压力) + MySQL + 垂直拆分(读写分离,多个MySQL服务器,有的值负责读,有的值负责写)

发展过程:①优化数据结构和索引 => ②文件缓存(涉及IO操作)=> ③Memcached

Not Only SQL —> 非关系型数据库

NoSQL特点

  1. 方便扩展(数据之间没有关系)

  2. 大数据高性能(Redis一秒写8万次,读取11万次,NoSQL的缓存记录级,是一种细粒度的缓存,性能比较高)

  3. 数据类型是多样性的(不需要事先设计数据库(因为数据量大),随取随用)

  4. 传统RDBMS和NoSQL

    • 传统RDBMS

      • 结构化组织
      • SQL
      • 数据和关系都存在单独的表中
      • 操作,数据定义语言
      • 严格的一致性
      • 基础的事务
    • NoSQL

      • 不仅仅是SQL
      • 没有固定的查询语句
      • 键值对存储,列存储,文档存储,图形数据库(社交关系)
      • 最终一致性
      • CAP定理和BASE
      • 高性能,高可用,高可扩

了解:3V + 3高

大数据时代的3V:主要是描述问题的

  1. 海量Volume
  2. 多样Variety
  3. 实时Velocity

大数据时代的3高:主要是对程序的要求

  1. 高并发
  2. 高可拓(集群)
  3. 高性能
电商网站:
# 1、商品的基本信息
    名称、价格、商家信息:
        关系型数据库: MySQL / Oracle (王坚:阿里去IOE(IBM小型机,Oracle数据库、EMC存储器))
# 2、商品的描述、评论(文字多)
    文档型数据库:MongoDB
# 3、图片
    分布式文件系统:FastDFS、TFS(淘宝)、GFS(Google)、HDFS(Hadoop)、OSS云存储(阿里云)
# 4、商品的关键字(搜索)
    搜索引擎:solr、ElasticSearch、ISearch(阿里:多隆)
# 5、商品热门的波段信息
    内存数据库:Redis、Tair、Memcached、...
# 6、商品的交易、外部的接口
    三方应用

3、NoSQL的四大分类

1.KV键值对

  • 新浪:Redis
  • 美团:Redis + Tair
  • 阿里、百度:Redis + Memcached

2.文档型数据库(bson格式)

  • MongoDB(必须掌握)
    • 基于分布式文件存储的数据库(C++编写)
    • 主要用于处理大量的文档
    • 介于关系型数据库和非关系型数据库中的中间产品
  • ConthDB

3.列式存储

  • HBase
  • 分布式文件系统

4.图关系数据库

  • 存关系的,不是存图片的(比如,朋友圈社交网络,广告推荐)
  • Neo4j、InfoGrid

对比

 二、Redis入门

1.Redis是什么

官网:redis.io

中文网:CRUG网站

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作<mark>数据库</mark>、<mark>缓存</mark>和<mark>消息中间件</mark>。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication)LUA脚本(Lua scripting), LRU驱动事件(LRU eviction)事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

  1. Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  2. Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储(多样的数据结构)。
  3. Redis支持数据的备份,即master-slave模式的数据备份

Redis优势

  1. 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  2. 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  3. 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。(但是Redis事务多操作不支持原子性—当我们执行后有语句有错,其他语句仍然可以正常执行,<mark>详情看事务</mark>)
  4. 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
  5. Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问

2.能干什么?

  • 内存存储、持久化(rdb,aof)
  • 效率高、可以用于高速缓存
  • 发布订阅系统
  • 地图信息分析
  • 计时器、计数器(浏览量)

3.特性

  • 多样的数据结构
  • 持久化
  • 集群
  • 事务

4.安装(因为Redis更适合在linux下使用,所以只有linux的安装版本)

linux 使用的系统是 Centos 7.3

你可使用 虚拟机,也可已使用云服务器(学生机不贵),因为我有服务器,这里就在服务器上安装和学习Redis

①下载安装包

CRUG网站

②加压安装包(提前使用xshell和xftp上传压缩包到服务器上)

压缩包在 /app/目录下

在/usr/local/ 下创建redis文件夹,并进入到文件夹中

解压压缩包到该文件夹下

tar -zxvf /app/redis-6.0.6.tar.gz -C ./

 ③编译并安装(保证安装了编译环境)

没有安装编译环境,需要 yum install gcc-c++

如果下面操作报错:需要提升GCC的版本(redis6需要5.3+)

//升级gcc到9以上
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
//临时将此时的gcc版本改为9
scl enable devtoolset-9 bash
//或永久改变
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
cd redis-6.0.6
make && make install

 编译后,默认安装路径在 /usr/local/bin

④安装系统服务并后台启动

可能会报错:

解决方法:vim install_server.sh,注释如下图内容

安装系统服务(可以指定选项,下面默认)

cd utils
./install_server.sh

默认的配置文件:/etc/redis/6379.conf(安装成功后,默认后台自启)

⑤开启redis服务

可以使用自定义的配置文件开启,这里使用systemctl

/redis安装目录/redis-server    /配置文件目录/redis.conf
# 关闭服务
/redis安装目录/redis-cli shutdown
systemctl start redis_6379.service

⑥客户端连接测试

⑦设置远程连接

vim /etc/redis/6379.conf

然后重启服务即可:

systemctl restart redis_6379.service

 ⑧配置访问密码

vim /etc/redis/6379.conf

重启服务

systemctl restart redis_6379.service

客户端连接测试

关闭连接

5.性能测试

使用自带的redis-benchmark工具测试即可

redis-benchmark [option] [option value]

性能测试工具可选参数:

序号 选项 描述 默认值
1 -h 指定服务器主机名 127.0.0.1
2 -p 指定服务器端口 6379
3 -s 指定服务器 socket
4 -c 指定并发连接数 50
5 -n 指定请求数 10000
6 -d 以字节的形式指定 SET/GET 值的数据大小 3
7 -k 1=keep alive 0=reconnect 1
8 -r SET/GET/INCR 使用随机 key, SADD 使用随机值
9 -P 通过管道传输 \<numreq> 请求 1
10 -q 强制退出 redis。仅显示 query/sec 值
11 —csv 以 CSV 格式输出
12 -l 生成循环,永久执行测试
13 -t 仅运行以逗号分隔的测试命令列表。
14 -I Idle 模式。仅打开 N 个 idle 连接并等待。

测试

# 测试:100个并发连接  100000请求
redis-benchmark -c 100 -n 100000

6.基本知识说明(基本命令)

如果觉得这里命令不太好看,去这个博客https://www.cnblogs.com/wlandwl/p/redis.html,或者 官网:Redis命令中心(Redis commands) -- Redis中国用户组(CRUG)

注意:以下的所有key都表示对应数据类型的 键的名称 ; value表示存储的值(除非注释中有特殊说明)

1.Redis 有16个数据库(0~15),默认使用第0个

可以使用 select进行切换

2.查看数据库大小

使用 dbsize查看数据库大小

3.查看所有的key(当前库)

使用 keys *

4.清除当前数据库

flushdb

5.清空所有数据库

flushall

6.Redis是单线程的?

  • Redis是很快的,官方表示,Redis是基于内存操作,CPU不是Redis的性能瓶颈,Redis的性能瓶颈是根据机器的<mark>内存</mark>和<mark>网络的带宽</mark>,既然可以使用单线程,就不用使用多线程。(<mark>6.0后支持多线程</mark>)

7.判断key是否存在

exists key

8.移除key

move key 1 // 1表示当前数据库

del key // 删除当前数据库的key(可以多个)

9.设置key的过期时间

expire key 时间 // 单位时间为s

ttl key // 查看剩余存活时间

10.查看当前key的类型

type key

11.字符串追加(String)

append key appendValue

  • <mark>如果当前 key 不存在,作用相当于 set key</mark>

12.获取字符串长度(String)

strlen key

13.字符串i++操作(可用于阅读量实现)(String)

incr key

同理,i—

decr key

步长设置

incrby key 步长

decrby key 步长

14.字符串片段 Range (String)

getrange key startIndex endIndex

  • 对应java里的substring(<mark>但是这里会endIndex是一个闭区间</mark>)
  • 特例,endIndex = -1 时,表示从startIndex 到最后

15.字符串替换 (String)

setrange key index replaceString

  • 对应java里的replace
  • 注意,如果replaceString是一个字符串,那么会替换源字符串中index后replaceString长度的片段,结果如下

16.特殊set设置 (String)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值