【Redis基础知识 十三】Jedis的使用

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 【Redis基础知识 十三】Jedis的使用

在了解了Redis的基础数据结构以及一些特性和操作指令之后呢,和kafka及ES系列一样,我们不可能用指令去编程和完成业务逻辑,还是需要代码去操作指令的,java也封装了相关的代码,统一叫做Jedis,接下来本篇blog就来了解下Jedis的使用:

  • Jedis简介:简单介绍下Jedis是什么,能干什么
  • Jedis环境搭建:创建相关Java项目,完成第一个Jedis代码编写
  • Jedis操作Redis:Jedis对Redis的一些操作指令
  • Jedis综合案例实现:Jedis实现我们之前提到的综合案例
  • Jedis简易工具类使用:方便后期Jedis和Redis的连接
  • 可视化客户端:可以可视化查看的Redis客户端

接下来就来学习下Jedis的使用,为之后的接口调用打好基础。

Jedis简介

Jedis实际上就是Java语言操作Redis数据的工具,其实我们之前在用JDBC操作Mysql的时候也是一样的,实际上Redis不也是一个非关系型的数据库嘛!

Jedis有如下的一些优点:轻量,简洁,便于集成和改造;支持连接池;支持pipelining、事务、LUA Scripting、Redis Sentinel、Redis Cluster,但是需要注意,它不支持读写分离,需要自己实现

Jedis环境搭建

首先还是用idea来创建一个Jedis的maven项目,初始化一个Jedis:

需要maven加载的配置为:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.example</groupId>
    <artifactId>Jedis</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
</project>

Jedis操作Redis

使用如下代码操作Redis,指令与Redis原生指令类似:

String类型

import org.junit.Test;
import redis.clients.jedis.Jedis;
public class JedisTest {
    @Test
    public void testJedis(){
        //连接Redis
        Jedis jedis=new Jedis("127.0.0.1",6379);
        //操作Redis
        jedis.set("name","tml");
        System.out.println(jedis.get("name"));
        //关闭Redis
        jedis.close();
    }
}

可以看到值被打印出来了

List类型

list操作也很类似,和指令一般无二:

@Test
    public void testList(){
        //连接Redis
        Jedis jedis=new Jedis("127.0.0.1",6379);
        //操作Redis
        jedis.lpush("faith","tml");
        jedis.lpush("faith","gcy");
        jedis.lpush("faith","love");
        List<String> list = jedis.lrange("faith", 0, -1);
        for (String item:list) {
            System.out.println(item);
        }
        //关闭Redis
        jedis.close();
    }

Hash类型

@Test
    public void testHash(){
        //连接Redis
        Jedis jedis=new Jedis("127.0.0.1",6379);
        //操作Redis
        jedis.hset("Hash","tml","1");
        jedis.hset("Hash","gcy","2");
        jedis.hset("Hash","love","3");
        Map<String,String> map = jedis.hgetAll("Hash");
        System.out.println(map);
        //关闭Redis
        jedis.close();
    }

Set类型

@Test
    public void testSet(){
        //连接Redis
        Jedis jedis=new Jedis("127.0.0.1",6379);
        //操作Redis
        jedis.sadd("set","tml");
        jedis.sadd("set","gcy");
        jedis.sadd("set","tml");
        Set<String> set = jedis.smembers("set");
        System.out.println(set);
        //关闭Redis
        jedis.close();
    }

SortedSet类型

@Test
    public void testSortedSet(){
        //连接Redis
        Jedis jedis=new Jedis("127.0.0.1",6379);
        //操作Redis
        jedis.zadd("sortedSet",100,"china");
        jedis.zadd("sortedSet",99,"aa");
        jedis.zadd("sortedSet",89,"cc");
        Set<Tuple> tset= jedis.zrangeWithScores("sortedSet",0,-1);
            System.out.println(tset);
        //关闭Redis
        jedis.close();
    }

Jedis综合案例实现

还是我们之前看的按次计时服务案例:

综合分析如下实现步骤:

实现代码如下:

