Redis安装 ▎Redis详细知识点

devtools/2024/10/20 5:38:19/

前言:

Redis是一个开源的内存数据结构存储,支持丰富的数据类型,如字符串、哈希、列表、集合和有序集合,作为一个键值对数据库Redis能提供毫秒级的响应时间,适合高并发应用场景。它还支持持久化,将内存数据定期保存到硬盘,保证数据安全,Redis不仅能在单服务器上处理大规模数据,还能通过分片和集群扩展至多个节点,满足不断增长的业务需求。总之,Redis是一个强大的内存数据库解决方案,适应现代应用程序对性能和灵活性的苛刻要求。接下来,我们将深入探讨Redis的特性和最佳实践。

Redis是什么

Redis是一个开源,将数据以key-value结构存储在内存中的一款非关系型数据库,Redis可以用来当做数据库(存储简单数据,例如:新闻的点赞量)缓存(秒杀的商品数量信息)

Redis特点

  1. 可以将数据存储在内存中,也可以将数据持久化到硬盘上
  2. 性能极高
  3. 丰富的数据结构存储数据

为什么使用Redis

大量用户连接数据库,数据库就会出现瓶颈(连接数量太多,IO时间),为了缓解关系型数据库压力,可以将一些数据暂时存储到redis中,甚至直接存储到redis中,从而实现对关系型数据库的保护.

安装Redis

第一步:创建redis配置文件和数据映射挂载卷

mkdir -p /opt/redis/conf    ----->创建redis配置文件

mkdir -p /opt/redis/data    ----->创建数据映射挂载卷

第二步:拉去镜像

docker pull redis:6.0

第三步:安装命令

docker run -d -p 6379:6379 \

--name redis \

--restart=always \

--privileged=true \

-v /opt/redis/conf/redis.conf:/etc/redis/redis.conf \

-v /opt/redis/data:/data \

redis:6.0

Redis数据结构

  1. String(字符串)
  2. Hash(哈希)
  3. list(列表)
  4. set(集合)
  5. zset(sorted set:有序集合)

注:Redis中的key(键)只能为String类型

 String(字符串)

String是Redis最基本的类型,一个key对应一个value

String类型是二进制安全的,Redis的String可以包含任何数据.例如:jpg图片或者序列化对象

String类型是Redis最基本的数据类型,String类型的值最大能存储512MB

单值存储

单只存储:存一个具体的值,也可以存储一个Java中的对象,对象是被序列化成json格式的字符串

set key value 存储数据

get key 拿去数据

del key 删除数据

key* 查看所有数据

计数器

set news_views:1 0 设置文章访问量

incr news_views:1 文章访问量+1

decr news_views:1 文章访问量-1

get news_views:1 获得值

Hash(哈希)

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

Hash存储的是字符串和字符串的映射,比如存储用户购物信息 

 

 hset key 属性 值 存储

hget key 属性 拿去

hdel key 属性 删除某个属性

hlen key 返回哈希表 key 中的属性的数量

hgetall key 返回key下所有属性值

 List(列表)

有序集合 里面可以存储重复

lpush key val 从左边向集合添加元素

rpush key val 从右边向集合添加元素

lpop key 移除并返回key列表的头元素

lpop key 移除并返回key列表的尾元素

 

set(集合)

无序不重复集合

sadd key val 添加

srem key val 删除

smembers key 查看指定key下所有的值

scard key 查看key下元素数量

 zset

有序不重复集合

不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为 集合中的成员进行从小到大的排序。

zset 的成员是唯一的,但分数(score)却可以重复

zadd key 分数 值

zrem key 值

zscore key 值 返回值的分数

zcard key 查看key下元素数量

设置失效时间

有时候我们并不希望 redis 的 key 一直存在。例如缓存,验证码等数据,我们希 望它们能在一定时间内自动的被销毁。redis 提供了一些命令,能够让我们对 key 设置过期时间,并且让 key 过期之后被自动删除

PX 表示以毫秒为单位    EX,PX 不区分大小写

set name jim EX 30   设置失效时间为 30 秒

ttl 键 查看剩余时间(秒)

pttl 键 查看剩余时间(毫秒)

SpringBoot集成redis 

  1. 使用官方提供的jedis类实现链接
  2. 使用Springboot对jedis的封装实现
    1. 管理连接redis对象,提供数据库连接池的功能
    2. 针对每一种的数据结构分别封装了不同的实现类
    3. 事务
    4. 提供了对键 值进行序列化,反序列化操作

搭建

第一步:添加 redis 依赖

        <!--springBoot redis--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>

配置连接redis

  redis:host: 192.168.65.128port: 6379password: 123database: 0pool:max-active: 8 # 连接池最大连接数(使用负值表示没有限制)max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制)max-idle: 8 # 连接池中的最大空闲连接min-idle: 0 # 连接池中的最小空闲连接timeout: 5000ms # 连接超时时间(毫秒)

注入RedisTemplate并测试

