BCSP-玄子Share-Java框基础_双系统Redis安装与基础语法

news2024/11/16 7:41:48

四、Redis

4.1 Redis 简介

Redis 是开源、高性能的key-value数据库,属于 NoSQL 数据库

NoSQL 数据库与关系型数据库

  • 关系型数据库:采用关系模型来组织数据,主要用于存储格式化的数据结构
  • NoSQL 数据库:泛指非关系型数据库,向外提供特定的 API 而不是通用的 SQL 接口,数据访问更加高效

4.1.1 Redis 的特点

  • 不仅支持简单的 string 类型数据,同时还提供 list、set、zset、hash 等数据结构的存储
  • 支持数据持久化,可以将内存中的数据保存在磁盘中
  • 支持 master-slave 模式的数据备份

4.2 Linux 安装 Redis

4.2.1 前置条件

Linux 本地体验需安装 Linux 虚拟机

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Linux 安装 Redis 需学到第 15 节

【小白入门 通俗易懂】2021韩顺平 一周学会Linux

https://www.bilibili.com/video/BV1Sv411r7vd?p=15&vd_source=3b9216711765e1ac14ef21c8216ed8eb

4.2.2 安装包

redis https://download.redis.io/releases/

请添加图片描述

选择需要的版本下载即可

4.2.3 安装教程

此处默认您已会使用 VM 虚拟机运行 Linux 系统,包括 Xshell 与 Xftp

请添加图片描述

虚拟机输入ifconfig -a获取 Linux IP 地址


外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用 Xftp 将 Redis 安装包上传到 Linux


外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用 Xshell 连接 Linux 输入ll查看上传状态

然后输入 tar -zxvf Redis 文件名 解压 Redis 压缩包

Redis 文件名输入两个字母按下 Tab 键可自动补全


外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

输入 cd 进入到解压后的 Redis 目录


外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因为 Redis 使用 C 编写,所以需安装 GCC 依赖

输入yum install -y gcc

这里的-y表示一键安装


外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

安装完成后输入gcc -v校验安装

再输入make install 安装 Redis


外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

输入cd utils进入到utlis目录


外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

输入./install_server.sh执行脚本

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里可能会出现报错,打开脚本注释以下内容后重新执行

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

执行脚本可对 Redis 进行设置,无特殊需求直接回车结束即可


4.2.4 校验

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.3 Windows 安装 Redis

4.3.1 安装包

Redis for Windows 5.0.14.1 https://github.com/tporadowski/redis/releases/tag/v5.0.14.1

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Redis 7.0.11 for Windows https://github.com/zkteco-home/redis-windows/releases/tag/7.0.11

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.3.2 安装教程

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

选择安装路径,并勾选下方选项,将 Redis 添加到系统环境变量


外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这个是 Redis 默认的端口号,无特殊需求不用改


外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

设置最大内存限制,无特殊需求不用改


4.3.3 校验

键盘按下 Win + R 输入 cmd打开命令提示符,输入以下指令

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.3.4 RedisDesktopManager

RedisDesktopManager https://github.com/RedisInsight/RedisDesktopManager/releases/tag/2022.5

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

请添加图片描述

4.4 Linux 配置 Redis

4.4.1 环境配置

设置内存分配策略

echo 1 > /proc/sys/vm/overcommit_memory

开放Redis端口

  • 配置防火墙开放6379端口
  • 重启防火墙使规则生效

4.4.2 配置文件

设置Redis配置文件redis.conf

  • 设置Redis服务可以监听的请求IP地址,多个IP地址使用空格分隔
bind  127.0.0.1  ::
  1. bind 0.0.0.0或使用 # 将bind指令注释掉,则可监听所有IP地址的请求
  2. 如果Redis服务运行于Internet上,建议仅绑定应用相关的客户端IP地址
  • 设置Redis监听端口,默认是6379
port  6379
  • 设置Redis访问密码,默认不需要密码
requirepass  123456

由于Redis的高性能特性,可以在很短的时间内并行尝试大量密码,因此应使用一个高强度的密码

  • 设置Redis是否作为守护进程运行,默认no
daemonize  yes
  • 设置Redis的日志文件路径,默认"",不生成日志文件
logfile  "/usr/local/redis-3.2.8/log/redis.log"
  • 设置Redis数据库数量,默认是16
databases  16
  1. Redis中不同的可选数据库以命名空间的形式管理,数据文件是同一个2. Redis划分数据库主要用于在必要的情况下分隔同一应用中存储的key(不同数据库中可以使用相同名称的key),而不是为了区分多个应用
  • 设置Redis的工作目录(即Redis的数据文件的存储目录),默认为 ./,即在Redis安装目录下
