Redis Part1

2023-09-15 23:04:34

单体架构:一台Web服务器、一台数据库服务器。 

回顾,关系型数据库:基于二维表来存储数据的数据库就是关系型数据库。 

MySQL跟Redis的区别:

  1. MySQL是关系型数据库,它是基于表来存储数据的,MySQL数据是写在磁盘的,它是跟磁盘进行交互的;Redis是非关系型数据库,它是把数据存储在内存当中的,是跟内存进行交互的。
  2. MySQL基于标准、统一的SQL语言去操作,而Redis是基于指令去操作的。

1.了解NoSql

什么是Nosql?
  • NoSQL,即Not-Only-SQL,意思就是我们干事情不能只用SQL,泛指非关系型的数据库!
  • NoSQL定位:作为关系型数据库的补充!最终数据还是存储在硬盘/磁盘里面。
  • NoSQL仅仅是一个概念, 泛指非关系型的数据库,区别于关系数据库,它们不保证关系数据的ACID特性。
  • NoSQL不是什么情况下都用的,是有适用前提的:应对基于海量用户(高并发)和海量数据前提下的数据处理问题。
常见的NoSql产品

2.Redis介绍

2.1什么是Redis
全称: REmote DIctionary Server 远程字典服务器 )。 诞生于2009年!
  • 完全开源免费的,用C语言编写的, 遵守 BCD协议。
  • 是一个高性能的(key-value)分布式内存数据库基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为数据结构服务器。
  • 可用作高速缓存,提高系统的整体访问性能!(why高速===>内存)
  • Redis是一个基于内存去交互的数据库。
  • Redis的出现是为了解决性能问题。
  • Redis更多保证我们数据的性能,既然保证性能,意味着一定会损失数据的一致性、可靠性。
  • Redis属于CAP模型中的AP模型。如果发生网络分区了,是保证C呢还是保证A呢?

什么是CAP模型?

  • CAP模型是一种用于描述分布式系统特性的理论模型。
  • CAP模型由三个关键概念组成:一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)。
  1. 一致性(Consistency):指的是在分布式系统中,当一个节点对数据进行修改后,其它节点立即能够看到这个修改。官方:指的是在分布式系统中,所有节点对于同一份数据的访问和操作都能保持一致的特性。
  2. 可用性:指的是系统能够及时响应用户请求,并一直保持可用的状态。即使系统中的某个节点发生故障或者网络出现问题,系统仍然能够继续运行。
  3. 分区容错性:指的是系统在面对网络分区(节点之间的通信中断或丢失)的情况下继续运行。分布式系统通常由多个节点组成,分布在不同的物理位置上,而网络分区可能导致节点之间无法直接通信
  • 根据CAP模型,分布式系统无法同时满足一致性、可用性和分区容错性这三个特性,最多只能同时满足其中的两个。
Redis 与其他 key - value 缓存产品有以下三个特点:
  1. Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用
  2. Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储
  3. Redis支持数据的备份,即master-slave(主从)模式的数据备份
2.2 Redis优势
  1. 性能极高 – Redis能读的速度是110000/s,写的速度是81000/s 。官方提供的数据是可以达到100000+的QPS(每秒内查询次数)
  2. 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets Ordered Sets 数据类型操作。
  3. 原子 Redis的所有操作都是原子性的=>是线程安全的,同时Redis还支持对几个操作全并后的原子性执行。
  4. 丰富的特性 – Redis还支持 publish/subscribe订阅通知key 过期等等特性
  5. Redis的工作线程采用单线程避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;
  6. 使用多路I/O复用模型,非阻塞IO;
  7. 适合存储热点数据(热点商品、咨询、新闻)

key-value结构存储:  

Redis为什么快? 

  1. 基于内存去操作,没有实时的磁盘IO,数据异步刷新到磁盘。
  2. 本身就是Key-Value结构,类似于HashMap,一个Key会对应一个Value,通过一个Key的Hash值  取余 数组的长度-1  得到一个数组的下标,知道这个数据放在哪里,去拿的时候,直接能找到下标,所以查询速度戒心O(1)。
2.3 Redis下载

(1)Http://redis.io/ 英文地址

(2)Http://www.redis.cn/ 中文地址

3.2 Redis的安装

3.2.1 Redis的编译环境
  • Redis是C语言开发的,安装redis需要先去官网下载源码进行编译,编译需要依赖于GCC编译环境,如果CentOS上没有安装gcc编译环境,需要提前安装,安装命令如下:yum install gcc-c++

 

