Redis安装 ▎Redis详细知识点

news/2024/9/22 23:55:58/

前言:

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/news/1529062.html

相关文章

5.内容创作的未来:ChatGPT如何辅助写作(5/10)

引言 在信息爆炸的时代&#xff0c;内容创作已成为连接品牌与受众、传递信息与知识、以及塑造文化与观念的重要手段。随着数字媒体的兴起&#xff0c;内容创作的需求日益增长&#xff0c;对创作者的写作速度和质量提出了更高的要求。人工智能&#xff08;AI&#xff09;技术的…

家政小程序开发/源码/上门维修/上门保洁服务平台

开发一个家政小程序是一个涉及多方面技术的项目&#xff0c;主要目标是为用户提供便捷的家政服务预约、查询和管理功能。以下是一个简要的开发流程和一些关键点&#xff0c;帮助你开始这个项目&#xff1a; 1.需求分析 用户调研&#xff1a;了解目标用户群体&#xff08;如家庭…

图像分割基本知识

计算机视觉和图像处理 Tensorflow入门深度神经网络图像分类目标检测图像分割 图像分割 一、目标分割1.1 图像分割的定义1.2 任务类型1.2.1 任务描述1.2.2 任务类型 二、语义分割2.1 FCN网络2.1.1网络结构 2.2 Unet网络 三、UNet案例3.1 数据集获取3.1.1 设置相关信息3.1.2 图像…

Unity自我实现响应式属性

其实只是写着玩,响应式编程建议使用UniRx插件(一套成熟的响应式编程解决方案),我写的主要是借鉴一下这个思想,实现的也不够优雅,不过逻辑也算严密可以正常使用.你可以查看我写的理解响应式属性的思想. 借鉴UniRx的ReactiveProperty类,且UniRx不仅有响应式属性. using System; …

【笔记】第三节 组织与性能

3.1 基本成分 3.2 微观组织特征 0.6-0.8C%碳素钢的组织为珠光体和少量的铁素体。 如何把组织和性能联系起来&#xff1f;德国克虏伯公司的研究——珠光体片间距与渗碳体片层厚度成比例&#xff1a; t s 0 ( ρ 15 ( C % ) − 1 ) ts_0(\frac{\rho}{15(C\%)}-1) ts0​(15(C%)…

分布式计算技术是什么?在数据集成值得作用?

数据是现代科技技术的基础&#xff0c;面对爆炸性数据的增长&#xff0c;要求计算能力要求更高、数据整合和处理更有效&#xff0c;如何应对数据集成带来的挑战&#xff1f;本文将探讨分布式计算技术在数据集成中的优化作用。 一 分布式计算技术。 定义&#xff1a;分布式计算…

[数据结构]无头单向非循环链表的实现与应用

文章目录 一、引言二、线性表的基本概念1、线性表是什么2、链表与顺序表的区别3、无头单向非循环链表 三、无头单向非循环链表的实现1、结构体定义2、初始化3、销毁4、显示5、增删查改 四、分析无头单向非循环链表1、存储方式2、优点3、缺点 五、总结1、练习题2、源代码 一、引…

深度学习----------------------文本预处理

目录 文本预处理读取数据集词源化词表该部分总代码该部分总代码 整合所有功能该部分总代码 文本预处理 文本预处理&#xff1a;把文本当作一个时序序列 将解析文本的常见预处理步骤。 这些步骤通常包括&#xff1a; ①将文本作为字符串加载到内存中。 ②将字符串拆分为词元&…