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

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{

    @Test
    public 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();
    @Test
    public 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通常用来作为缓存使用

相关推荐
科技小花5 小时前
全球化深水区,数据治理成为企业出海 “核心竞争力”
大数据·数据库·人工智能·数据治理·数据中台·全球化
X56616 小时前
如何在 Laravel 中正确保存嵌套动态表单数据(主服务与子服务)
jvm·数据库·python
FQNmxDG4S7 小时前
Java多线程编程:Thread与Runnable的并发控制
java·开发语言
虹科网络安全7 小时前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库
2301_771717218 小时前
解决mysql报错:1406, Data too long for column
android·数据库·mysql
axng pmje8 小时前
Java语法进阶
java·开发语言·jvm
rKWP8gKv78 小时前
Java微服务性能监控:Prometheus与Grafana集成方案
java·微服务·prometheus
老前端的功夫8 小时前
【Java从入门到入土】28:Stream API:告别for循环的新时代
java·开发语言·python
qq_435287928 小时前
第9章 夸父逐日与后羿射日:死循环与进程终止?十个太阳同时值班的并行冲突
java·开发语言·git·死循环·进程终止·并行冲突·夸父逐日
小江的记录本8 小时前
【Kafka核心】架构模型:Producer、Broker、Consumer、Consumer Group、Topic、Partition、Replica
java·数据库·分布式·后端·搜索引擎·架构·kafka