dir  /data/redisdata/

4.4.3 启动Redis服务

  • 执行Redis安装目录下bin目录中的redis-server命令
cd  /usr/local/redis-3.2.8/
./bin/redis-server  ./etc/redis.conf

启动Redis服务所依据的配置文件

注意daemonize指令设置为no或yes的区别

  • 可以使用tail命令跟踪Redis日志信息
tail  -F  /usr/local/redis-3.2.8/log/redis.log
  1. daemonize为no时,可以另外开启一个会话连接至Redis服务器,并在此会话中跟踪Redis日志内容的变化2. 如果Redis的日志文件路径为默认的 logfile “”,则不会创建日志文件,daemonize为yes时,日志信息会直接输出在控制台中

4.4.4 启动Redis客户端

执行Redis安装目录下bin目录中的redis-cli命令

redis-cli  [选项]
选项说明
-h <hostname>服务器主机地址,默认为127.0.0.1
-p <port>服务端口,默认为6379
-a <password>Redis服务访问密码
-n <dbid>所要连接的数据库的id,默认为0
### 连接到本地Redis服务中dbid为0数据库
cd  /usr/local/redis-3.2.8/
./bin/redis-cli

4.5 Windows 配置 Redis

Windows 版 Redis 不支持 daemonize 参数

  • MSI 软件包可以直接将 Redis 安装成 Windows 服务,并通过 redis.windows-service.conf 文件配置其他参数
  • 解压版 Redis 需通过命令将 redis-server.exe 注册为服务
// 进入到Redis的安装目录下执行
redis-server  --service-install  redis.windows.conf  --loglevel  verbose

其他配置参数、使用方式与 Linux 版相同

4.6 Redis常用命令

4.6.1 认证和退出操作

auth

  • 请求进行身份验证
  • 如果password与配置文件中的密码匹配,则返回OK状态代码并开始接受命令。否则返回错误quit要求服务器关闭连接
auth  password

quit

  • 要求服务器关闭连接

4.6.2 键值对操作

set

  • 设置key以保存value(string类型)
  • set正确执行,返回字符串OK。未执行set操作,则返回空回复nil
set  key  value  [ex  seconds | px  milliseconds]  [nx | xx]
  • ex:设置指定的过期时间seconds,以秒为单位
  • px:设置指定的过期时间milliseconds,以毫秒为单位
  • nx:仅在key不存在时设置该key(只创建、不覆盖)
  • xx:仅在key已存在时设置该key(只覆盖、不创建)

get

  • 获取key对应value
  • 如果key不存在,则返回特殊值nil。如果存储在key中的值不是字符串,则返回错误,因为get仅处理字符串值
get  key

4.6.3 key 操作

exists

  • 判断指定的key是否存在
  • 从Redis 3.0.3开始,可以指定多个key
  • 仅指定一个key时,key存在返回1,不存在返回0。
  • 指定多个key时,返回存在的key的总数
exists  key1  [key2  ...]

keys

  • 返回和pattern(模式)匹配的所有key
keys  pattern

支持的常用模式如下

  • h?llo :匹配单个字符,如hello,hallo,hxllo等
  • h*llo:匹配任意字符,如hllo,heeeello等
  • h[ae]llo:包含一个指定字符,如hello或hallo
  • h[^ae]llo:包含除指定字符外的一个字符,如hbllo,hcllo等,不包括hallo和hello
  • h[a-c]llo:匹配指定范围内的一个字符,如hallo,hbllo,hcllo
  • 如需匹配以上模式中特殊字符,需要使用\转义

del

  • 删除指定的key
  • 返回已删除的key的数量。如果key不存在则忽略该key
del  key1  [key2  ...]

rename

  • 将key重命名为newkey如果newkey已经存在则会被覆盖(此时rename执行隐式del操作)
  • 若key不存在返回错误
rename  key  newkey

4.6.4 生命周期操作

expire

  • 在key上设置超时时间timeout,时间以秒为单位
  • 设置成功返回1,key不存在返回0
expire  key  timeout

ttl

  • 以秒为单位返回key的剩余生存时间
  • Redis 2.8及以上版本,key未设置超时时间返回-1,key不存在返回-2
  • Redis 2.6及以下版本,未设置超时时间和key不存在均返回-1
ttl  key

persist

  • 删除key上现有的超时设置,使key变为永久有效
  • 超时设置被删除,返回1
  • key不存在或没有关联的超时设置,返回0
persist  key

4.6.5 数据库操作

select

  • 选择具有指定dbid的Redis逻辑数据库
select  dbid

flushdb

  • 删除当前所选数据库中的所有key

