分布式Redis详解

目录

前言

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 查找快捷键)
  1. 将redis.conf 中的protected-mode yes 中的yes 改为no

  2. 保存文件,将修改后的文件在上传到Linux中etc 的目录下

  3. 使用命令 redis-cli shutdown 先关闭redis 服务 ,再使用 redis-server /etc/redis.conf & 启动redis命令

  4. 最后,如果不能远程访问, 请试着查看服务器是否开放了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在Spring中的使用

  1. 添加依赖
java 复制代码
	<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis-reactive</artifactId>
		</dependency>
  1. 配置全局文件
java 复制代码
# 设置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来读取
java 复制代码
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");
    }
}
相关推荐
Ai 编码助手1 小时前
MySQL中distinct与group by之间的性能进行比较
数据库·mysql
陈燚_重生之又为程序员1 小时前
基于梧桐数据库的实时数据分析解决方案
数据库·数据挖掘·数据分析
caridle1 小时前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
白云如幻2 小时前
MySQL排序查询
数据库·mysql
萧鼎2 小时前
Python并发编程库:Asyncio的异步编程实战
开发语言·数据库·python·异步
^velpro^2 小时前
数据库连接池的创建
java·开发语言·数据库
荒川之神2 小时前
ORACLE _11G_R2_ASM 常用命令
数据库·oracle
IT培训中心-竺老师2 小时前
Oracle 23AI创建示例库
数据库·oracle
小白学大数据2 小时前
JavaScript重定向对网络爬虫的影响及处理
开发语言·javascript·数据库·爬虫
time never ceases2 小时前
使用docker方式进行Oracle数据库的物理迁移(helowin/oracle_11g)
数据库·docker·oracle