Redis入门:在Java程序中高效使用Redis

server/2024/10/22 14:20:09/

准备工作

下载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测试

java">
/*** 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+"次");}}

以上代码的含义:

  1. 获取连接redis服务器的Jedis对象
  2. 先获取当前时间的毫秒值
  3. 进行死循环,当时间过去1秒时,停止循环
  4. 在这1秒内向redis服务器中存入数据
  5. 输出redis存入了多少条数据

 运行结果:

每个人的电脑的执行次数都是不同的,我这里显示的是我执行效果最好的一次,通常我的只有3万5千次。其实redis的速度不仅仅如此,比这快的多,这里较慢的原因是我们只是一条条地将命令发送给redis去执行。如果使用流水线技术它的速度回快得多,将可以达到10万次每秒的操作,十分有利于系统性能的提高。

可以看出redis的写数据的速度是非常快的:

本质原因有三点:

  • 它是基于ANSI C语言编写的,接近于汇编语言的机器语言,运行十分快速
  • 它是基于内存读/写,速度比数据库的磁盘读/写要快的多
  • 它的数据库结构只有6种数据类型,数据结构简单,因此规则较少,而数据库则是范式,完整性、规范性需要考虑的规则比较多,处理业务会比较复杂

扩展

向MySQL数据库写数据

 我利用mybatis想mysql数据库插入新的数据,具体代码不给出,主要观察执行效果以及和redis的对比

 测试类

java">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通常用来作为缓存使用 


http://www.ppmy.cn/server/133921.html

相关文章

华为od面试手撕代码真题题型4——链表

链表 1 单链表相交 160. 相交链表 - 力扣&#xff08;LeetCode&#xff09; 解法一 指针 pA 指向 A 链表&#xff0c;指针 pB 指向 B 链表&#xff0c;依次往后遍历。如果 pA 到了末尾&#xff0c;则 pA headB 继续遍历、如果 pB 到了末尾&#xff0c;则 pB headA 继续遍历…

CVTE Android面试题及参考答案(100道题)

目录 插件化 组件化 合并相似接口 抽象通用方法 使用接口代理 引入设计模式 编写源代码 资源文件准备 编译资源文件 编译源代码 生成 dex 文件 打包 APK 文件 技术能力提升 项目经验积累 职业发展 知识分享与团队协作 建立良好的沟通机制 明确团队目标和职责…

大数据新视界 --大数据大厂之大数据与边缘计算的协同:实时分析的新前沿

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

11 django管理系统 - 管理员管理 - 分页复习(REVIEW)

下面实现分页功能&#xff0c;还是按照固定步骤来。 我先随机插入100条数据。然后分页&#xff0c;每页显示10条数据。 分页类&#xff1a;在前面"08 django管理系统 - 部门管理 - 部门分页"讲到过&#xff0c;代码如下&#xff1a; from django.utils.safestring …

如何利用动态IP进行数据采集?

在数据驱动的时代&#xff0c;动态IP成为进行高效数据采集的利器。动态IP可以通过频繁更换IP地址避免因频繁访问而受限&#xff0c;从而实现更顺畅的数据获取。本文将详细探讨如何利用动态IP进行数据采集&#xff0c;为企业提升信息获取能力提供实用指导。 如何利用动态IP进行…

程序员节:代码世界的故事与技术

《程序员节&#xff1a;代码世界的故事与技术》 在这个充满数字与逻辑的世界里&#xff0c;一年一度的程序员节又如约而至。1024 这个特殊的日子&#xff0c;让我们一同回首那些与代码相伴的岁月&#xff0c;分享属于我们的故事&#xff0c;展示我们的技术风采。 作为一名程序…

全面掌握MySQL:从安装到优化的完整指南(适用于Windows系统)

撰写一篇关于MySQL使用的详细博客时&#xff0c;涵盖从安装、配置、基础操作、SQL查询&#xff0c;到高阶功能和性能优化的内容&#xff0c;可以确保达到万字的目标并提供丰富的技术深度。以下是关于在Windows系统上使用MySQL的详细指南&#xff0c;文章分为多个部分&#xff0…

Java八股整合(Kafka+RocketMQ+K8S)

消息队列 用于进程中相互通信的队列 放入消息的是生产者&#xff0c;取出消息的是消费者 应用场景 异步处理&#xff0c;削峰/限流&#xff0c;解耦 用Java模拟消息队列 用一个线程当生产者&#xff0c;当消息队列中消息数小于最大队列容量时向队列中加入消息&#xff0c…