flushall

  • 删除所有现有数据库中的所有key,而不仅仅是当前选定的数据库

4.7 Java 访问 Redis

Jedis 在 Java 应用中实现 Redis 客户端的功能

  • 下载 Jedis 依赖
  • 下载 Apache Commons Pool 2 组件

Jedis 的使用

  • JedisPoolConfig:连接池配置对象
    • maxTotal:最大活动连接数,默认为8。-1表示不限制
    • maxIdle:最大空闲连接数,默认为8
    • minIdle:最小空闲连接数,默认为0
    • maxWaitMillis:从池中获取一个资源时的最大等待时间,单位是毫秒,-1表示永不超时
    • testOnBorrow:在从池中获取一个资源时,是否提前进行验证操作
  • JedisPool:连接池对象
  • Jedis:封装Redis访问API的核心类

4.7.1 代码案例

  • 普通连接
public class Xz01 {
    public static void main(String[] args) {
        Jedis redis = new Jedis("localhost", 6379);
        System.out.println(redis.ping());

    }
}
  • 数据池连接

先打 jar 包

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>5.0.0-beta2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-pool2 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.11.1</version>
</dependency>
  • 工具类
public class JedisAPI {
    private static final JedisPool jedisPool;

    static {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(50);
        jedisPoolConfig.setMaxIdle(10);
        jedisPoolConfig.setMinIdle(7);
        jedisPoolConfig.setMaxWaitMillis(10000);
        jedisPoolConfig.setTestOnBorrow(true);
        jedisPool = new JedisPool(jedisPoolConfig, "localhost", 6379, 10000);
//      ,"0207",0
    }


    public boolean set(String key, String value) {
        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();
            jedis.set(key, value);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }

