Redis相关知识

  1. yum安装redis
    使用以下命令:直接将redis安装到Linux服务器(Xshell)中
    yum -y install redis
  2. 启动redis

    使用以下命令,以后台运行方式启动redis

    redis-server /etc/redis.conf &
  3. 操作redis

    使用以下命令启动redis客户端

    redis-cli

    具体可操作如下:

    redis-cli:打开客户端

    set testname zhangsan:存放一个key

    get testname:读取一个key

  4. 设置远程连接

    a.将redis配置文件下载到本地;redis配置文件是linux下的/etc/redis.conf

    b.将redis.conf中的“bin 127.0.0.1”注释掉

    c.将redis.conf中的“protected-mode yes"改为:“protected-mode no"

    d.将修饰后的redis.conf上传至linux下 的/etc目录

    e.使用命令”redis-cli shutdown“先关闭redis服务;在使用”redis-server /etc/redis.conf &“开启redis服务

    f.云服务防火墙或安全策略里面开放redis端口6379

redis有五大基础数据类型:

String字符串类型(使用较多)
Hash字典类型
List列表类型
Set集合类型
Zset有序集合类型

1.String:字符串类型(使用较多)

简单动态字符串,它是从键值对key-value的形式存储的,根据key来存储和获取value值,它的使用相对来说比较简单,但是在实际项目中应用非常广泛:

使用如下:

set k1 v1:添加数据

get k1:查询数据

strlen k1:查询字符串的长度

可以使用ex参数来设置字符串的过期时间

set k1 v1 ex 1000 :设置1000s后过期(删除)

字符串的常见使用场景:

  1. 存放用户登录信息
  2. 存放文章详情和列表信息
  3. 存放和累计网页的统计信息
  4. …………………………

2.Hash:字典类型

字典类型又被称为散列类型或者是哈希表类型,它是将一个键值(key)和一个特殊的“哈希表”关联起来,这个“哈希表”包含两列数据:字段和值,他就相当于Java中的Map<String , Map<String , String>>结构。

假如我们使用字典类型来存储一篇文章的详情信息,存储结构如下:

同理,我们也可以使用字典类型来存储用户信息,并且字典类型来存储此类信息就无需手动序列化和反序列化数据了,所以使用起来更加的方便和高校。

字典类型的使用如下:

hset myhash key1 value1:添加数据

hset myhash key1:查询数据

字典类型的查询数据只能一个一个的查询,不能一次全部查询完!!

通常情况下,字典类类型会使用数组的方式来存储相关的数据,但发生哈希冲突时,才会使用链表的结构来存储数据。

添加多个数据:hmset myhset age "16" sex "男"

查询:hget myhset age

           hget myhset sex

3.List:列表类型

列表类型是一个使用链表结构存储的有序结构,它的元素插入会按照先后顺序存储到链表结构中,因此,它的元素操作(插入删除实时间复杂度为O(1)),所以相对来说速度还是比较块的,但它的查询时间复杂度为O(n),因此查询可能会比较慢。

列表类型使用如下:

lpush list 1 2 3:添加数据

lpop list :获取并删除列表的第一个元素

列表的典型使用场景可以有以下两个:

  1. 消息队列:列表类型可以使用rpush实现先进先出的功能,同时又可以使用lpop轻松的弹出(查询并删除)第一个元素,所以列表类型可以用来实现消息队列。
  2. 文查列表:对于博客站点来说,用户和文字都越来越多时,为了加快程序的响应速度,我们可以把用户的文字存入到list中,因为List是有序的结构,所以这样又可以完美的实现分页功能,从而加速了程序的相应速度。

4.Set:集合类型

Set:集合类型是一个无序并唯一的键值集合

集合类型使用场景如下:

sadd myset v1 v2 v3 :添加数据

smembers myset :查询集合中的所有数据

集合类型的经典使用场景如下:

  1. 微博关注我的人和我关注的人都适合用集合存储,可以保证人员不会重复
  2. 中奖人信息也适合用集合类型存储,这样可以保证一个人不会重复中奖

集合类型(Set)和列表类型(List)的区别如下:

  1. 列表可以存储重复元素,集合只能存储非重复元素
  2. 列表是按照元素的先后顺序存储元素的,而集合是无序方式存储元素的

5.Zset:有序集合类型

有序集合类型相比于集合类型多了一个排序属性score(分值),对于有序集合Zset来说,每个存储元素相当于两个值组成的,一个是有序结合的元素值,一个属排序值,有序集合的存储元素值也是不能重复的,但分值是可以重复的。

当我们把学生的成绩存储在有序集合中,它的存储结构如下所示:

有序集合类型的使用如下:

zadd zset1 3 golong 4 sql 1 redis:添加数据

zrange zset 0 -1 :查询所有数据

