【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顺序读写函数介绍…...

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

真题讲解-软件设计(三十七)
数据流图DFD(真题讲解)-软件设计(三十六)https://blog.csdn.net/ke1ying/article/details/129803164 在网络安全管理中,加强内防内控可采取的策略是? 终端访问权限,防止合法终端越权访问。加强…...

Android 上的协程(第一部分):了解背景
本系列文章 Android 上的协程(第一部分):了解背景 Android 上的协程(第二部分):入门 Android上的协程 (第三部分): 实际应用 Android 上的协程(第一部分):了解背景 这篇…...

【H3C】VRRP2 及Vrrp3基本原理 华为同用
文章目录VRRP2基本概念报文格式主备选举规则(优先级)0和255双Master原因VRRP认证VRRP状态机抢占模式VRRP主备切换状态项目场景VRRP3H3C参考致谢VRRP2 基本概念 VRRP路由器(VRRP Router):运行VRRP的设备,它…...

【数据库】SQL语法
目录 1. 常用数据类型 2. 约束 3. 数据库操作 4. 数据表操作 查看表 创建表格 添加数据 删除数据 修改数据 单表查询数据 多表查询数据 模糊查询 关联查询 连接查询 数据查询的执行顺序 4. 内置函数 1. 常用数据类型 整型:int浮点型:flo…...

JavaEE简单示例——文件的上传和下载
文件的上传和下载的实现原理的简单介绍 表单的构成 首先,我们先来介绍我们的需要用到的表单,在这个表单中,首先值得我们注意的就是,在type为file的input标签中.这个控件是我们主要用来选择上传的文件的, 除此之外,我们要想实现文件的上传,还需要将method的属性的值设置为post…...

【C语言督学训练营 第五天】数组字符串相关知识
文章目录前言一、数组的定义1.一维数组①.如何定义②.声明规则③.内存分布④.初始化方法2.二维数组3.高维数组二、访问数组元素相关问题1.访问越界2.数组的传递三、Scanf与字符数组1.字符数组初始化2.scanf读取字符四、字符数组相关函数前言 今天的C语言训练营没有安排高维数组…...

GPT-4 免费体验方法
POE 在Quora上非常受欢迎的手机聊天机器人Poe App已经集成ChatGPT助手!除了最初集成的三个聊天机器人Sage、Claude和Dragonfly外,Poe现在还加入了第四位ChatGPT。由于使用了ChatGPT API,因此Poe拥有真正的ChatGPT。 现在更是第一批集成了GP…...

中断-屏蔽位
1.中断控制器(PIC:适用于单处理器、APIC) 1.定义 中断控制器可以看作是中断服务的代理,外设五花八门,如果没有一个中断的代理,外设想要给cpu发送中断信号来处理中断。那么只能是外设连接在cpu引脚上,由于cpu引脚很宝贵,所以不可能拿出那么多引脚来供外设连接,所以就有…...

【洛谷P1636】 Einstein学画画
题目描述:Einstein 学起了画画。此人比较懒~~,他希望用最少的笔画画出一张画……给定一个无向图,包含 n 个顶点(编号 1∼n),m 条边,求最少用多少笔可以画出图中所有的边。输入格式第一行两个整数…...

户外LED显示屏钢结构制作原则
户外LED显示屏在施工安装时是必须要制作固定钢结构的,因为户外LED显示屏工作环境相对比较恶劣,制作钢结构一是为了安全,二是为了提高防护等级。那么户外LED显示屏钢结构制作原则是什么呢?迈普光彩小编总结了一些分享个大家。 户外…...