【云原生进阶之PaaS中间件】第一章Redis-1.6.1Java项目使用Redis

这篇具有很好参考价值的文章主要介绍了【云原生进阶之PaaS中间件】第一章Redis-1.6.1Java项目使用Redis。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【云原生进阶之PaaS中间件】第一章Redis-1.6.1Java项目使用Redis,云原生进阶-PaaS专栏,云原生,redis,paas,中间件,架构

1 Java 使用 Redis

1.1 方案简述

        redis的java客户端很多,官方推荐的有三种:

  1. Jedis
  2. Lettuce
  3. Redisson
  4. Spring 对Redis 客户端进行了整合,提供了Spring Date Redis ,在Spring Boot项目中还提供了对应的Starter,即spring-boot-starter-data-redis。

1.2 使用Jedis连接到 redis 服务

        使用Jedis操作Redis的步骤:

1.获取链接;

2.执行操作;

3.关闭连接;

1.2.1 实例

import redis.clients.jedis.Jedis;
 
public class RedisJava {
    public static void main(String[] args) {
        //连接本地的 Redis 服务
        Jedis jedis = new Jedis("localhost");

        // 如果 Redis 服务设置了密码,需要下面这行,没有就不需要
        // jedis.auth("123456"); 
        System.out.println("连接成功");

        //查看服务是否运行
        System.out.println("服务正在运行: "+jedis.ping());
    }
}

        编译以上 Java 程序,确保驱动包的路径是正确的。

连接成功

服务正在运行: PONG

1.2.2 Redis Java String(字符串) 实例

import redis.clients.jedis.Jedis;
 
public class RedisStringJava {
    public static void main(String[] args) {
        //连接本地的 Redis 服务
        Jedis jedis = new Jedis("localhost");
        System.out.println("连接成功");

        //设置 redis 字符串数据
        jedis.set("runoobkey", "www.runoob.com");

        // 获取存储的数据并输出
        System.out.println("redis 存储的字符串为: "+ jedis.get("runoobkey"));
    }
}

        编译以上程序。

连接成功 redis

存储的字符串为: www.runoob.com

1.2.3 Redis Java List(列表) 实例

import java.util.List;
import redis.clients.jedis.Jedis;
 
public class RedisListJava {
    public static void main(String[] args) {
        //连接本地的 Redis 服务
        Jedis jedis = new Jedis("localhost");
        System.out.println("连接成功");

        //存储数据到列表中
        jedis.lpush("site-list", "Runoob");
        jedis.lpush("site-list", "Google");
        jedis.lpush("site-list", "Taobao");

        // 获取存储的数据并输出
        List<String> list = jedis.lrange("site-list", 0 ,2);
        for(int i=0; i<list.size(); i++) {
            System.out.println("列表项为: "+list.get(i));
        }
    }
}

        编译以上程序。

连接成功
列表项为: Taobao
列表项为: Google
列表项为: Runoob

1.2.4 Redis Java Keys 实例

import java.util.Iterator;
import java.util.Set;
import redis.clients.jedis.Jedis;
 
public class RedisKeyJava {
    public static void main(String[] args) {
        //连接本地的 Redis 服务
        Jedis jedis = new Jedis("localhost");
        System.out.println("连接成功");
 
        // 获取数据并输出
        Set<String> keys = jedis.keys("*"); 
        Iterator<String> it=keys.iterator() ;   
        while(it.hasNext()){   
            String key = it.next();   
            System.out.println(key);   
        }
    }
}

        编译以上程序。

连接成功

runoobkey site-list

1.3 Lettuce

        另一个流行的Java Redis客户端库Lettuce,它具有异步和响应式API,支持集群模式、Sentinel模式以及Redis 6中的新特性。以下是使用Lettuce连接Redis并执行一些基本操作的代码示例:

【云原生进阶之PaaS中间件】第一章Redis-1.6.1Java项目使用Redis,云原生进阶-PaaS专栏,云原生,redis,paas,中间件,架构

        在上面的代码中,我们使用了Lettuce客户端库来连接Redis服务器并执行一些基本操作。首先,我们创建了一个RedisClient实例,并将Redis服务器的地址和端口作为参数传递给create方法。然后,我们通过调用connect方法来创建一个StatefulRedisConnection实例,该实例提供了同步和异步的API来操作Redis。接下来,我们使用sync方法来获取一个同步的RedisCommands实例,然后使用set方法来设置一个键值对,get方法获取一个键的值,del方法删除一个键。最后,我们关闭了连接哦。

1.4 Redisson

        Redisson是一个基于Netty框架的Java Redis客户端库,它提供了分布式锁、分布式集合、分布式对象等功能,支持Redis集群和Sentinel模式。以下是使用Redisson连接Redis并执行一些基本操作的代码示例:

【云原生进阶之PaaS中间件】第一章Redis-1.6.1Java项目使用Redis,云原生进阶-PaaS专栏,云原生,redis,paas,中间件,架构

        在上面的代码中,我们使用了Redisson客户端库来连接Redis服务器并执行一些基本操作。首先,我们创建了一个Config实例,并使用useSingleServer方法来指定Redis服务器的地址和端口。然后,我们通过调用create方法来创建一个RedissonClient实例。接下来,我们使用getBucket方法来获取一个RBucket实例,该实例可以用来操作一个特定的键。我们使用set方法来设置一个键值对,get方法获取一个键的值,delete方法删除一个键。最后,我们关闭了连接。

1.5 Spring Data Redis

        Spring Data Redis 中提供了一个高度封装的类,针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口,具体分类如下:

  • ValueOperations:简单K-V操作
  • SetOperations :set 类型数据操作
  • ZSetOperations:zset 类型数据操作
  • HashOperations:针对map类型的数据操作
  • ListOperations:针对list类型的数据操作

        默认操作的是0号数据库,也可以切换其他数据库:

【云原生进阶之PaaS中间件】第一章Redis-1.6.1Java项目使用Redis,云原生进阶-PaaS专栏,云原生,redis,paas,中间件,架构

        设置一下序列化,这样设置key的时候不会变成乱码:

package com.example.demotest;
 
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig extends CachingConfigurerSupport {
 
    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory){
 
        RedisTemplate<Object,Object> redisTemplate = new RedisTemplate<>();
 
        redisTemplate.setKeySerializer(new StringRedisSerializer());
 
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
 
        redisTemplate.setConnectionFactory(connectionFactory);
        return  redisTemplate;
    }
}
package com.example.demotest;
 
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.connection.DataType;
import org.springframework.data.redis.core.*;
import org.springframework.test.context.junit4.SpringRunner;
 
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
 
@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {
 
    @Autowired
    private RedisTemplate redisTemplate;
 
    @Test
    public void testString(){
        redisTemplate.opsForValue().set("city2","sz");
        String city2 = (String) redisTemplate.opsForValue().get("city2");
        System.out.println("打印一下" + city2);
        //指定过期时间 10 秒
        redisTemplate.opsForValue().set("key1","value1",10l, TimeUnit.SECONDS);
        //如果不存在key则设置
        Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("city", "sz");
        System.out.println(aBoolean);
 
    }
 
    @Test
    public void testHash(){
        HashOperations hashOperations = redisTemplate.opsForHash();
        //存值
        hashOperations.put("002","name","hh");
        hashOperations.put("002","age","20");
        hashOperations.put("002","address","sz");
        //取值
        String age = (String) hashOperations.get("002", "age");
        System.out.println(age);
 
        //获得hash结构中的所有字段
        Set keys = hashOperations.keys("002");
        for (Object key : keys) {
            System.out.println(key);
        }
        //获得hash结构中的所有值
        List values = hashOperations.values("002");
        for (Object value : values) {
            System.out.println(value);
        }
 
    }
 
    /**
     * 操作list类型的数据
     */
    @Test
    public void testList(){
        ListOperations listOperations = redisTemplate.opsForList();
 
        //存储
        listOperations.leftPush("mylist","a");
        listOperations.leftPushAll("mylist","b","c","d");
 
        //取值
        List<String> mylist = listOperations.range("mylist", 0, -1);
        for (String value : mylist) {
            System.out.println(value);
        }
 
        //获得列表长度
        Long size = listOperations.size("mylist");
        int lSize = size.intValue();
        for (int i = 0; i < lSize; i++) {
            //出队列
            String elment = (String) listOperations.rightPop("mylist");
            System.out.println(elment);
        }
    }
 
    /**
     * 操作set类型的数据
     */
    @Test
    public void testSet(){
        SetOperations setOperations = redisTemplate.opsForSet();
 
        //存值
        setOperations.add("myset","a","b","c","a");
 
        //取值
        Set<String> myset = setOperations.members("myset");
        for (String s : myset) {
            System.out.println(s);
        }
        //删除成员
        setOperations.remove("myset","a","b");
 
        //取值
        myset = setOperations.members("myset");
        for (String s : myset) {
            System.out.println(s);
        }
    }
 
    /**
     * 操作zset类型的数据
     */
    @Test
    public void testZset(){
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
 
        //存值
        zSetOperations.add("myZset","a",10.0);
        zSetOperations.add("myZset","b",11.0);
        zSetOperations.add("myZset","d",12.0);
        zSetOperations.add("myZset","a",13.0);
 
        //取值
        Set<String> myZset = zSetOperations.range("myZset", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }
        //修改分数
        zSetOperations.incrementScore("myZset","b",20.0);
 
        //取值
        myZset = zSetOperations.range("myZset", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }
        //删除成员
        zSetOperations.remove("myZset","a","b");
    }
 
    @Test
    public void testCommon(){
        //获取Redis 中所有的key
        Set<String> keys = redisTemplate.keys("*");
        for (String key : keys) {
            System.out.println(key);
        }
 
        //判断某个key是否存在
        Boolean hh = redisTemplate.hasKey("hh");
        System.out.println(hh);
 
        //删除指定key
        redisTemplate.delete("myzset");
 
        //获取指定key对应的value的数据类型
        DataType dataType = redisTemplate.type("myset");
        System.out.println(dataType.name());
    }
}