有序集合的经典使用场景如下:

  1. 学生成绩排名
  2. 粉丝列表,根据关注的先后时间排序

Spring Boot集成Redis的详细教程:

首先,我们需要创建一个Spring Boot项目。可以使用IDEA或者Eclipse等工具创建,也可以直接在命令行中使用Spring Initializr来创建。这里我们以IDEA为例,步骤如下:

  1. 打开IntelliJ IDEA,点击"Create New Project"。
  2. 选择"Spring Initializr",点击"Next"。
  3. 填写项目的基本信息,如Group、Artifact、Name等,点击"Next"。
  4. 选择需要的依赖,这里我们需要添加"Web"和"Redis"的依赖,点击"Next"。
  5. 确认项目的设置,点击"Finish",等待项目创建完成。

三、添加Redis依赖

在项目的pom.xml文件中,添加Spring Boot对Redis的支持。代码如下:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>

四、配置Redis

在application.properties文件中,配置Redis的相关信息。代码如下:

spring.redis.host=localhost
spring.redis.port=6379

五、创建Redis配置类

在项目中创建一个配置类,用于配置RedisTemplate。代码如下:

@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(factory);return template;}
}

六、使用RedisTemplate操作Redis

在需要操作Redis的地方,注入RedisTemplate,然后使用其提供的方法进行操作。代码如下:

@Service
public class UserService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;// ...其他方法...
}

七、测试Redis操作

为了测试Redis的操作,我们可以在UserService中添加一个方法,用于向Redis中添加和获取用户信息。代码如下:

@Service
public class UserService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;// ...其他方法...public void addUser(String key, User user) {redisTemplate.opsForValue().set(key, user);}public User getUser(String key) {return (User) redisTemplate.opsForValue().get(key);}
}

八、启动Spring Boot应用并测试Redis操作

启动Spring Boot应用后,我们可以使用Postman或者浏览器等工具,调用UserService的addUser和getUser方法,测试Redis的操作。如果一切正常,我们应该可以看到用户信息被正确地添加到Redis中,并且可以通过key获取到用户信息。

至此,我们已经成功地在Spring Boot项目中集成了Redis,并且可以正常使用RedisTemplate进行操作。在实际开发中,我们还可以使用Spring Data Redis提供的Repository接口,更方便地进行CRUD操作。同时,我们还可以使用Redis的发布/订阅功能,实现消息的广播和接收。

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

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

相关文章

RFID在新能源工厂大放异彩

RFID在新能源工厂大放异彩 我国在十四五规划中提出了建设绿色低碳发展的目标&#xff0c;新能源产业成为了国家发展的重点领域之一&#xff0c;开始大力支持各种新能源厂商发展。各个厂商之间不仅比产品、比技术。也比生产想要降本增效&#xff0c;为了实现这一目标&#xff0…

MBD Introduction

介绍 MATLAB是MathWorks公司的商业数学软件&#xff0c;应用于科学计算、可视化以及交互式程序设计等高科技计算环境。Simulink是MATLAB中的一种可视化仿真工具。 Simulink是一个模块图环境&#xff0c;用于多域仿真以及基于模型的设计。它支持系统设计、仿真、自动代码生成以…

Spring基于xml半注解开发

目录 Component的使用 依赖注解的使用 非自定义Bean的注解开发 Component的使用 基本Bean注解&#xff0c;主要是使用注解的方式替代原有的xml的<bean>标签及其标签属性的配置&#xff0c;使用Component注解替代<bean>标签中的id以及class属性&#xff0c;而对…

算法Day26 数位统计

数位统计 Description 给你一个整数n&#xff0c;统计并返回各位数字都不同的数字x的个数&#xff0c;其中0 ≤ x < 10^n。 Input 输入整数n 0≤n≤13 Output 输出整数个数 Sample 代码 import java.util.Scanner;public class Main {public static void main(String[] ar…

一个Oracle Application Container的实例

本例基本涵盖了Oracle Multitenant功能中application container的以下内容&#xff1a; 创建application container/root创建application PDB创建application SEED在application root中安装application在application root中升级application同步application 整个过程如下 创建…

Epoll服务器(ET工作模式)

目录 Epoll ET服务器设计思路Connection类TcpServer类 回调函数Accepter函数Recever函数Sender函数Excepter函数 事件处理套接字相关接口封装运行Epoll服务器 Epoll ET服务器 设计思路 在epoll ET服务器中&#xff0c;我们需要处理如下几种事件&#xff1a; 读事件&#xff…

基于javeweb实现的图书借阅管理系统

一、系统架构 前端&#xff1a;jsp | js | css | jquery 后端&#xff1a;servlet | jdbc 环境&#xff1a;jdk1.7 | mysql | tocmat 二、代码及数据库 三、功能介绍 01. 登录页 02. 首页 03. 图书管理 04. 读者管理 05. 图书分类管理 06. 图书借阅信息 07. 图书归还信…

