【7-1】Redis急速入门与复习
文章目录
- 1、分布式架构概述
- 本阶段规划
- 什么是分布式架构
- 单体架构与分布式架构 对比
- 分布式架构优点
- 分布式架构缺点
- 设计原则
- 2、为何引入Redis
- 现有架构的弊端
- 3、什么是NoSql?
- NoSql
- NoSql优点
- NoSql常见分类
- 4、什么是分布式缓存,什么是Redis?
- 什么是分布式缓存
- 什么是Redis
- 5、分布式缓存方案与技术选型:Redis VS Memcache VS Ehcache
- 缓存方案对比 - Ehcache
- 缓存方案对比 - Memcache
- 缓存方案对比 - Redis
- Redis与Memcache区别
- 6、安装与配置Redis(Linux)
- 下载
- 上传至Linux
- 安装Redis
- 配置redis
- 8、Redis命令行客户端基本使用
- redis-cli内部命令:
- redis-cli外部命令:
- 9、Redis的命令行客户端
- 10、Redis数据类型 - string
- string 字符串
- key相关
- string类型
- 其他
- 12、Redis数据类型 - hash
- hash
- 使用
- 14、Redis的数据类型 - list
- list
- 使用
- 16、Redis的数据类型 - set
- set
- 使用
- 17、Redis的数据类型 - zset
- sorted set
- 使用
1、分布式架构概述
本阶段规划
- 分布式缓存中间件Redis
- 分布式会话与单点登录
- 分布式搜索引擎ElasticSearch
- 分布式文件系统
- 分布式消息队列
- 分布式锁
- 数据库读写分离与分库分表
- 数据库表全局唯一主键ID设计
- 分布式事务与数据一致性
- 接口幂等设计与分布式限流
什么是分布式架构
- 不同的业务(功能模块)分散部署在不同的服务器
- 每个子系统负责一个或者多个不同的业务模块
- 服务之间可以相互交互与通信
- 分布式系统设计对用户透明
- 可以发展为集群分布式系统架构
单体架构与分布式架构 对比
单体架构:模块之间的耦合度比较高
分布式架构:模块解耦
分布式架构优点
- 业务解耦
- 系统模块化,可重用化
- 提升系统并发量
- 优化运维部署效率
分布式架构缺点
- 架构复杂
- 部署多个子系统复杂
- 系统之间通信耗时
- 新人融入团队缓慢
- 调试复杂
设计原则
- 异步解耦(消息队列)
- 幂等一致性
接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。
主要针对增加、修改操作 - 拆分原则
- 融合分布式中间件
redis、mq等 - 容错高可用
2、为何引入Redis
现有架构的弊端
现有架构:Nginx -->Tomcat -->数据库 。
引入缓存(加一个屏障)提高数据库的性能,提高读的性能,提高吞吐量。
电商系统读写二八原则
3、什么是NoSql?
NoSql
- Not Nnly Sql
- 传统项目使用纯数据库
- 为互联网和大数据而生
- 水平(横向)扩展方便高效
普通数据库能达到500w数据左右,单表达到300w,就要考虑扩容。
NoSql优点
- 高性能读取(每秒10w)
- 高可用(集群)
- 存数据、做缓存
NoSql常见分类
- 键值对类型 Redis、Memcache
- 列存储数据库 Hbase、Cassandra
- 文档行数据库 MongoDB、CouchDB
- 图形数据库 Neo4J、FlockDB
Redis、Memcache、MongoDB是国内使用最多的三种NoSql
4、什么是分布式缓存,什么是Redis?
什么是分布式缓存
- 提升读取速度性能
- 分布式计算领域
- 为数据库降低查询压力
- 跨服务器缓存
- 内存式缓存
什么是Redis
- NoSql
- 分布式缓存中间件
- key-value存储
- 提供海量数据存储访问
- 数据存储在内存里,读取更快
- 非关系型、分布式、开源、水平扩展
5、分布式缓存方案与技术选型:Redis VS Memcache VS Ehcache
缓存方案对比 - Ehcache
EhCache 是一个纯Java的进程内缓存框架
- 优点:
- 基于java开发
- 基于JVM缓存
- 简单、轻巧、方便
- 缺点:
- 集群不支持
- 分布式不支持
适合单应用
缓存方案对比 - Memcache
- 优点:
- 简单的key-value存储
- 内存使用率比较高
- 多核处理、多线程
- 缺点:
- 无法容灾
- 无法持久化
缓存方案对比 - Redis
- 优点
- 丰富的数据结构
- 持久化
- 主从同步、故障转移
- 内存数据库
- 缺点:
- 单线程(大数据量慢)
- 单核(多核处理器无法充分利用CPU)
Redis与Memcache区别
- 持久化
- Memcache 不能持久化
- Redis 可以持久化
- 存储数据结构
- Memcache 数据结构比较单一,只能存string类型
- Redis 数据结构多样化,可以存多张数据结构
6、安装与配置Redis(Linux)
下载
官网:https://redis.io/download/
选择下载稳定(Stable)版本,不稳定版本可以尝鲜,不推荐生产环境使用
上传至Linux
使用FileZilla上传安装包至Linux服务器,
安装Redis
1、解压redis
tar -zxvf redis-5.0.14.tar.gz
2、安装gcc编译环境,如果已安装,会提示nothing to do
yum install gcc-c++
3、进入redis-5.0.14
目录,进行安装,执行完毕后安装成功
# 编译
make
# 安装
make install
配置redis
1、在utils下,拷贝 redis_init_script
文件到/etc/init.d/
目录,目的是要把redis作为开机自启动
cp redis_init_script /etc/init.d/
2、创建/usr/local/redis/
,用于存放配置文件。拷贝redis核心配置文件 redis.conf
文件到 /usr/local/redis/目录下。
# 创建
mkdir /usr/local/redis/
# 拷贝
cp redis.conf /usr/local/redis/
3、修改核心配置文件redis.conf
输入 /dae按回车键可快速搜索到daemonize
vim /usr/local/redis/redis.conf
- 修改 daemonize no ==> daemonize yes
目的是为了让redis启动在linux后台运行 - 修改redis工作目录: dir ./ ==> dir /usr/local/redis/working
建议修改为/usr/local/redis/working
,名称随意 - 修改绑定IP:bind 127.0.0.1 ==> bind 0.0.0.0
代表可以远程连接,不受IP限制 - 设置密码: requirepass imooc
默认是没有的,一定要设置 - 设置端口:port 6379
默认端口时6379,可不修改
4、修改启动脚本
- 设置REDISPORT
REDISPORT=6379
与 [redis.conf] 的port 6379
端口号需一致 - 设置PIDFILE
PIDFILE=/var/run/redis_${REDISPORT}.pid
与 [redis.conf] 的pidfile /var/run/redis_6379.pid
需一致 - 设置CONF
修改为核心配置文件实际路径CONF="/usr/local/redis/redis.conf"
5、为redis启动脚本添加执行权限,随后运行启动redis。
# 为redis启动脚本添加执行权限。777:可读可写可执行权限
chmod 777 redis_init_script
# 启动执行脚本
./redis_init_script start
6、检查redis进程
# 查找redis进程
ps -ef | grep redis
7、设置redis开机自启动
修改执行脚本redis_init_script,添加如下内容
#chkconfig: 22345 10 90
#description: Start and Stop redis
随后执行如下操作
chkconfig redis_init_script on
重启后服务器(虚拟机)后,再看进程
# 重启后服务器(虚拟机)后
reboot
# 查找redis进程
ps -ef | grep redis
8、Redis命令行客户端基本使用
redis-cli 是Redis命令行客户端。
# 启动redis命令工具
redis-cli
# 新创建Linux连接,查看redis进程
ps -ef|grep redis
redis-cli内部命令:
# 认证密码,用于检测给定的密码和配置文件中的密码是否相符
auth imooc
# 相当于新增一个键值对 name为key, xxx为value
set name xxx
# 根据key删除键值对
del name
# 根据key获取值
get name
#退出客户端
ctrl+c
redis-cli外部命令:
# 用于测试客户端与Redis连接是否正常的PING命令, 只要连接正常,会收到PONG回复。
redis-cli ping
# (一定要 -a 密码否则没有权限)
redis-cli -a imooc ping
# 停止redis
./redis_init_script stop
# 查看redis进程
执行./redis_init_script stop
报 NOAUTH Authentication required.
,需要修改redis_init_script脚本
$CLIEXEC -p $REDISPORT shutdown => $CLIEXEC -a "imooc" -p $REDISPORT shutdown
9、Redis的命令行客户端
redis-cli -a password shutdown:关闭redis./redis_init_script stop:关闭redisredis-cli:进入到redis客户端auth pwd:输入密码set key value:设置缓存get key:获得缓存del key:删除缓存redis-cli -a password ping:查看是否存活
10、Redis数据类型 - string
string 字符串
最简单的字符串类型键值对缓存,也是最基本的
key相关
- keys *:查看所有的key(不建议在生产上使用,有性能影响)
- keys *e
- keys a*
- type key:key类型
string类型
-
get/set/del:查询/设置/删除
-
set rekey data:设置已经存在的key,会覆盖
-
setnx rekey data:设置已经存在的key,不会覆盖
-
set key value ex time:设置带过期时间的数据
-
expire key:设置过期时间
-
ttl key:查看剩余时间,-1永不过期,-2国企
-
append key:合并字符串
-
strlen key:字符串长度
-
incr key:累加1
-
decr key:累减1
-
incrby key num:累加给定数值
-
decrby key num:累减给定数值
-
getrange key start end:截取数据,end=-1代表到最后
-
setrange key start newdata:从start位置开始替换数据
-
mset:连续设值
-
mget:连续取值
-
msetnx:连续设置,如果存在则不设置
其他
- select index:切换数据库,总共默认16个
- flushdb:删除当前下边db中的数据
- flushall:删除所有db中的数据
redis.conf核心配置:database 16
12、Redis数据类型 - hash
hash
类似map,存储结构化数据结构,比如存储一个对象(不能有嵌套对象)
使用
- hset key property value:
- hset user name imooc
创建一个user对象,这个对象中包含name属性,name值为imooc
- hset user name imooc
- hget key property:获得对象中属性值
- hmset:设置对象中的多个键值对
- hmset user age 18 sex man
- hmsetnx:设置对象中的多个键值对,存在则不添加
- hmsetnx user age 18 sex man
- hmget:获得对象中的多个属性
- hmget user age phone
- hgetall user:获得整个对象的内容
- hlen user:获取对象属性个数
- hexists user age:判断属性是否存在
- hkeys user:获得所有属性
- hvals user:获得所有值
- hdel user:删除对象
- hdel user key:删除对象的某个属性
- hincrby user gae 2:累加属性
- hincrbyfloat user age 2.2:累加属性
14、Redis的数据类型 - list
list
list是简单的字符串列表,按照插入顺序排序(允许元素重复)。
使用
-
lpush userList 1 2 3 4 5:构建一个list,从左边开始存入数据,相当于栈从左入栈,左侧是栈顶
-
rpush userList 1 2 3 4 5:构建一个list,从右边开始存入数据,相当于栈从右侧入栈,右侧是栈顶
-
lrange list start end:获得key中 [start,stop] 范围的数据
-
lpop:从左侧开始拿出一个数据
-
rpop:从右侧开始拿出一个数据
-
pig cow sheep chicken duck
-
llen list:list长度
-
lindex list index:获取list下标的值
-
lset list index value:把某个下标的值替换
-
linset list before/after value:插入新的值
-
lrem list num value:删除几个相同数据
-
ltrim list start end:截取值,替换原来的list
16、Redis的数据类型 - set
set
Set是string类型的无序集合(不允许元素重复)。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
使用
-
SADD key member1 [member2] :向集合添加一个或多个成员
-
SMEMBERS key:返回集合中的所有成员
-
SCARD key:获取集合的成员数
-
SISMEMBER key member:判断 member 元素是否是集合 key 的成员
-
SREM key member1 [member2]:移除集合中一个或多个成员
-
SPOP key:移除并返回集合中的一个随机元素
-
SRANDMEMBER key [count]:返回集合中一个或多个随机数
-
SMOVE source destination member:将 member 元素从 source 集合移动到 destination 集合
-
SDIFF key1 [key2]:返回给定所有集合的差集
-
SINTER key1 [key2]:返回给定所有集合的交集
-
SUNION key1 [key2]:返回所有给定集合的并集
17、Redis的数据类型 - zset
sorted set
sorted set:排序的set,可以去重可以排序,比如根据用户积分做排名,积分作为set的一个数值,根据数值可以做排序。set中的每一个member都带有一个分数。
使用
-
zadd zset 10 value1 20 value2 20 value3:设置member和对应的分数
-
zrange zset 0 -1:查看所有set中的内容
-
zrange zset 0 -1 withscores:都带有分数
-
zrank zset value:获得对应的下标
-
zscore zset value:获得对应的分数
-
zcard zset:统计个数
-
zcountzset 分数1 分数2:统计个数
-
zrangebyscore zset 分数1 分数2:查询分数之间的member(包含分数1 分数2)
-
zrangebyscore zset 分数1 分数2:查询分数之间的member(不包含分数1 分数2)
-
zrangebyscore zset 分数1 分数2 limit start end:查询分数之间的member(不包含分数1 分数2),获得的结果集再次根据下标区间做查询
-
zrem zset value:删除member
相关文章:

【7-1】Redis急速入门与复习
文章目录1、分布式架构概述本阶段规划什么是分布式架构单体架构与分布式架构 对比分布式架构优点分布式架构缺点设计原则2、为何引入Redis现有架构的弊端3、什么是NoSql?NoSqlNoSql优点NoSql常见分类4、什么是分布式缓存,什么是Redis?什么是分…...

5、操作系统——进程间通信(3)(system V-IPC:消息队列)
目录 1、管道的缺点 2、消息队列 3、消息队列的API (1)获取消息队列的ID(类似文件的描述符)(msgget) (2)发送、接收消息(msgrcv) (3)获取和设置消息队列的属性(msgctl) 4、消息队…...

C++vector容器用法详解
一、前言vector 是封装动态数组的顺序容器,连续存储数据,所以我们不仅可以通过迭代器访问存储在 vector 容器中的数据,还能用指向 vector 容器中的数据的常规指针访问数据。这意味着指向 vector 容器中的数据的指针能传递给任何期待指向数组元…...
Log4j2的Loggers详解
引言 官方配置文档:https://logging.apache.org/log4j/2.x/manual/filters.html Loggers节点 Loggers节点常见的有两种:Root和Logger <Loggers><Logger name"org.apache.logging.log4j.core.appender.db" level"debug" additivity&qu…...