【云原生进阶之PaaS中间件】第一章Redis-1.6.1Java项目使用Redis,云原生进阶-PaaS专栏,云原生,redis,paas,中间件,架构

 参考链接

Java 使用 Redis | 菜鸟教程

java在项目中如何使用redis_Redis_方法_操作

在Java中操作Redis_java redis_周盛欢的博客-CSDN博客

使用java操作redis_java连接redis_白未的博客-CSDN博客

Redis在java项目中的使用文章来源地址https://www.toymoban.com/news/detail-698444.html

到了这里,关于【云原生进阶之PaaS中间件】第一章Redis-1.6.1Java项目使用Redis的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【云原生进阶之PaaS中间件】第一章Redis-2.3.2哨兵模式

            由于无法进行主动恢复,因此主从模式衍生出了哨兵模式。哨兵模式基于主从复制模式,只是引入了哨兵来监控与自动处理故障。Redis Sentinel是社区版本推出的原生高可用解决方案,Redis Sentinel部署架构主要包括两部分:Redis Sentinel集群和Redis数据集群,其中Redis

    2024年02月06日
    浏览(46)
  • 【云原生进阶之PaaS中间件】第一章Redis-1.6.1Java项目使用Redis

            redis的java客户端很多,官方推荐的有三种: Jedis Lettuce Redisson Spring 对Redis 客户端进行了整合,提供了Spring Date Redis ,在Spring Boot项目中还提供了对应的Starter,即spring-boot-starter-data-redis。         使用Jedis操作Redis的步骤: 1.获取链接; 2.执行操作; 3.关闭连接

    2024年02月09日
    浏览(51)
  • 【云原生进阶之PaaS中间件】第二章Zookeeper-1-综述

            ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。 Zookeeper是hadoop的一个子项目,其发展历程无需赘述。在分布式应用中,由于工程师不能很好地使用锁机

    2024年02月09日
    浏览(50)
  • 【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装

    1.1.1 环境准备         要在Linux环境下安装RabbitMQ,首先我们要有一个Linux环境,此处我们使用CentOS7虚拟机进行演示。如果本地还没有装过虚拟机,可以参考我之前的文章搭建虚拟机环境:VMware Workstation 14安装教程、虚拟机环境搭建(VMware Workstation14 + centos7)、VMware+CentO

    2024年02月20日
    浏览(52)
  • 【云原生进阶之PaaS中间件】第二章Zookeeper-3.2架构详解

    » 领导者(leader),负责进行投票的发起和决议,更新系统状态 » 学习者(learner),包括跟随者(follower)和观察者(observer),follower用于接受客户端请求并想客户端返回结果,在选主过程中参与投票 » Observer可以接受客户端连接,将写请求转发给leader,但observer不参加投票

    2024年02月08日
    浏览(51)
  • 【云原生进阶之PaaS中间件】第四章RabbitMQ-4.1-原理机制与进阶特性

    1.客户端连接到消息队列服务器,打开一个Channel。 2.客户端声明一个Exchange,并设置相关属性。 3.客户端声明一个Queue,并设置相关属性。 4.客户端使用Routing key,在Exchange和Queue之间建立好绑定关系。 5.客户端投递消息到Exchange。 6.Exchange接收到消息后,就根据消息的key和已经

    2024年02月21日
    浏览(49)
  • 【云原生进阶之PaaS中间件】第四章RabbitMQ-1-简介及工作模式

            RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。AMQP(Advanced Message Queue:高级消息队列协议)它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。RabbitMQ 最初起源于

    2024年02月21日
    浏览(80)
  • 【云原生进阶之PaaS中间件】第三章Kafka-4.4-消费者工作流程

    1.1.1 消费者群组         Kafka 里消费者从属于消费者群组,一个群组里的消费者订阅的都是同一个主题,每个消费者接收主题一部分分区的消息。         如上图,主题 T 有 4 个分区,群组中只有一个消费者,则该消费者将收到主题 T1 全部 4 个分区的消息。      

    2024年02月22日
    浏览(48)
  • 【云原生进阶之PaaS中间件】第四章RabbitMQ-4.3-如何保证消息的可靠性投递与消费

            根据RabbitMQ的工作模式,一条消息从生产者发出,到消费者消费,需要经历以下4个步骤: 生产者将消息发送给RabbitMQ的Exchange交换机; Exchange交换机根据Routing key将消息路由到指定的Queue队列; 消息在Queue中暂存,等待消费者消费消息; 消费者从Queue中取出消息消费

    2024年03月11日
    浏览(62)
  • 云原生中间件开源现状分析与华为中间件案例解读

    开源中间件在企业分布式架构搭建和服务治理中扮演着重要的角色,尤其是在解决我国网络高并发和业务复杂性问题方面。然而,尽管中间件市场由商业闭源厂商主导,提供了一系列基础中间件和数据类中间件以支持稳定的应用程序运行环境,开源中间件生态却相对分散和薄

    2024年02月02日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包