CDN加速技术:降低服务器与网站成本的智慧选择

随着互联网的飞速发展&#xff0c;网站的访问量不断攀升&#xff0c;服务器负载压力逐渐增大。为了提高用户体验、降低服务器成本&#xff0c;并确保网站的高可用性&#xff0c;CDN&#xff08;内容分发网络&#xff09;加速技术应运而生。本文将从服务器与网站成本的角度分析C…

NLP项目实战01--电影评论分类

介绍&#xff1a; 欢迎来到本篇文章&#xff01;在这里&#xff0c;我们将探讨一个常见而重要的自然语言处理任务——文本分类。具体而言&#xff0c;我们将关注情感分析任务&#xff0c;即通过分析电影评论的情感来判断评论是正面的、负面的。 展示&#xff1a; 训练展示如下…

比较不同聚类方法的评估指标

归一化互信息&#xff08;NMI&#xff09; 要求&#xff1a;需要每个序列的真实标签&#xff08;分类信息&#xff09;

你在地铁上修过bug吗?

作为技术人员&#xff0c;有没有遇到下班路上收到老板电话&#xff0c;系统故障&#xff0c;然后地铁上掏出电脑&#xff0c;修bug的场景。自己负责的业务线上出现问题&#xff0c;负责人心里是很慌的&#xff0c;在这种心理状态下做事很容易二次犯错&#xff0c;造成更大的问题…

SAP UI5 walkthrough step10 Descriptor for Applications

在这一步&#xff0c;我们将会把所有的应用相关的描述性的文件独立放到manifest.json 新建一个manifest.json文件 webapp/manifest.json (New) {"_version": "1.58.0","sap.app": {"id": "ui5.walkthrough","i18n&q…

【已解决】No module named ‘sklearn‘

问题描述 No module named ‘sklearn‘ 解决办法 pip install scikit-learn 完结撒花 契约、包容、感恩、原则……这些成年人该有的基本精神&#xff0c;为什么我在他们身上找不到呢&#xff1f;

图像叠加中文字体

目录 1) 前言2) freetype下载3) Demo3.1) 下载3.2) 编译3.3) 运行3.4) 结果3.5) 更详细的使用见目录中说明 4) 积少成多 1) 前言 最近在做图片、视频叠加文字&#xff0c;要求支持中文&#xff0c;基本原理是将图片或视频解码后叠加文字&#xff0c;之后做图片或视频编码即可。…

ASP.NET Core概述-微软已经收购了mono,为什么还搞.NET Core呢

一、.NET Core概述 1、相关历程 .NET在设计之初也是考虑像Java一样跨平台&#xff0c;.NET Framework是在Windows下运行的&#xff0c;大部分类是可以兼容移植到Linux下&#xff0c;但是没有人做这个工作。 2001年米格尔为Gnome寻找桌面开发技术&#xff0c;在研究了微软的.…

数据库版本管理框架-Flyway(从入门到精通)

一、flyway简介 Flyway是一个简单开源数据库版本控制器&#xff08;约定大于配置&#xff09;&#xff0c;主要提供migrate、clean、info、validate、baseline、repair等命令。它支持SQL&#xff08;PL/SQL、T-SQL&#xff09;方式和Java方式&#xff0c;支持命令行客户端等&am…

TCP对数据的拆分

应用程序的数据一般都比较大&#xff0c;因此TCP会按照网络包的大小对数据进行拆分。 当发送缓冲区中的数据超过MSS的长度&#xff0c;数据会被以MSS长度为单位进行拆分&#xff0c;拆分出来的数据块被放进单独的网路包中。 根据发送缓冲区中的数据拆分情况&#xff0c;当判断…

ffmpeg编译问题

利用ffmpeg实现一个播放器&#xff0c;ffmpeg提供动态库&#xff0c;但是编译链接的时候遇到下面的问题&#xff1a; ../ffmpegWidgetPlayer/videoplayerwidget.cpp:23: error: undefined reference to sws_freeContext(SwsContext*) ../ffmpegWidgetPlayer/videoplayerwidget.…

JWT介绍及演示

JWT 介绍 cookie(放在浏览器) cookie 是一个非常具体的东西&#xff0c;指的就是浏览器里面能永久存储的一种数据&#xff0c;仅仅是浏览器实现的一种数据存储功能。 cookie由服务器生成&#xff0c;发送给浏览器&#xff0c;浏览器把cookie以kv形式保存到某个目录下的文本…

JavaScript 金额元转化为万

function dealNum(price){if (price 0) {return 0元}const BASE 10000const decimal 0const SIZES ["", "万", "亿", "万亿"];let i undefined;let str "";if (price) {if ((price > 0 && price < BASE…