Redis入门:在Java程序中高效使用Redis
准备工作
下载windows版的Redis(自行查找网络资源)
解压到指定文件夹
如图所示:Redis的目录结构
- redis本质上也是一个数据库,只不过经常被用作缓存 。
- redis分为服务端和客户端,先启动服务器redis-server,在使用redis-cli命令行连接服务器。
基于配置文件启动redis服务器
如果我们自定义了redis服务器的相关配置,例如最大连接数,数据库总数等,需要以指定配置文件的方式启动redis服务器,可以进行以下配置。
在redis的目录中新建一个文件startup.cmd,用记事本或其他文本编辑工具打开,然后写入以下内容:
redis-servle redis.windows.conf
双击这个cmd文件,启动redis服务器
显示redis服务器的基本信息,如端口(port:6379)等。
在Java程序中使用Redis
在Java中使用redis工具,要先下载jedis.jar包,把它加载到工厂的路径中,如果使用的maven项目,直接添加对应的依赖坐标即可。
pom.xml
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version></dependency>
在测试类中连接redis测试
/*** Unit test for simple App.*/
public class AppTest{@Testpublic void jedisTest(){Jedis jedis=new Jedis("localhost",6379);int i=0;//记录次数try{long start = System.currentTimeMillis();while (true){long end = System.currentTimeMillis();if (end-start>=1000){break;}i++;jedis.set("test"+i,i+"Jedis");}}finally {jedis.close();}System.out.println("redis每秒操作:"+i+"次");}}
以上代码的含义:
- 获取连接redis服务器的Jedis对象
- 先获取当前时间的毫秒值
- 进行死循环,当时间过去1秒时,停止循环
- 在这1秒内向redis服务器中存入数据
- 输出redis存入了多少条数据
运行结果:
每个人的电脑的执行次数都是不同的,我这里显示的是我执行效果最好的一次,通常我的只有3万5千次。其实redis的速度不仅仅如此,比这快的多,这里较慢的原因是我们只是一条条地将命令发送给redis去执行。如果使用流水线技术它的速度回快得多,将可以达到10万次每秒的操作,十分有利于系统性能的提高。
可以看出redis的写数据的速度是非常快的:
本质原因有三点:
- 它是基于ANSI C语言编写的,接近于汇编语言的机器语言,运行十分快速
- 它是基于内存读/写,速度比数据库的磁盘读/写要快的多
- 它的数据库结构只有6种数据类型,数据结构简单,因此规则较少,而数据库则是范式,完整性、规范性需要考虑的规则比较多,处理业务会比较复杂
扩展
向MySQL数据库写数据
我利用mybatis想mysql数据库插入新的数据,具体代码不给出,主要观察执行效果以及和redis的对比
测试类
package com.csx;import com.csx.dao.UserDao;
import com.csx.entity.User;
import com.csx.util.SqlSessionFactoryUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.data.redis.core.RedisTemplate;
import redis.clients.jedis.Jedis;/*** Unit test for simple App.*/
public class AppTest{private SqlSession sqlSession= SqlSessionFactoryUtil.getSessionSql();@Testpublic void testMybatis(){UserDao userDao = sqlSession.getMapper(UserDao.class);int i=0;//记录次数long start = System.currentTimeMillis();while (true){long end = System.currentTimeMillis();if (end-start>=1000){break;}i++;User user =new User();user.setName("User"+i+"-vip");user.setAge(i);userDao.insertUser(user);}System.out.println("Mysql每秒操作:"+i+"次");}}
代码逻辑和redis进行的操作一样,这里是向mysql数据库在1秒内插入的数据数量
执行效果
可以看的出来mysql相比于redis,写入数据的效率低太多。因此mysql适合持久化数据,而redis通常用来作为缓存使用
相关文章:

Redis入门:在Java程序中高效使用Redis
准备工作 下载windows版的Redis(自行查找网络资源) 解压到指定文件夹 如图所示:Redis的目录结构 redis本质上也是一个数据库,只不过经常被用作缓存 。redis分为服务端和客户端,先启动服务器redis-server,在…...

活着就好20241021
今日提醒:2024年10月21日,星期一,已是开工第247天。早安,摸鱼界的同仁们! 健康警钟:即便工作繁忙,也别忘了关爱自己。起身走走,茶水间、厕所、廊道都是好去处,毕竟&…...

阿里字节技术管理岗位面试要求
在阿里巴巴等互联网公司,技术管理岗(如技术团队负责人 TL 或 P8/P9 级别的职位)面试具有较高的技术要求和管理能力的考核。面试的问题和侧重点通常包括技术深度、架构设计、团队管理、项目推动等多方面。以下是一些常见的面试问题类型、侧重点…...

MySQL !=NULL 与IS NOT NULL
1、! 与<>比较 在MySQL中 ! 和 <> 的功能一致,在sql92规范中建议是:!,新的规范中建议为: <> 2、!NULL 与IS NOT NULL 比较 先说结论:默认情况下做比较条件时使用关键字“IS NULL”和“IS NOT NULL”࿱…...

[Unity Demo]从零开始制作空洞骑士Hollow Knight第十六集(上篇):制作更多地图,更多敌人,更多可交互对象
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、第一个代表性场景 1.制作敌人僵尸跳跳虫更多敌人2.制作敌人阿斯匹德更多可交互对象3.制作敌人孵化虫和它的孩子二、第二个代表性场景 1.制作更多敌人2.制作…...

Soap-UI传参
<?xml version"1.0" encoding"UTF-8"?> <soapenv:Envelope xmlns:soapenv"http://schemas.xmlsoap.org/soap/envelope/" xmlns:web"http://webservice.ihosp.jxmns.thirdparty.his.gocent.com/"><soapenv:Header/>…...

Centos7搭建minio对象存储服务器
Centos7搭建minio对象存储服务器 安装二进制程序配置服务文件 安装二进制程序 参考:https://segmentfault.com/q/1010000042181876 minio中国版:https://www.minio.org.cn/download.shtml#/linux # 下载二进制程序 wget https://dl.min.io/server/min…...

递归算法之汉诺塔问题(Tower of Hanoi)详细解读
汉诺塔问题(Tower of Hanoi)是一个经典的递归问题,由法国数学家 douard Lucas 于1883年提出。问题描述了如何将不同大小的圆盘从一个柱子移到另一个柱子,同时遵循特定规则。它是计算机科学中用来展示递归思想和算法设计的经典案例…...

软件设计模式------工厂方法模式
工厂方法模式(Factory Method Pattern),又称工厂模式,也叫虚拟构造器模式(Virtual Constructor Pattern)或多态工厂模式(Polymorphic Pactory Pattern),属于类创建型模式。 我们知道…...

演示:基于WPF的DrawingVisual开发的高刷新率示波器
一、目的:分享一个基于WPF的DrawingVisual开发的高刷新率示波器 二、效果演示 特此说明:由于Gif录制工具帧率不够,渲染60帧用了4.6秒,平均帧率在12Hz左右,所以展示效果不好,想要看好些的效果可以看文章下面…...

git入门操作(2)
文章目录 git入门操作(2)git diff 查看差异git diff gitignore忽略文件1.在代码仓库创建这个文件2.添加对 log 文件过滤 连接远程仓库与ssh配置远程仓库和本地仓库关联步骤分支基本操作步骤命令: 合并冲突分支合并逻辑1.新建分支 dev…...

【AI学习】扩散模型学习总结PPT
#1024程序员节|征文# 看了一些文章,大概学习了扩散模型。 《李宏毅 2023 最新 Diffusion Model 原理讲解》(文章链接:https://zhuanlan.zhihu.com/p/692430885) 《What are Diffusion Models?》 https://lilianwen…...

【Python】相等性比较运算(==, is)的学习笔记
1. 相等性比较运算: & is Python中有两种比较运算符和is; 和 is 的主要区别在于它们比较的对象属性不同: 运算符: 比较对象的值或内容是否相等。调用对象的 __eq__() 方法来进行比较。可以被重载(在自定义类中重…...

智慧公厕厂家:智慧公厕建设推动城市公厕智能化变革
随着科技的不断进步,智慧公厕厂家正以创新之力推动着城市公厕的智能化变革。 一、提升用户体验 智慧公厕为使用者带来了前所未有的便利。通过实时显示厕位使用情况,避免了旅客的无效排队,节省了时间。感应式设备如水龙头、洗手液等ÿ…...

大一计算机课程之线性代数
《大一计算机课程之线性代数》 在大一的计算机课程中,线性代数是一门极为重要的基础学科,它就像一把神奇的钥匙,为计算机科学领域的诸多方面开启了智慧之门。 线性代数主要研究线性方程组、向量空间、线性变换等内容。对于计算机专业的学生…...

什么是运动控制器?运动控制器的特点
运动控制器是一种专门用于控制机械系统中运动部件(如电机、驱动器和其他运动元件)的电子设备。它们在自动化、机器人、数控机床、工业自动化和精密控制系统等领域得到了广泛应用。 运动控制器的功能 运动控制器主要负责以下几个方面的功能:…...

[AWS]RDS数据库版本升级
背景:由于AWS上mysql5.7版本不再支持,需要进行版本升级。 吐槽:每年都要来那么几次,真的有病一样,很烦。 步骤一、升级检查 AWS提供了一个python的升级检测脚本,可以按照一下脚本下载测试: [r…...

(Golang)初识Go语言!!为什么选择Go?如何配置Go的开发环境?VS Code如何配置Go环境?
1. Go能做什么? go的优点:运行速度快、并发能力强 Go的应用领域: 区块链应用(BT、分布式账本技术) 后端服务应用 例如: 美团后台流量支撑程序 支撑主站的后台流量(排序、推荐、搜索等…...

【人工智能-初级】第15章 TensorFlow 和 PyTorch 的入门:深度学习的利器
文章目录 一、引言二、TensorFlow 简介2.1 什么是 TensorFlow?2.2 TensorFlow 安装2.3 TensorFlow 构建简单的神经网络2.4 TensorBoard 可视化 三、PyTorch 简介3.1 什么是 PyTorch?3.2 PyTorch 安装3.3 PyTorch 构建简单的神经网络 四、TensorFlow 与 P…...

git禁用 SSL 证书验证
命令 git config --global http.sslVerify false注意:禁用 SSL 证书验证是不安全的,可能会使你的 Git 操作面临中间人攻击的风险。因此,只有在你确信网络环境是安全的,且了解禁用 SSL 验证的后果时,才应该使用这个配置…...

C++之《剑指offer》学习记录(2):sizeof
笔者最近在找工作时,无意间读到了一本名为《剑指offer》的书,粗略翻阅了一下,感觉这将会是一本能让我不再苦恼于笔试和面试“手搓代码”的书。故笔者写下该系列博客记录自己的学习历程,希望能和这本书的读者朋友们一起交流学习心得…...

linux线程 | 同步与互斥 | 线程池以及知识点补充
前言:本节内容是linux的线程的相关知识。本篇首先会实现一个简易的线程池, 然后再将线程池利用单例的懒汉模式改编一下。 然后再谈一些小的知识点,比如自旋锁, 读者写者问题等等。 那么, 现在开始我们的学习吧。 ps:本…...

ArkTS 如何实现表单,地区选择效果
速览 ArkTS实现表单和地区选择效果,可通过Picker组件实现地区选择下拉列表,结合表单组件如Input等构建完整表单。使用ArkTS提供的UI组件库和状态管理机制,可以方便地构建复杂且交云互动的表单界面。 1. ArkTS 表单基础 在ArkTS中,构建表单通常涉及多个UI组件的组合,如I…...

Vite 项目的核心配置- vite.config.ts 和 tsconfig.json 全解析
一、vite.config.ts 详细说明 vite.config.ts 是 Vite 项目的核心配置文件。它允许你自定义 Vite 的行为,以适应你的项目需求。 让我们来看看其中一些重要的配置选项: import { fileURLToPath, URL } from node:url// 使用 defineConfig 帮手函数,这样不用 jsdoc …...

如何使用JMeter进行性能测试的保姆级教程
性能测试是确保网站在用户访问高峰时保持稳定和快速响应的关键环节。作为初学者,选择合适的工具尤为重要。JMeter 是一个强大的开源性能测试工具,可以帮助我们轻松模拟多用户场景,测试网站的稳定性与性能。本教程将引导你通过一个简单的登录场…...

Qt 实战(11)样式表 | 11.1、样式表简介
文章目录 一、样式表简介1、简介2、样式表语法2.1、样式规则2.2、选择器类型2.3、伪状态2.4、设置子控件状态 3、样式表继承与优先级3.1、样式表继承3.2、样式表优先级3.3、解决冲突3.4、样式表层叠 4、总结 前言: 在开发图形用户界面(GUI)应…...

WebGl 多缓冲区和数据偏移
1.多缓冲区 多缓冲区技术通常涉及到创建多个缓冲区对象,并将它们用于不同的数据集。这种做法可以提高数据处理效率,尤其是在处理大量数据或需要频繁更新数据时。通过预先分配和配置多个缓冲区,可以在不影响渲染性能的情况下,快速…...

基于SSM的甜品店销售管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...

Spacetime Gaussian Feature Splatting for Real-Time Dynamic View Synthesis
Spacetime Gaussian Feature Splatting for Real-Time Dynamic View Synthesis 摘要 动态场景的新视角合成一直是一个引人入胜但充满挑战的问题。尽管最近取得了很多进展,但如何同时实现高分辨率的真实感渲染、实时渲染和紧凑的存储,依然是一个巨大的…...

PCL 基于FPFH特征描述子获取点云对应关系
目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 FPFH特征计算函数 2.1.2 获取点云之间的对应点对函数 2.1.3 可视化函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接: PCL点云算法与项目实战案例汇总…...