计算机视觉的应用1-OCR分栏识别:两栏识别三栏识别都可以,本地部署完美拼接
大家好,我是微学AI,今天给大家带来OCR的分栏识别。 一、文本分栏的问题 在OCR识别过程中,遇到文字是两个分栏的情况确实是一个比较常见的问题。通常情况下,OCR引擎会将文本按照从左到右,从上到下的顺序一行一行地识别…...
低代码平台如何选型, 43款国内外低代码平台一网打尽
目前,零代码技术和低代码技术越来越成熟,低代码平台也越来越被大家所接受,国内低代码平台厂商和产品层出不穷,到底哪家低代码平台好,企业如何选型,以下给出一些参考。 一、低代码平台如何选型 企业如何选…...

第六周作业(1.5小时)
一、PreparedStatement PreparedStatement也可以用来执行sql语句,但是需要注意:它需要用sql创建好PreparedStatement,而Statement不需要用sql来创建。 优点: 1、具有较好的可维护性和可读性,参数的分别插入减少了错…...

排序 (蓝桥杯) JAVA
目录题目描述:冒泡排序算法(排序数字,字符):String与String buffer的区别:纯暴力破解(T到爆炸):暴力破解加思考(bingo):总结:题目描述: 小蓝最近学习了一些排序算法,其中冒泡排序让他…...