public class redisTest {@AutowiredRedisTemplate redisTemplate;@RequestMapping(path = "/test1")public void test1(){
/*        System.out.println(redisTemplate.hasKey("")); //判断键是否存在System.out.println(redisTemplate.delete("")); //删除键*///redisTemplate.setValueSerializer();对值指定序列化的方式//redisTemplate.setKeySerializer();对键指定序列化的方式//valueOperations提供System.out.println("1");ValueOperations valueOperations = redisTemplate.opsForValue();
//        valueOperations.set("name","jim");
//        System.out.println(redisTemplate.hasKey("name"));Menu menu = new Menu();menu.setId(1);menu.setName("新闻联播");menu.setType(1);menu.setUrl("/news");valueOperations.set("menu",menu);}
}

注:我们存储数据必须经过处理,要不然数据存储为二进制形式,所以我们配置拦截器

拦截器

package com.kid.news.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;@Configuration
public class RedisConfig {/*** 序列化键,值* @param connectionFactory* @return*/@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(connectionFactory);//序列化策略Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);StringRedisSerializer redisSerializer = new StringRedisSerializer();redisTemplate.setKeySerializer(redisSerializer);//key 单一的字符串redisTemplate.setHashKeySerializer(redisSerializer);redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);//value {}redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);return redisTemplate;}
}

 感谢大家的观看,本次分享就到这里。希望我的内容能够对您有所帮助。创作不易,欢迎大家多多支持,您的每一个点赞都是我持续更新的最大动力!如有不同意见,欢迎在评论区积极讨论,让我们一起学习、共同进步!如果有相关问题,也可以私信我,我会认真查看每一条留言。期待下次再见!

                                       希望路飞的笑容可以治愈努力路途中的你我!

博主vx:Dreamkid05 --->欢迎大家和博主讨论问题 

 


http://www.ppmy.cn/devtools/115396.html

相关文章

gitlab/极狐-离线包下载地址

如果想要使用Gitlab/极狐进行数据的恢复&#xff0c;只能使用相同版本或者相近版本的安装包&#xff0c;因此有时候需要到它的官网上下载对应版本的安装包&#xff0c;以下是我收集到的对应地址的下载路径&#xff1a; Gitlab Gitlab离线库&#xff0c; https://packages.gitl…

深入理解前端拖拽:从基础实现到事件冒泡与委托的应用【面试真题】

在前端开发中&#xff0c;拖拽功能是一项常见的交互需求。通过监听鼠标或触摸事件&#xff0c;用户可以拖动元素并将其放置到指定位置。理解拖拽的底层实现、如何判断拖拽的是子元素还是父元素&#xff0c;以及事件冒泡和事件委托的原理&#xff0c;可以帮助我们更好地实现复杂…

Moshi: a speech-text foundation model for real time dialogue

视频号 挺神奇的东西 整下来 kyutai-labs/moshi (github.com) git clone https://github.com/kyutai-labs/moshi.git 在线体验 moshi.chat 结束后 点击Download audio Download video 可以下载音频与视频 &#xff08;不过是webm格式&#xff09; 发行版 已上传至资源 小…

练习题 - Django 4.x Models Relationship fields 字段关联关

在 Django 中,模型(Model)是用于定义数据库结构的核心部分。关系型数据库的一个重要特性是能够在不同的表(模型)之间建立关联,Django 提供了多种字段类型用于定义模型之间的关系,如 ForeignKey、OneToOneField 和 ManyToManyField。这些关系字段使得开发者能够轻松地在模…

测试面试题:接口自动化测试流程?

1、测试用例编写&#xff1a;根据接口的需求和功能&#xff0c;编写相应的测试用例。测试用例应包括正常、边界和异常等各种情况下的测试。 2、准备测试数据&#xff1a;根据测试用例的要求&#xff0c;准备相应的测试数据。数据可以通过手动输入、数据库查询、文件导入等方式进…

[Python]一、Python基础编程(3)

F:\BaiduNetdiskDownload\2023人工智能开发学习路线图\1、人工智能开发入门\1、零基础Python编程 1. 面向对象-其他 1.1 面向对象三大特征 封装 将属性和⽅法书写到类的⾥⾯的操作即为封装 封装可以为属性和⽅法添加私有权限 继承 ⼦类默认继承…

MOSFET是什么,终于有了一点点感知

目录 MOSFET是什么&#xff1f;FETMOS MOSFET和功率MOSFETMOSFET功率MOSFET MOSFET是什么&#xff1f; 英文是metal-oxide-semiconductor-field-effect-transistor&#xff0c;金属氧化物半导体场效应晶体管。 可以分开来看一下&#xff0c;MOS和FET FET 其中&#xff0c;FE…

Kafka消息堆积问题排查

背景 业务架构图 根据 微服务重构&#xff1a;MysqlDTSKafkaElasticSearch解决跨表检索难题所描述&#xff0c;我们使用了Es解决微服务重构中遇到的Mysql库拆分问题&#xff0c;业务架构图如下所示&#xff1a; Kakfa消息堆积导致的数据一致性问题 在下午14:15左右&#xff0c;…