Redis从入门再再到入门(下)

文章目录

    • 1.Redis远程连接
      • 1.1 Redis远程连接配置
      • 1.2 通过桌面版图形化界面连接Redis
      • 1.3 通过IDEA中的插件连接Redis
    • 2.Jedis的基本使用
      • 2.1 jedis概述
      • 2.2 jedis的基本操作
      • 2.3 jedis连接池
    • 3.Spring整合Redis
      • 3.1 新建maven工程,引入相关依赖
      • 3.2 redis.properties
      • 3.3 spring-redis.xml
      • 3.4 Redis工具类Redisutils
      • 3.5 测试RedisUtils

1.Redis远程连接

1.1 Redis远程连接配置

修改redis配置文件

vim /home/redis-6.2.9/redis.conf 

image-20240830160709678

image-20240830160757950

重启服务

./redis-cli -a 123456 shutdown
./redis-server /home/redis-6.2.9/redis.conf 

image-20240830161021435

如果开启防火墙,需要通过执行以下命令,开放6379端口

firewall-cmd --zone=public --add-port=6379/tcp --permanentsystemctl restart firewalld.servicefirewall-cmd --reload

1.2 通过桌面版图形化界面连接Redis

使用2019.5版的redis-desktop-manager,因为这个是免费版本,最新的版本需要收费

1725006148804

select id:切换到No.id的库

1.3 通过IDEA中的插件连接Redis

有收费的和免费的。遵循性价比原则,优先选择免费的使用,毕竟现在还在学习阶段。如果后期有需求的话,再做考虑。(当然免费的插件相比于收费的插件,功能会有所欠缺)

如果不想使用插件,完全可以使用redis-desktop-manager桌面版图形化工具

1725007182125

安装完成之后,会在右侧工具栏显示工具图标

image-20240830164311536

如果没有显示的话,可以选择View -> Tool Windows -> Redis Helper进行显示

image-20240830164434769

将所有信息填写好之后,点击TEST CONNECTION,收到Succeeded表示连接成功后,再点击OK

image-20240830164838175

image-20240830165007680

2.Jedis的基本使用

2.1 jedis概述

Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如java、C、C#、C++、php、Node.js、Go等。 在官方网站里列一些Java的客户端,有Jedis、Redisson、Jredis、JDBC-Redis、等其中官方推荐使用Jedis和Redisson。java操作redis的第三方类库:jedis、

2.2 jedis的基本操作

引入依赖