上传Redis安装文件到Linux服务器,并且移动到/usr/local/MySoftWare目录中,接着解压:

编译Redis(编译,将.c文件编译为.o文件)

  • 进入解压文件夹,执行 make

  • 编译成功!如果编译过程中出错,先删除安装文件目录,后解压重新编译

安装:make PREFIX=/home/admin/myapps/redis install

安装之后的bin目录:

bin文件夹下的命令:  

Copy文件:将redis解压的文件夹中的redis.conf文件复制到安装目录  

  • Redis启动需要一个配置文件可以修改端口号信息。 

3.3 Redis的启动

3.3.1 Redis的前端模式启动

直接运行bin/redis-server将使用前端模式启动:  

前端模式启动的缺点启动完成后,不能再进行其他操作,这个界面只能启动,启动后不能进行其他操作如果要退出操作必须使用Ctrl+C。

3.3.2 Redis的后端启动  

修改redis.conf配置文件,找到daemonize no,将no改为yes,然后可以使用后端模式启动。  

  • no表示不允许后端启动! 

 

启动时,需要既指定指令,指定配置文件(这里所在文件夹是redis)  

Redis默认端口:6379,通过当前服务进行查看

3.3.3 客户端访问连接redis
  • 如果想要通过指令来操作redis,可以使用redis的客户端进行操作,在bin文件夹下运行redis-cli
  • 如果想要连接指定的ip地址以及端口号,则需要按照: redis-cli  -h  ip地址  -p 端口号 语法结构连接。
  • 该指令默认连接的127.0.0.1 ,端口号是6379

3.3.4 向Redis服务器发送命令
  • ping测试客户端与Redis的连接是否正常,如果连接正常,回收到Pong
3.3.5 退出客户端quit 
3.3.6 Redis的停止  

(1) 强制结束程序(不推荐)

  • 强制终止Redis进程可能会导致Redis持久化数据丢失。  
  • 语法:kill -9 pid  
  • 进程号pid可以通过 ps -aux | grep redis 进行查询。

(2) 正确停止Redis的方式应该是 :向Redis发送SHUTDOWN命令,方法为(关闭默认的端口) 

3.3.7 第三方工具(redis-desktop-manager)操作redis  

1. 关闭Linux防火墙  

2.  进入自己的redis安装目录,vim进入redis.conf修改redis.conf文件中的bind参数

接着重新启动Redis:

连接Redis:

 

4.Redis数据结构

Redis是一种基于内存的数据库,并且提供一定的持久化功能,它是一种键值(key-value)数据库使用 key 作为索引找到当前缓存的数据,并且返回给程序调用者。

当前的 Redis 支持 6 种数据类型,它们分别是字符串(String)、列表(List)、集合(set)、哈希结构(hash)、有序集合(zset)和基数(HyperLogLog)

重点掌握前五种数据结构!!!

解释说明:

  1. 字符串(string):普通字符串,Redis中最简单的数据类型
  2. 哈希(hash):也叫散列类似于Java中的HashMap结构
  3. 列表(list):按照插入顺序排序(有序)可以有重复元素,类似于Java中的LinkedList
  4. 集合(set):无序集合没有重复元素,类似于Java中的HashSet
  5. 有序集合(sorted set/zset):集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素

5.Redis常用指令

命令学习网站:Redis 命令参考 — Redis 命令参考

5.1  String类型

赋值语法:SET key value

取值语法: GET key  

设置多个键值语法: MSET key value [key value …]  

获取多个键值语法: MGET key [key …]  

删除语法:DEL key 【key...】 

5.2 字符串数字的递增与递减  

递增数字:

  • 当存储的字符串是整数时,Redis提供了一个实用的命令INCR,其作用是让当前键值递增,并返回递增后的值。
  • 递增数字语法: INCR key

  • 递减数值语法: DECR key

  • 增加指定的整数语法: INCRBY key increment

  • 减少指定的整数 语法:DECRBY key decrement

5.3 Hash散列(了解)  

Redis hash 是一个String类型的 field 和 value 的映射表,hash特别适合用于存储对象,常用命令:  

  • hash叫散列类型它提供了字段和字段值的映射
  • 字段值只能是字符串类型,不支持散列类型、集合类型等其它类型。相当于是对象格式的存储 

