分布式Redis详解

news2024/11/24 6:59:00

目录

  • 前言
  • 安装redis的俩种方法
    • Redis 与 MySQL的区别
    • Redis可以实现那些功能
    • Redis常用的数据类型
    • 有序列表的底层是如何实现的?
      • 什么是跳跃表
  • Redis在Spring中的使用

前言

Redis我们最近学习必备工具之一了, 接下来我们将讲解Redis的简单应用 ,以及相关原理

安装redis的俩种方法

第一种: 在Linux上安装Redis

yum -y install redis

启动Redis

redis-server /etc/redis.conf &

链接Redis

redis-cli

出现这个说明链接成功了
在这里插入图片描述

简单的读和取数据
在这里插入图片描述
设置远程链接

  1. 将redis的配置文件下载到本地: 配置文件是Linux底下的 /etc/redis.conf 目录

cd /etc 进入目录

  1. 下载文件

sz redis.conf

  1. 查找文件中的bind 127.0.0.1 将找到的这一行注释掉(ctrl + F 查找快捷键)
    在这里插入图片描述

在这里插入图片描述
4. 将redis.conf 中的protected-mode yes 中的yes 改为no
在这里插入图片描述
5. 保存文件,将修改后的文件在上传到Linux中etc 的目录下
6. 使用命令 redis-cli shutdown 先关闭redis 服务 ,再使用 redis-server /etc/redis.conf & 启动redis命令
7. 最后,如果不能远程访问, 请试着查看服务器是否开放了6379的端口号
在这里插入图片描述
第二种 在Windows中安装 Redis

Redis 与 MySQL的区别

MySQL : 是关系型数据库
Redis : 是文档型数据库 (以键值对的方式存储)(也叫非关系型数据库)

关系型数据局库描述的是对象与对象之间的关系
而文档型数据库中 , 没有关系,是动态的,所有内容都在一块, 增加删除数据不影响之前的数据,所以说Redis天然支持分布式

举个例子
我们都知道session 信息, 一般是存储在服务器中的 ,而加入有多台服务器的话, session还是存储在每个服务器中, 那么就意味着一个用户, 每次访问不同的服务器(物理上的多台),就必须重新验证一下session , 这不得烦死. 而Redis就 向一个安检门一样, 你在我这里验证一次, 无论进那台服务器都不需要再次验证了 , 这就是分布式

Redis可以实现那些功能

  1. 会话存储 -也就是上面我们说的存储session
  2. 存储缓存 - 这个也很好理解: 我们的服务器可以不停的买, 然后来突破单台服务器的瓶颈, 但是我们的数据库怎么办呢? 所以在企业中数据库是最容易达到瓶颈的 ,虽然我们可以分库分表, 但是这样的库 和表过多的时候 ,我们查询的效率无疑会大大降低, 这时候 ,就需要将数据库的一部分数据 添加到Redis中的缓存中, 让服务器查询数据的时候先去缓存中查询, 查不到再去数据库中查, 这样就大大提高了数据库查询的效率
  3. 实现分布式锁 - 与存储会话功能一样 ,是换个用途
  4. 简单的消息队列

Redis常用的数据类型

String字符串类型

Redis支持的字符串类型不是定长分配的字符串,是动态变长字符串,修改字符串在没有增加特别多内容的情况下不需要重新分配内存空间,

字符串类型常用的场景有以下这些:
(1)缓存结构体信息:
(2)计数功能:

List列表类型

常用使用场景
(1)list列表结构常用来做异步队列使用
(2)list可用于秒杀抢购场景

Hash数据类型

常用使用场景
(1)保存结构体信息
Set集合类型
用在一些去重的场景里
Zset有序集合
常用使用场景
(1)各类热门排序场景

有序列表的底层是如何实现的?

答:当数据比较少时,有序集合是压缩列表ziplist实现的,反之则为跳跃表skiplist实现。使用压缩列表存储必满足以下两个条件:
1有序集合保存的元素个数要小于128个;
2有序集合保存的所有元素成员的长度都必须小于64字节。
如果不能满足以上两个条件中的任意一个,有序集合将会使用跳跃表skiplist结构进行存储。

什么是跳跃表

答:跳跃表SkipList,也称之为跳表,是一种数据结构,用于在有序元素的集合中进行高效的查找操作。它通过添加多层链表的方式,提供了一种以空间换时间的方式来加速查找。
跳跃表由一个带有多层节点的链表组成,每一层都是原始链表的一个子集。最底层是一个完整的有序链表,包含所有元素。每个更高层级都是下层级的子集,通过添加额外的指针来跳过一些元素。这些额外的指针称为“跳跃指针”,它们允许快速访问更远的节点,从而减少了查找所需的比较次数。
跳跃表的平均查找时间复杂度为O(logn),其中n是元素的数量。这使得它比普通的有序链表具有更快的查找性能,并目与平衡二叉搜索树(如红黑树)相比,实现起来更为简单。