    public String get(String key) {
        Jedis jedis = null;
        String value = null;
        try {
            jedis = jedisPool.getResource();
            value = jedis.get(key);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
        return value;
    }

    public void destroy() {
        if ((jedisPool != null) || jedisPool.isClosed()) {
            jedisPool.close();
        }
    }

    public String ping() {
        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();
            return jedis.ping();
        } catch (Exception e) {
            e.printStackTrace();
            return "false";
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }
}
  • 调用代码
public class Xz02 {
    public static void main(String[] args) {
        JedisAPI jedisAPI = new JedisAPI();
        String set = jedisAPI.ping();
        System.out.println(set);
        jedisAPI.destroy();
    }
}

玄子Share - Java 开发之框架基础技术 8.2

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

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

相关文章

力扣|找出和所对应的两数的下标

从零开始刷力扣&#xff08;bushi 题目放在这&#xff1a; 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出和为目标值target的两个整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一…

数电发票开票接口

全电发票&#xff0c;也叫数电发票&#xff0c;全称为全面数字化的电子发票。数电发票是依托可信身份体系和电子发票服务平台&#xff1b;以去介质、去版式、标签化、要素化、授信制、赋码制为基本特征&#xff1b;覆盖全领域、全环节、全要素的全新发票。与纸质发票具有同等法…

tkinter控件样式

文章目录 以按钮为例共有参数动态属性 tkinter系列&#xff1a; GUI初步&#x1f48e;布局&#x1f48e;绑定变量&#x1f48e;绑定事件&#x1f48e;消息框&#x1f48e;文件对话框&#x1f48e;控件样式扫雷小游戏&#x1f48e;强行表白神器 以按钮为例 tkinter对控件的诸…

05-Redis

1、Redis为什么快&#xff1f; 1、纯内存操作 2、单线程可以省去多线程时CPU上下文会切换的时间 3、渐进式ReHash、缓存时间戳 数组需要扩容的时候&#xff0c;他会维护两张hash表&#xff0c;比如第一张的数组长度为6&#xff0c;另一张的数组长度为12&#xff0c;在set和g…

JavaScript中的事件循环(event loop)机制

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 调用栈&#xff08;Call Stack&#xff09;⭐ 消息队列&#xff08;Message Queue&#xff09;⭐ 事件循环&#xff08;Event Loop&#xff09;⭐ 宏任务和微任务⭐ 示例⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇…

如何取消KEIL-MDK工程中出现的CMSIS绿色图标

如何取消KEIL-MDK工程中出现的CMSIS绿色图标&#xff1f;我以前经常遇到&#xff0c;不知道怎么搞&#xff0c;好像也不影响编译结果。以前问过其他人&#xff0c;但是不知道怎么搞&#xff0c;相信很多人也遇到过。水平有限&#xff0c;表达不清楚&#xff0c;见下图&#xff…

Java 反射调用自己写的对象方法

一、java 反射的定义 定义&#xff1a;JAVA反射机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意一个方法&#xff0c;这种动态获取、调用对象方法的功能称为java语言的…

JavaScript 中的原型到底该如何理解?

JavaScript作为一个基于原型的OOP&#xff0c;和我们熟知的基于类的面向对象编程语言有很大的差异。如果不理解其中的本质含义&#xff0c;则无法深入理解JavaScript的诸多特性&#xff0c;以及由此产生的诸多“坑”。在讨论“原型”的概念之前&#xff0c;我们先来讨论一下“类…

APS系统设计经验分享(时间推导II - 2023.09)

在前一篇关于APS系统设计分享文章(《APS系统设计经验分享(时间推导 - 2023.03)》)中&#xff0c;我们提到将会分享使用OptaPlanner作为规划引擎开发APS系统过程中&#xff0c;遇到的一些时间相关的设计建议与异常情况分析。后来一直忙于项目工作&#xff0c;直到现在才想起仍欠…

CSS---flex布局

主要记录flex布局的要点以及实例 flex flex父标签的6个属性flex-direction: flex布局的方向flex-wrap: 是否可以换行flex-flow: flex-direction 和 flex-wrap 一起写justify-content&#xff1a;横向对齐方式align-items: 纵向对齐方式align-content: 有换行情况下的纵向对齐方…

DR IP-SoC China 2023 Day演讲预告 | 龙智Perforce专家解析芯片开发中的数字资产管理

2023年9月6日&#xff08;周三&#xff09;&#xff0c;龙智即将亮相于上海举行的D&R IP-SoC China 2023 Day&#xff0c;呈现集成了Perforce与Atlassian产品的芯片开发解决方案&#xff0c;助力企业更好、更快地进行芯片开发。 D&R IP-SoC China 2023 Day 是中国首个…

[论文笔记]ESIM

引言 这是经典论文Enhanced LSTM for Natural Language Inference的笔记。 本篇论文文是建立在自然语言推理(Natural Language Inference,NLI)任务上的。提出了简单的通过基于LSTM的序列推理模型效果到达了当时的SOTA水平。同时基于该模型,在局部推理建模层和推理组合层使用了…

三维模型OBJ格式轻量化压缩在大规模场景的加载和渲染的作用分析

三维模型OBJ格式轻量化压缩在大规模场景的加载和渲染的作用分析 OBJ格式是一种常用的三维模型文件格式&#xff0c;它存储了三维模型的几何信息和纹理坐标等相关属性。在大规模场景中加载和渲染三维模型时&#xff0c;OBJ格式的轻量化压缩对于提高性能和效率起到了重要的作用。…

Java多线程(Thread)详解之启动与中断

在我的前一篇博客中直接介绍了Thread的”五种“打开方式&#xff1a;Thread的”五种“打开方式https://blog.csdn.net/qq_45875349/article/details/132644717?spm1001.2014.3001.5501 但是还没有详细的对Thread类进行说明&#xff0c;这篇博客主要对Thread类进行介绍&#x…

软件产品选型测试POC测试怎么做?

软件poc测试 一、基本概述 软件选型测试是在软件采购的前提或采购过程中&#xff0c;通过对待选软件进行测试比对&#xff0c;筛选出适合的软件。通过对候选的软件进行量化或非量化的横向比对测试&#xff0c;为建设单位选择产品、供货方参加投标提供较直接的依据。 二、测试…

现在的校招面试,管你是不是应届生

作者&#xff1a;小傅哥 博客&#xff1a;https://bugstack.cn 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; 一、他&#xff0c;上来打我&#xff01; 【字节】除了MQ解耦发奖&#xff0c;是否还有比MQ更优的解决方案&#xff1f;【字节】…

算法通关村16关 | 堆与滑动窗口问题结合

1. 堆与滑动窗口问题结合 题目 LeetCode239 给你一个整数数组nums&#xff0c;有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧&#xff0c;你可以看到在滑动窗口内的k个数字&#xff0c;滑动窗口每次只向右移动一位&#xff0c;返回滑动窗口中的最大值。 思路 对于…

css 文字单行多行超出长度后显示 ...

0.超出… 1、单行文本超出 <div class"content">测试数据&#xff1a;css单行文本超出显示省略号--------</div><style> .content{width: 200px;height: 200px;overflow:hidden;white-space: nowrap;text-overflow: ellipsis;-o-text-overflow:el…

linux信号量

通过学习linux的信号量&#xff0c;对linux的信号量进行了编程。

QT(9.4)tcp通信,数据库,opencv,

作业&#xff1a; 1.服务器 头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpSocket>//客户端头文件 #include <QMessageBox>//消息对话框头文件 #include <QTcpServer>//服务器头文件 #include <list>…