赋值语法: HSET     key/大key/一级key    field-属性-小key/二级key         value-属性值  

  • 设置一个字段值, HSET命令不区分插入和更新操作,当执行插入操作时HSET命令返回1,当执行更新操作时返回0。

取值语法: HGET key field-属性值

  

设置多个字段语法: HMSET key field value [field value ...] 

取多个值语法: HMGET key field [field ...]  

获取所有字段值语法:HGETALL key  

删除字段语法:HDEL key field [field ...]  

5.4 列表List

 

Redis的List是采用来链表来存储双向链表存储数据特点:增删快、查询慢(Linkedlist).这个队列是有序的。

Redis 列表是简单的字符串列表,按照插入顺序排序,常用命令:  

命令含义
lpush key value1 [value2]将一个或多个值插入到列表头部
rpush key value1 [value2]将一个或多个值插入到列表尾部
lrange key start stop获取列表指定范围内的元素
lpop key移出并获取列表的第一个元素
rpop key移除并获取列表最后一个元素
BRPOP key1 [key2 ] timeout移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
llen key获取列表长度
rpoplpush source dest移除列表的最后一个元素,并将该元素添加到另一个列表并返回
brpoplpush source dest timeout从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

向列表左边增加元素: LPUSH key value [value ...]  

从列表左边弹出元素: LPOP key(临时存储,弹出后,从队列中清除)  

向列表右边增加元素 : RPUSH key value [value ...]  

从列表右边弹出元素: RPOP key  

获取列表中元素的个数: LLEN key  

获取列表指定范围内的元素:LRANGE key start stop  

  • 将返回start、stop之间的所有元素(包含两端的元素),索引从0开始,可以是负数,如:“-1”代表最后的一个元素。

5.4 Set集合操作命令

Redis set 是string类型的无序集合集合成员是唯一的,这就意味着集合中不能出现重复的数据,常用命令:  

命令含义
SADD key member1 [member2]向集合添加一个或多个成员
SMEMBERS key返回集合中的所有成员
SCARD key获取集合的成员数
SINTER key1 [key2]返回给定所有集合的交集
SUNION key1 [key2]返回所有给定集合的并集
sdiff key1 [key2]返回所有给定集合的差集
SREM key member1 [member2]移除集合中一个或多个成员

添加元素语法:SADD key member1 [member2 ...]  

获取集合中的所有元素 : smembers key  

删除元素语法: SREM key member1 [member2 ...]  

判断元素是否在集合中: SISMEMBER key member    返回1表示存在,反之0表示不存在

5.5 Zset有序集合操作命令

  • SortedSet又叫Zset,是有序集合,可排序的,但是唯一 SortedSet和Set的不同之处,是会给Set中的元素添加一个分数,然后通过这个分数进行排序。  

Redis Zset有序集合是String类型元素的集合且不允许有重复成员每个元素都会关联一个double类型的分数。常用命令:  withscores选项代表得到对应的分数!

命令含义
zadd key score1 member1 [score2 member2]向有序集合添加一个或多个成员
zrange key start stop [withscores]通过索引区间返回有序集合中指定区间内的成员(分数从小到大,升序排序)
zrevrange key start stop [withscores]通过索引区间返回有序集合中指定区间内的成员(分数从大到小,降序排序)
zincrby key increment member有序集合中对指定成员的分数加上增量 increment
zrem key member [member ...]移除有序集合中的一个或多个成员
zcard key计算集合中元素的数量

增加元素:ZADD key score1 member1 [score2 member2 ...]  

  • 向有序集合中加入一个元素和该元素的分数(score),如果该元素已经存在则会用新的分数替换原有的分数。  

获得排名在某个范围的元素列表,并按照元素分数降序返回:

获取元素的分数:ZSCORE key member   

删除元素ZREM key member [member ...]  

升序排序,获得元素的分数的可以在命令尾部加上WITHSCORES参数  

应用:商品销售量;学生排名等  

对指定成员的分数加上增量Increment:zincrby key increment member

5.6 HyoperLogLog命令  

HyperLogLog是一种使用随机化的算法,以少量内存提供集合中唯一元素数量的近似值。

HyperLogLog可以接受多个元素作为输入,并给出输入元素的基数估算值:

  • 基数集合中不同元素的数量。比如 {‘apple’, ‘banana’, ‘cherry’, ‘banana’, ‘apple’} 的基数就是 3 。

  • 估算值算法给出的基数并不是精确的,可能会比实际稍微多一些或者稍微少一些,但会控制在合理的范围之内。