import redis.clients.jedis.Jedis;
import redis.clients.jedis.exceptions.JedisException;
//业务服务和管理
public class JedisService {
    private String id;
    private int num;
    public JedisService(String id,int num){
        this.id=id;
        this.num=num;
    }
    public void servie(){
        //连接Redis
        Jedis jedis=new Jedis("127.0.0.1",6379);
       String value= jedis.get("compid"+id);
        try {
        if(value==null){
            jedis.setex("compid"+id,5,Long.MAX_VALUE-num +"");
        }else {
                Long val=jedis.incr("compid"+id);
                business(id,num-(Long.MAX_VALUE-val));
            }
        }
        catch (JedisException e){
            System.out.println("使用已达上限");
            return ;
        }finally {
            //关闭Redis
            jedis.close();
        }
    }
    public void  business(String id,Long val){
        System.out.println("用户"+id+"执行业务操作第"+val+"次");
    }
}
//线程管理服务
class MyThread  extends Thread{
    JedisService jedisService;
    MyThread(String id,int num){
        jedisService =new JedisService(id,num);
    }
    public void run(){
        while (true){
            jedisService.servie();
            try {
                Thread.sleep(300L);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
 }
 class main{
     public static void main(String[] args) {
         MyThread myThread=new MyThread("初级用户",10);
         MyThread myThread1=new MyThread("高级用户",30);
         myThread.start();
         myThread1.start();
     }
 }

Jedis简易工具类使用【Jedis连接池】

手动管理连接比较麻烦,使用类似JDBC的连接池方法:

代码实现如下:

import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class JedisPools {
    @Test
    public static Jedis testJedisPool(){
        //获得连接池配置对象,设置配置项
        JedisPoolConfig config = new JedisPoolConfig();
        // 最大连接数
        config.setMaxTotal(30); 
        //最大空闲连接数
        config.setMaxIdle(10);
        //获得连接池
        JedisPool jedisPool = new JedisPool(config,"localhost",6379);
        return jedisPool.getResource();
    }
}

更高级的使用方式是配置项放到配置文件,并且把连接池设置为静态资源:

然后读取连接池

import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.util.ResourceBundle;
class JedisPools {
    private static JedisPool jedisPool=null;
    static {
        ResourceBundle resourceBundle= ResourceBundle.getBundle("redis");
        JedisPoolConfig config = new JedisPoolConfig();
        String host=resourceBundle.getString("redis.host");
        String port=resourceBundle.getString("redis.port");
        String maxTotal=resourceBundle.getString("redis.maxTotal");
        String maxIdle=resourceBundle.getString("redis.maxIdle");
        config.setMaxTotal(Integer.parseInt(maxTotal));
        config.setMaxIdle(Integer.parseInt(maxIdle));
        jedisPool = new JedisPool(config,host, Integer.parseInt(port));
    }
    @Test
    public static Jedis testJedisPool(){
        return jedisPool.getResource();
    }
}

可视化客户端

使用redis Desktop Manager去查看redis的内容:选择官网下载https://redisdesktop.com/pricing,下载完成后可以看到界面如下所示:

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
6月前
|
NoSQL Java API
Redis官方推荐的Java连接开发工具Jedis
Redis官方推荐的Java连接开发工具Jedis
|
6月前
|
NoSQL Java Redis
redis-学习笔记(Jedis 通用命令)
redis-学习笔记(Jedis 通用命令)
48 1
|
2月前
|
NoSQL 网络协议 Java
[Redis] 渐进式遍历+使用jedis操作Redis+使用Spring操作Redis
[Redis] 渐进式遍历+使用jedis操作Redis+使用Spring操作Redis
35 7
|
2月前
|
NoSQL Java 网络安全
[Redis] 渐进式遍历+使用jedis操作Redis+使用Spring操作Redis
[Redis] 渐进式遍历+使用jedis操作Redis+使用Spring操作Redis
|
2月前
|
JSON NoSQL Java
redis的java客户端的使用(Jedis、SpringDataRedis、SpringBoot整合redis、redisTemplate序列化及stringRedisTemplate序列化)
这篇文章介绍了在Java中使用Redis客户端的几种方法,包括Jedis、SpringDataRedis和SpringBoot整合Redis的操作。文章详细解释了Jedis的基本使用步骤,Jedis连接池的创建和使用,以及在SpringBoot项目中如何配置和使用RedisTemplate和StringRedisTemplate。此外,还探讨了RedisTemplate序列化的两种实践方案,包括默认的JDK序列化和自定义的JSON序列化,以及StringRedisTemplate的使用,它要求键和值都必须是String类型。
redis的java客户端的使用(Jedis、SpringDataRedis、SpringBoot整合redis、redisTemplate序列化及stringRedisTemplate序列化)
|
3月前
|
NoSQL Java Linux
Jedis测试redis。(redis在linux虚拟机中)
该博客文章提供了使用Jedis客户端连接Linux虚拟机中的Redis服务器的步骤,包括Maven依赖配置、测试用例编写以及测试结果的截图。
|
3月前
|
缓存 NoSQL Java
【Azure Redis 缓存】定位Java Spring Boot 使用 Jedis 或 Lettuce 无法连接到 Redis的网络连通性步骤
【Azure Redis 缓存】定位Java Spring Boot 使用 Jedis 或 Lettuce 无法连接到 Redis的网络连通性步骤
|
3月前
|
缓存 NoSQL Java
【Azure Redis 缓存 Azure Cache For Redis】当使用Jedis客户端连接Redis时候,遇见JedisConnectionException: Could not get a resource from the pool / Redis connection los
【Azure Redis 缓存 Azure Cache For Redis】当使用Jedis客户端连接Redis时候,遇见JedisConnectionException: Could not get a resource from the pool / Redis connection los
112 0
|
4月前
|
Java Redis 数据安全/隐私保护
Redis14----Redis的java客户端-jedis的连接池,jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,最好用jedis连接池代替jedis,配置端口,密码
Redis14----Redis的java客户端-jedis的连接池,jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,最好用jedis连接池代替jedis,配置端口,密码
|
4月前
|
Java Redis 数据安全/隐私保护
Redis13的Java客户端-Jedis快速入门,建立连接的写法,ip地址,设置密码密码,选择库的写法
Redis13的Java客户端-Jedis快速入门,建立连接的写法,ip地址,设置密码密码,选择库的写法