【Blender 水墨材质】实现过程剖析01
写在前面 想把Blender一位大佬演示的Blender水墨材质过程,在Unity用Shader重现,过程中会拿能拿到的节点代码举例(ShaderGraph或者UE的都会有)。第一步当然是要跟着人家做一遍!我会尽可能地分析一下每一步的原理~ 教程…...
代码随想录算法训练营第五十六天|583. 两个字符串的删除操作、72. 编辑距离
LeetCode 583 两个字符串的删除操作 题目链接:https://leetcode.cn/problems/delete-operation-for-two-strings/ 思路: 方法一:两个子串同时删除元素 dp数组的含义 dp[i][j]dp[i][j]dp[i][j]代表以i-1为结尾的字符串word1,和以j-1位结…...

【ArchLinux】【KDE】Archlinux的安装与使用
文章目录开头前言所需环境演示环境相关链接安装教程在Windows环境下制作启动盘进入ArchLinux Live环境安装为硬盘分区如何新建分区?分区表格式化分区分区完成,开始安装挂载分区切换镜像源安装基本系统设置将Live环境(当前)挂载信息…...

Go语言精修(尚硅谷笔记)第六章
六、函数、包和错误处理 6.1 函数概念 不用函数的弊端 1)写法可以完成功能, 但是代码冗余 2 ) 同时不利于代码维护 概念:为完成某一功能的程序指令(语句)的集合,称为函数。 在Go中,函数分为: 自定义函数、系统函数 基本语法 //函数的基本语法 fu…...
Photoshop的功能
Photoshop是一款功能强大的图片编辑软件,它提供了数百种不同的工具和特效,让您可以编辑图片、创建图形和设计网页等。 以下是Photoshop的一些主要功能: 1.图层:Photoshop允许您创建多个图层,让您可以在每一个图层上进…...