更多推荐

亚马逊登山扣CPC认证ASTMF1774测试和UIAA121测试报告申请

一.什么是登山扣答:登山扣是扣子的一种,顾名思义其就是用来在登山的时候配合绳子起到一个承重悬挂的作用.采用铝吕合金、铁或者是不锈钢等材料制作而成的一种登山工具之一。其形状多样,比较常见的是椭圆形和圆形的,除此之外还有长方形、三角形等样式的登山扣。铝合金登山扣由于质地较轻所以重量也比较交轻,所以携带方便,其耐腐蚀性和防锈

算法通关村-----LRU的设计与实现

LRU缓存问题描述请你设计并实现一个满足LRU(最近最少使用)缓存约束的数据结构。实现LRUCache类:LRUCache(intcapacity)以正整数作为容量capacity初始化LRU缓存。intget(intkey)如果关键字key存在于缓存中,则返回关键字的值,否则返回-1。voidput(intkey,i

YashanDB第三期YCA认证培训圆满结束

9月11日,由YashanDB举办的“第三期YCA认证培训”圆满结束。本次培训吸引了超过110名学员报名,华润数字科技有限公司、北京中亦安图科技股份有限公司、迪思杰(北京)数据管理技术有限公司等多家合作伙伴积极参与。经过7天的学习,在9月6日举行的YCA认证考试中,77名学员获得“YashanDB数据库V22.2认证管

Linux命令行操作:使用“more“命令进行分页显示

文章目录1.引言1.1介绍Linux操作系统和命令行界面什么是Linux操作系统?为什么命令行界面在Linux中如此重要?1.2介绍Linux中的分页显示命令分页显示命令的作用与意义不同分页显示命令的比较2."more"命令的基本用法2.1安装和启动"more"命令如何安装"more"命令?如何从命令行中启动"more

golang使用高阶函数优化业务功能

业务描述两个接口(新增Tag和更新Tag),在业务层均需要添加两个校验,校验Tag信息是否重复和Tag的数据中的编码是否重复。基本实现方式对应的增加两个校验的函数/方法,在接口实现中依次调用两个函数/方法进行校验。优缺点实现简单;但重复代码多,后期再增加其他校验,扩展性较差。高阶函数方式一方式因为业务方法参数相同,业务

FOXBORO FBM233 P0926GX控制脉冲模块

FOXBOROFBM233P0926GX是一种控制脉冲模块,通常用于工业自动化和控制系统中。这个模块的主要功能是生成和控制脉冲信号,以用于执行特定的操作或控制过程。以下是可能适用于FOXBOROFBM233P0926GX控制脉冲模块的一些常见特点:脉冲生成:FBM233P0926GX模块通常能够生成可控的脉冲信号,包括

界面组件DevExpress WinForms v23.1 - 富文本编辑器等功能升级

DevExpressWinForms拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!DevExpressWinForm控件已正

Vue3_vite

目录使用Vue-cli创建使用vite创建CompositionAPI组合APIsetup执行时机setup的参数ref函数reactive函数Vue3.0中的响应式原理Vue2的响应式实现原理Vue3的响应式实现原理通过Proxy(代理):拦截对象中任意属性的变化,包括属性值的读写,属性的添加,属性的删除。通过Ref

Linux网络编程

一.协议1.1什么是协议从应用的角度出发,协议可理解为“规则”,是数据传输和数据的解释的规则。假设,A、B双方欲传输文件。规定:第一次,传输文件名,接收方接收到文件名,应答OK给传输方;第二次,发送文件的尺寸,接收方接牧到该数据再次应答一个OK;第三次.传输文件内容。同样.接收方接收数据完成后应答OK表示文件内容接收成

【HCIE】04.网络安全技术

端口隔离在同一VLAN中可以隔离二层与三层通信,让同VLAN内的设备可以通信或者不可以通信。定义一个端口隔离组,在一个组内无法互访,不在一个组里面可以进行互访port-isolateenablegroup1//使能端口隔离功能port-isolatemdoeall//全局模式实现二层隔离,三层互访intg0/0/1po

207. 课程表

207.课程表题目-中等难度示例1.bfs题目-中等难度你这个学期必须选修numCourses门课程,记为0到numCourses-1。在选修某些课程之前需要一些先修课程。先修课程按数组prerequisites给出,其中prerequisites[i]=[ai,bi],表示如果要学习课程ai则必须先学习课程bi。例如

热文推荐