在这里插入图片描述

目录

  • 前言
  • 安装redis的俩种方法
    • Redis 与 MySQL的区别
    • Redis可以实现那些功能
    • Redis常用的数据类型
    • 有序列表的底层是如何实现的?
      • 什么是跳跃表
  • Redis在Spring中的使用

Redis在Spring中的使用

  1. 添加依赖
	<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis-reactive</artifactId>
		</dependency>
  1. 配置全局文件
# 设置redis的相关信息
# 链接那台redis : 这里拦截的是本地的 - 要开启服务
spring.redis.host = 127.0.0.1  
# redis的端口号 : 默认是6379
spring.redis.port = 6379
# 密码没有就空着, 也可以不写
spring.redis.password=
# 默认是16个库
spring.redis.database = 1
#以上是最关键的配置, 其他可以不设置


  1. 使用Redis来读取
package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @Autowired
    private RedisTemplate redisTemplate;// 自动装配

    @RequestMapping("/serval")
    public void setval(String val){
        redisTemplate.opsForValue().set("test",val);//得到操作redis的类型,(String)
    }
    @RequestMapping("/getval")
    public String getval(){
       return (String) redisTemplate.opsForValue().get("test");
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/839780.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python自动收集粘贴板

win10的粘贴板可以用“winV”查看&#xff1a; 每次复制都相当于入栈一个字符串&#xff0c;粘贴相当于获取栈顶。 但是系统自带的这个粘贴板貌似不能一键导出&#xff0c;所以我写了个python代码完成这个功能&#xff1a; import pyperclip import timetmp while True:txt…

【LeetCode】剑指 Offer Ⅱ 第3章:字符串(7道题) -- Java Version

题库链接&#xff1a;https://leetcode.cn/problem-list/e8X3pBZi/ 题目解决方案剑指 Offer II 014. 字符串中的变位词双指针 数组模拟哈希表 ⭐剑指 Offer II 015. 找到字符串中所有字母异位词双指针 数组模拟哈希表 ⭐剑指 Offer II 016. 不含重复字符的最长子字符串双指针…

vue2-vue中mixin到底是什么?

1、mixin是什么&#xff1f; Mixin是面向对象程序设计语言中的类&#xff0c;提供了方法的实现。其他类可以访问mixin类的方法而不必成为其子类。 Mixin类通常作为功能模块使用&#xff0c;在需要该功能时“混入”&#xff0c;有利于代码的复用又避免了多继承的复杂。 1.1 vue中…

LeetCode643. 子数组最大平均数 I

题干 给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。 请你找出平均数最大且 长度为 k 的连续子数组&#xff0c;并输出该最大平均数。 任何误差小于 10^-5 的答案都将被视为正确答案。 示例1&#xff1a; 输入&#xff1a;nums [1,12,-5,-6,50,3], k 4 输出&am…

Matlab中图的最短路径

前言&#xff1a; 图的基本概念&#xff1a; 若想简单绘制图可以利用此网站&#xff1a; 左上角Undirected/Directed是无向图/有向图 左边 0-index &#xff0c;1-index为0下标&#xff0c;1下标。 Node Count为节点个数 Graph Data&#xff1a;最初尾节点的名称&#xff…

HDFS小文件解决方案---archive归档文件命令

小文件解决方案 背景Archive概述创建archive查看归档文件查看归档之后的样子查看归档文件之前的样子 提取archivearchive注意事项 背景 hdfs并不擅长存储小文件&#xff0c;因为每个文件最少一个block&#xff0c;每个block的元数据都会在namenode占用内存&#xff0c;如果存在…

WAF绕过-漏洞利用篇-sql注入+文件上传-过狗

WAF绕过主要集中在信息收集&#xff0c;漏洞发现&#xff0c;漏洞利用&#xff0c;权限控制四个阶段。 1、什么是WAF&#xff1f; Web Application Firewall&#xff08;web应用防火墙&#xff09;&#xff0c;一种公认的说法是“web应用防火墙通过执行一系列针对HTTP/HTTPS的安…

Java thymeleaf bug排查记录

刚学Java 做项目时报了一个错误 一时间看的莫名其妙 EL1008E: Property or field createTime cannot be found on object of type java.util.HashMap - maybe not public or not valid? 随即向上排查至第一个报错&#xff0c;发现是thymeleaf渲染时报错。 Exception proces…

ChatGPT下架官方检测工具,承认无法鉴别AI内容

去年底&#xff0c;OpenAI 推出的 ChatGPT &#xff0c;带来了生成式人工智能涌现的热潮。它不仅能够协助完成撰写邮件、视频脚本、文案、翻译、代码等任务&#xff0c;还能通过学习和理解人类的语言来进行对话&#xff0c;并根据聊天的上下文进行互动。 但随之而来的争议也让人…

代码随想录算法训练营day55

文章目录 Day55 判断子序列题目思路代码 不同的子序列题目思路代码 Day55 判断子序列 392. 判断子序列 - 力扣&#xff08;LeetCode&#xff09; 题目 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以…

Java课设--学生信息管理系统(例1)

文章目录 前提一、运行效果二、Text实现类三、Manage选择类四、StudentWay学生方法类五、StudnetSql数据库类 前题 例1为无使用GUI图形界面&#xff0c;例2使用GUI图形界面&#xff01; 首先自己的JDBC驱动已经接好了&#xff0c;连接自己的数据库没有问题。连接数据库可以看…

Linux Day06

目录 一、printf输出问题 二、复制进程fork 2.1进程 2.2 pid_t fork(void); 注意&#xff1a; 2.3逻辑地址和物理地址 2.4写时拷贝技术 一、printf输出问题 printf 函数并不会直接将数据输出到屏幕&#xff0c;而是先放到缓冲区中&#xff0c;只有一下三种情况满 足&a…

2.文件的逻辑结构

第四章 文件管理 2.文件的逻辑结构 顺序文件采用顺序存储则意味着各个逻辑上相邻的记录在物理上也是相邻的存储的。所以如果第0号记录的逻辑地址为0的话&#xff0c;则i号记录的逻辑为i *L。 特别的如果这个定长记录的顺序文件采用串结构&#xff0c;也就是这些记录的顺序和他…

Python爬虫——爬虫时如何知道是否代理ip伪装成功?

前言 在进行爬虫时&#xff0c;我们可能需要使用代理IP来伪装自己的身份&#xff0c;以避免被网站封禁。如何判断代理IP是否伪装成功呢&#xff1f;本篇文章将围绕这个问题展开讲解&#xff0c;同时提供Python代码示例。 1. 确认代理IP地址 首先&#xff0c;我们需要确认代理…

unity制作FPS射击游戏

文章目录 介绍鼠标移动控制视角行走、奔跑、跳跃、下蹲射击、后坐力、射速、瞄准、弹痕、枪火、抛壳手臂摇摆手枪切枪效果动画状态机玩家血量新地图场景颜色渐变激光墙获取钥匙滑动门NPC属性攻击逻辑终点传送门 介绍 角色动作方面包括行走、奔跑、跳跃、武器切换、弹夹更换、武…

下载Windows 10光盘镜像(ISO文件)

文章目录 下载Windows 10镜像文件 下载Windows 10镜像文件 打开微软官网下载地址 立即下载工具 找到下载工具&#xff0c;双击运行&#xff0c;等待 接受条款&#xff0c;等待 选择为另一台电脑安装介质 选择Windows10&#xff0c;下一步 选择ISO文件&#xff0c;…

嵌入式开发学习(STC51-7-矩阵按键)

内容 按下S1-S16键&#xff0c;对应数码管最左边显示0-F 矩阵按键简介 独立按键与单片机连接时&#xff0c;每一个按键都需要单片机的一个I/O 口&#xff0c;若某单片机系统需较多按键&#xff0c;如果用独立按键便会占用过多的I/O口资源&#xff1b;而单片机 系统中I/O口资…

搜索是什么

1、什么是搜索&#xff1f; 搜索&#xff1a;计算机根据用户输入的关键词进行匹配&#xff0c;从已有的数据库中摘录出相关的记录反馈给用户。 常见的全网搜索引擎&#xff0c;有百度、谷歌这样搜索网站。 除此&#xff0c;搜索技术在垂直领域也有广泛的使用&#xff0c;比如淘…

利用awk筛选给定时间范围内的日志

文章目录 筛选给定时间范围内的日志时间时间戳什么是时间戳&#xff1f; 系统时间 筛选日志时间示例简单示例mktime()函数是什么 进阶示例 筛选给定时间范围内的日志 时间 时间的表示方法&#xff1a; 时间戳系统时间&#xff08;年月日时间&#xff09; 时间戳 什么是时间…

Spring Boot读取yml或者properties配置信息

文章目录 Spring Boot读取yml或者properties配置信息方法一&#xff1a;Value获取基本信息&#xff0c;适用于少量信息方法二&#xff1a;通过注解ConfigurationProperties(prefix "spring.datasource")方法三&#xff1a;通过api Environment Spring Boot读取yml或…