<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!-- jedis相关依赖 --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version></dependency></dependencies>
方法解释
new Jedis(host, port)创建jedis对象,参数host是redis服务器地址,参数port是redis服务端口
set(key, value)设置字符串类型的数据
get(key)获得字符串类型的数据
hset(key, filed, value)设置哈希类型的数据
hget(key, filed)获得哈希类型的数据
lpush(key, values)设置列表类型的数据
lpop(key)列表左面弹栈
rpop(key)列表右面弹栈
del(key)删除指定的key
/*** jedis中的方法名和redis中的命令是对应的*/
public class JedisDemo01 {private Jedis jedis;@Beforepublic void init() {// 1.通过jedis的构造方法设置连接参数jedis = new Jedis("192.168.x.x", 6379);// 2.设置连接密码jedis.auth("123456");// 3.选择索引为2的数据库,默认操作索引为0的数据库jedis.select(2);}/*** 存取set类型*/@Testpublic void test01() {// 4.存入String类型的数据jedis.set("name", "Satellite");// 5.取出key为name的valueSystem.out.println(jedis.get("name"));}/*** 存取hash类型*/@Testpublic void test02() {// 4.存入hash类型的数据jedis.hset("1班", "20101515131", "张三");jedis.hset("1班", "20101515142", "李四");jedis.hset("2班", "20101515241", "王五");// 5.取出key为1班的valueSystem.out.println(jedis.hget("2班", "20101515241"));jedis.hgetAll("1班").forEach((k, v) -> System.out.println(k + " " + v));}/*** 存取list类型*/@Testpublic void test03() {// 4.存入hash类型的数据jedis.lpush("myList", "a", "b", "c", "d");// 5.取出key为myList的valuejedis.lrange("myList", 0, -1).forEach(System.out::println);}/*** 存取去重set类型*/@Testpublic void test04() {// jedis.del("mySet");jedis.sadd("mySet", "Satellite", "Planet", "Wang", "Wang");jedis.smembers("mySet").forEach(System.out::println);}@Afterpublic void release() {// 6.释放资源jedis.close();}
}

2.3 jedis连接池

jedis连接资源的创建与销毁是很消耗程序性能,所以jedis为我们提供了jedis的池化技术,jedisPool在创建时初始化一些连接资源存储到连接池中,使用jedis连接资源时不需要创建,而是从连接池中获取一个资源进行redis的操作,使用完毕后,不需要销毁该jedis连接资源,而是将该资源归还给连接池,供其他请求使用

参数名含义
blockWhenExhausted连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true
evictionPolicyClassName设置的逐出策略类名, 默认DefaultEvictionPolicy(当连接超过最大
空闲时间,或连接数超过最大空闲连接数)
lifo是否启用后进先出, 默认true
maxIdle最大空闲连接数, 默认8个
maxTotal最大连接数, 默认8个
maxWaitMillis获取连接时的最大等待毫秒数(如果设置为阻塞时
BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间, 默认-1
minEvictableIdleTimeMillis逐出连接的最小空闲时间 默认1800000毫秒(30分钟)
minIdle最小空闲连接数, 默认0
testOnBorrow在获取连接的时候检查有效性, 默认false
package jedis;import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;/*** 通过JedisPool连接redis,提高连接效率*/
public class JedisPoolDemo02 {@Testpublic void test01() {// 1.初始化连接池相关配置JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();jedisPoolConfig.setMaxTotal(20);jedisPoolConfig.setMaxIdle(5);// 2.使用连接池的配置,初始化连接池JedisPool jedisPool = new JedisPool(jedisPoolConfig, "192.168.170.140", 6379, 1000, "123456");// 3.获取jedis对象,来操作redisJedis jedisPoolResource = jedisPool.getResource();// 4.通过jedis对象操作redisjedisPoolResource.set("gender", "female");System.out.println(jedisPoolResource.get("gender"));// 5.释放资源jedisPoolResource.close();jedisPool.close();}
}

3.Spring整合Redis

3.1 新建maven工程,引入相关依赖

    <dependencies><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.8.2</version><scope>test</scope></dependency><!-- 引入spring相关依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>5.3.20</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.3.20</version></dependency><!-- 引入jedis相关依赖 --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version></dependency><!-- 引入spring-data-redis相关依赖 --><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><version>1.8.14.RELEASE</version></dependency><!-- 日志相关的依赖 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.36</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>1.7.36</version></dependency></dependencies>

3.2 redis.properties

# redis连接参数
redis.host=192.168.x.x
redis.port=6379
redis.password=123456
redis.dbIndex=3 
# jedisPool相关参数
redis.maxTotal=20
redis.maxIdle=5
redis.timeout=10000

3.3 spring-redis.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!-- 配置注解扫描器 --><context:component-scan base-package="io.redis"/><!-- 加载redis.properties配置文件 --><context:property-placeholder location="classpath:redis.properties"/><!-- 配置JedisPoolConfig --><bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"><property name="maxTotal" value="${redis.maxTotal}"/><property name="maxIdle" value="${redis.maxIdle}"/></bean><!-- 配置JedisConnectionFactory --><bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"><!-- 注入redis相关配置 --><property name="hostName" value="${redis.host}"/><property name="port" value="${redis.port}"/><property name="password" value="${redis.password}"/><property name="database" value="${redis.dbIndex}"/><property name="timeout" value="${redis.timeout}"/><!-- 注入连接池配置 --><property name="poolConfig" ref="jedisPoolConfig"/></bean><!-- 配置redis操作模板RedisTemplate,通过这个模板操作redis数据库 --><bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer"/><bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"><property name="connectionFactory" ref="jedisConnectionFactory"/><!-- 指定序列化器,解决redis中key乱码问题 --><property name="keySerializer" ref="stringRedisSerializer"/><property name="valueSerializer" ref="stringRedisSerializer"/><property name="hashKeySerializer" ref="stringRedisSerializer"/><property name="hashValueSerializer" ref="stringRedisSerializer"/></bean></beans>

3.4 Redis工具类Redisutils

package io.redis.utils;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;import java.util.concurrent.TimeUnit;/*** Redis工具类,为了方便操作redis*/
@Component
public class RedisUtils {@AutowiredRedisTemplate<String, Object> redisTemplate;/*** 向redis中存入string类型数据** @param key* @param value* @return*/public boolean set(String key, Object value) {try {redisTemplate.opsForValue().set(key, value);} catch (Exception e) {e.printStackTrace();return false;}return true;}/*** 根据key取出redis中的string数据** @param key* @return*/public Object get(String key) {return StringUtils.isEmpty(key) ? null : redisTemplate.opsForValue().get(key);}/*** 向redis中存入hash类型数据** @param key* @param field* @param value* @return*/public boolean hset(String key, Object field, Object value) {try {redisTemplate.opsForHash().put(key, field, value);} catch (Exception e) {e.printStackTrace();return false;}return true;}/*** 根据key和filed取出redis中的hash数据** @param key* @return*/public Object hget(String key, Object filed) {return StringUtils.isEmpty(key) ? null : redisTemplate.opsForHash().get(key, filed);}/*** 通用方法:根据key删除redis中对应的数据** @param key* @return*/public boolean del(String key) {try {redisTemplate.delete(key);} catch (Exception e) {e.printStackTrace();return false;}return true;}/*** 通用方法:判断key是否存在** @param key* @return*/public boolean exist(String key) {try {return redisTemplate.hasKey(key);} catch (Exception e) {e.printStackTrace();return false;}}/*** 为某个key设置过期时间** @param key* @param timeout* @return*/public boolean expire(String key, long timeout) {try {return redisTemplate.expire(key, timeout, TimeUnit.SECONDS);} catch (Exception e) {e.printStackTrace();return false;}}/*** 查看key的剩余存活时间** @return*/public long ttl(String key) {return redisTemplate.getExpire(key, TimeUnit.SECONDS);}}

3.5 测试RedisUtils

package io.redis.utils;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;import static org.junit.jupiter.api.Assertions.*;@SpringJUnitConfig(locations = "classpath:spring-redis.xml")
class RedisUtilsTest {@AutowiredRedisUtils redisUtils;@Testvoid set() {redisUtils.set("name", "Satelite");}@Testvoid get() {System.out.println(redisUtils.get("name"));}}

image-20240831183803691

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

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

相关文章

Python基础性知识(中部分)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言1、Python中的语句1.1 顺序语句1.2 条件语句1.3 循环语句1.3.1 while循环1.3.2 for循环1.3.3 break与continue语句 1.4 综合三大语句制作小游戏--人生重开模拟器…

算法设计与分析:实验五 图论——桥问题

实验内容&#xff1a; 1. 桥的定义 在图论中&#xff0c;一条边被称为“桥”代表这条边一旦被删除&#xff0c;这张图的连通块数量会增加。等价地说&#xff0c;一条边是一座桥当且仅当这条边不在任何环上。一张图可以有零或多座桥。 2. 求解问题 找出一个无向图中所有的桥…

若依,前后端分离项目,部署到服务器

1.后端项目用maven打包 正式服的话&#xff0c;测试不用加。 application.yml加上context-path: /prod-api 一定要选择root的ruoyi&#xff0c;他会把你自动打包其他模块的依赖 全部成功。然后去ruoyi-admin拿到这个包&#xff0c;java -jar ruoyi-admin.jar就可以了 将jar上…

Linux上启动redis

1.默认启动方式:在系统的任意位置执行 redis-server即可启动 ps:这是前端界面启动&#xff0c;无法直接连接redis&#xff0c;想要连接的话只能另外启动一个窗口&#xff0c;因此下面我们介绍后台启动redis 2.指定配置启动&#xff1a; redis的配置文件位置&#xff1a…

数学建模--皮尔逊相关系数、斯皮尔曼相关系数

目录 1.总体的皮尔逊相关系数 2.样本的皮尔逊相关系数 3.对于皮尔逊相关系数的认识 4.描述性统计以及corr函数 ​编辑 5.数据导入实际操作 6.引入假设性检验 6.1简单认识 6.2具体步骤 7.p值判断法 8.检验正态分布 8.1jb检验 8.2威尔克检验&#xff1a;针对于p值进行…

Java基础(6)- Java代码笔记3

目录 一、二维数组 1.二维数组定义 a.动态初始化 b.静态初始化 c.简单静态初始化 2.获取数组长度 二、方法 1.无参无返回值方法 2.有参无返回值方法 3.无参有返回值方法 4.有参有返回值方法 5.形式参数和实际参数 6.三层架构思想 7.方法注意事项 8.数组作为方法…

深度强化学习算法(六)(附带MATLAB程序)

深度强化学习&#xff08;Deep Reinforcement Learning, DRL&#xff09;结合了深度学习和强化学习的优点&#xff0c;能够处理具有高维状态和动作空间的复杂任务。它的核心思想是利用深度神经网络来逼近强化学习中的策略函数和价值函数&#xff0c;从而提高学习能力和决策效率…

8.30工作笔记

要做的事情&#xff1a; 1 测试剩下的三个因子&#xff1a;coppock 潮汐因子 云开雾散 2 整理需要时间序列的因子 以及截面因子 3 灾后重建多了一列&#xff0c;灾后重建’所有值都是nan&#xff0c;这里不仅是灾后重建&#xff0c;所有的都要改 4 coppock 潮汐因子 云开雾散在…

【Qt】菜单栏

目录 菜单栏 例子&#xff1a;创建菜单栏、菜单、菜单项 例子&#xff1a;给菜单设置快捷键 例子&#xff1a;给菜单项设置快捷键 例子&#xff1a;添加子菜单 例子&#xff1a;添加分隔线 例子&#xff1a;添加图标 菜单栏 Qt中的菜单栏是通过QMenuBar这个类实现的&…

MySQL:复合查询

MySQL&#xff1a;复合查询 聚合统计分组聚合统计group byhaving 多表查询自连接子查询单行子查询多行子查询多列子查询from子查询 合并查询unionunion all 内连接外连接左外连接右外连接全外连接 视图 MySQL 复合查询是数据分析和统计的强大工具&#xff0c;本博客将介绍如何使…

当AI遇上制药:加速跑向未来的快车道,还是布满荆棘的征途?

01 在全球科技领域&#xff0c;AI的崛起无疑掀起了一场变革的风暴&#xff0c;其影响力已渗透至各行各业&#xff0c;促使各领域积极寻求与AI技术的深度融合&#xff0c;以提升效率、创新产品及优化服务。在医疗健康领域&#xff0c;AI与制药的结合自2007年起航&#xff0c;历…

第八周:机器学习

目录 摘要 Abstract 一、注意力机制V.S.自注意力机制 1、引入 2、注意力机制 3、自注意力机制 二、自注意力机制 1、输入 2、输出 3、序列标注 4、Multi-head Self-attention 5、比较 总结 摘要 前两周学习了CNN的基本架构&#xff0c;针对全局信息的考虑问题&…

行为识别实战第二天——Yolov5+SlowFast+deepsort: Action Detection(PytorchVideo)

Yolov5SlowFastdeepsort 一、简介 YoloV5SlowFastDeepSort 是一个结合了目标检测、动作识别和目标跟踪技术的视频处理框架。这一集成系统利用了各自领域中的先进技术&#xff0c;为视频监控、体育分析、人机交互等应用提供了一种强大的解决方案。 1. 组件说明&#xff1a; Y…

如何通过住宅代理进行高效SSL检查

引言 什么是SSL检查&#xff1f;有哪些内容&#xff1f; 为什么要使用SSL检查&#xff1f; SSL检查是如何进行的&#xff1f; 总结 引言 在现代互联网环境中&#xff0c;SSL/TLS协议已成为确保网络通信安全的基石。随着网络攻击手段的不断演进&#xff0c;仅仅依赖于基础的…

数据中心和算力中心的区别

数据中心&#xff08;Data Center&#xff09;和算力中心&#xff08;Computing Power Center 或 HPC Center&#xff09;虽然都涉及数据处理和存储&#xff0c;但它们的重点和用途有所不同。下面将详细介绍两者之间的区别&#xff1a; 数据中心&#xff08;Data Center&#x…

torch、torchvision、torchtext版本兼容问题

1、torch与torchtext版本兼容 参考torchtext PyPI 2、 torch与torchvision版本兼容 参考torchvision PyPI

【最新华为OD机试E卷】最长连续方波信号(200分)-多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-E/D卷的三语言AC题解 💻 ACM金牌🏅️团队| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,…

从跟跑到领跑:AIGC时代国产游戏的崛起与展望

引言 在人工智能技术快速发展的背景下,AIGC(人工智能生成内容)时代的到来正在重新定义游戏产业的未来。人工智能技术,尤其是生成对抗网络(GAN)、自然语言处理(NLP)、深度学习等领域的突破,正在为游戏开发带来前所未有的机会和挑战。这些技术不仅改变了游戏内容的创作…

51单片机-定时器介绍

时间&#xff1a;2024.8.31 作者&#xff1a;Whappy 目的&#xff1a;手撕51 代码&#xff1a; 现象&#xff1a;

UnrealEngine学习(01):安装虚幻引擎

1. 下载安装 Epic Games 目前下载UE引擎需要先下载Epic Games&#xff0c;官网为我们提供了下载路径&#xff1a; https://www.unrealengine.com/zh-CN/downloadhttps://www.unrealengine.com/zh-CN/download 我们点击图中步骤一即可进行下载。 注释&#xff1a;Unreal Engi…