C++初阶——内存管理
目录 1. C/C内存分布 2. C语言中动态内存管理方式:malloc/calloc/realloc/free 3. C内存管理方式 3.1 new/delete操作内置类型 3.2 new和delete操作自定义类型 4. operator new与operator delete函数 重要 4.1 operator new与operator delete函数(…...

uds服务汇总
还有一些服务列举在下面: RequestDownload(服务ID为0x34)和RequestUpload(服务ID为0x35):这两个服务用于在ECU和诊断器之间进行数据传输。通过 RequestDownload服务,诊断器可以请求ECU接收一些数…...
【深度学习】2023李宏毅homework1作业一代码详解
研一刚入门深度学习的小白一枚,想记录自己学习代码的经过,理解每行代码的意思,这样整理方便日后复习也方便理清自己的思路。感觉每天时间都不够用了!!加油啦。 第一部分:导入模块 导入各个模块࿰…...

【软件测试】基础知识第二篇
文章目录一. 开发模型1. 瀑布模型2. 螺旋模型3. 增量和迭代模型3.1 增量模型3.2 迭代模型3.3 增量和迭代模型的区别4. 敏捷模型4.1 敏捷宣言4.2 scrum模型二. 开发模型V 模型W 模型一. 开发模型 1. 瀑布模型 瀑布模型在软件工程中占有重要地位,是所有其他模型的基…...
Java中File类以及初步认识流
1、File类操作文件或目录属性 (1)在Java程序中通过使用java.io包提供的一些接口和类,对计算机中的文件进行基本的操作,包括对文件和目录属性的操作、对文件读写的操作; (2)File对象既可以表示…...

【C语言】文件操作详细讲解
本章要分享的内容是C语言中文件操作的内容,为了方便大家学习,目录如下 目录 1.为什么要使用文件 2.什么是文件 2.1 程序文件 2.2 数据文件 2.3 文件名 3.文件的打开和关闭 3.1文件指针 3.2打开和关闭 4.文件的顺序读写 4.1顺序读写函数介绍…...

爱奇艺万能联播使用教程
众所周知,爱奇艺是百度旗下的一款产品,所以今天用爱奇艺万能联播的方法实现下载百度网盘,并没有破解百度网盘,是官方正版下载渠道。软件是官方版本,大家双击安装即可。 安装完成以后,在软件中就有了“访问网…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...

图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...