首页 > 数据库 >Java操作Redis

Java操作Redis

时间:2023-07-23 13:33:08浏览次数:28  
标签:Java myZset Redis System println 操作 redisTemplate out

介绍

Redis的Java客户端有多种,官方推荐使用的有三种:

  • Jedis
  • Lettuce
  • Redisson

Spring对Redis客户端进行了整合,提供了Spring Data Redis,在Spring Boot项目中还提供了对应的Starter,即spring-boot-starter-data-redis。

使用Jedis操作Redis的步骤:

  1. 获取链接
  2. 执行操作
  3. 关闭连接

导入依赖

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>4.4.3</version>
</dependency>

进行简单操作

@Test
void testRedis() {
	// 获取链接
	Jedis jedis = new Jedis("localhost", 6379);
	// 执行具体操作
    jedis.set("name", "wyw");
	// 关闭连接
	jedis.close();
}

Spring Data Redis

Spring Data Redis可以用来简化Redis操作,下面是maven坐标:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

RedisTemplate高度封装的类

主要针对jedis客户端中大量api进行归类封装,将同一类型操作封装为operation接口,具体分类如下:

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

redis的文件配置

spring:
  # Redis 相关配置
  redis:
    host: localhost
    port: 6379
    # password: 123456
    database: 0	# 默认操作第0个数据库
    jedis:
      # Redis 连接池配置
      pool:
        max-active: 8 # 最大连接数 
        max-wait: 1ms # 连接池最大阻塞等待时间
        max-idle: 4   # 连接池中的最大空闲连接
        min-idle: 0   # 连接池中的最小空闲连接

序列化器

当我们执行set操作的时候,RedisTemplate会默认对key值进行序列化,不进行序列化,则需要修改配置类RedisConfig:

@Configuration
public class RedisConfig extends CachingConfigurerSupport {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) {
        RedisTemplate redisTemplate = new RedisTemplate();

        // 默认的key序列化器为:JdkSerializationRedisSerializer
        // redisTemplate.setKeySerializer(new JdkSerializationRedisSerializer());
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());

        redisTemplate.setConnectionFactory(connectionFactory);

        return redisTemplate;
    }
}

案列测试

字符串 String

@Test
	void contextString() {
		redisTemplate.opsForValue().set("name", "wyw");
		System.out.println(redisTemplate.opsForValue().get("name"));

		redisTemplate.opsForValue().set("key1", "123", 10L, TimeUnit.SECONDS);
	}

哈希 Hash

@Test
	void contextHash() {
		HashOperations hashOperations = redisTemplate.opsForHash();

		hashOperations.put("001", "name", "wyw");
		hashOperations.put("001", "age", "20");
		hashOperations.put("001", "address", "addr");

		Set keys = hashOperations.keys("001");

		List values = hashOperations.values("001");

		System.out.println(keys);
		System.out.println(values);
	}

列表 list

	@Test
	void testList() {
		ListOperations listOperations = redisTemplate.opsForList();

		// 单个存值
		listOperations.leftPush("mylist", "a");
		listOperations.leftPush("mylist", "b");
		// 多个存值
		listOperations.leftPushAll("mylist", "c", "d");

		// 取值
		List mylist = listOperations.range("mylist", 0, 4);

		System.out.println(mylist);

		// 获取list长度
		Long mylistSize = listOperations.size("mylist");

		// 出队
		while(mylistSize -- > 0) {
			System.out.println(listOperations.range("mylist", mylistSize, mylistSize));
			listOperations.rightPop("mylist");
		}
	}

集合 Set

@Test
	void testSet() {
		SetOperations setOperations = redisTemplate.opsForSet();

		// 存值
		setOperations.add("myset", "1", "2", "3", "3", "1", "5");

		// 取值
		Set<String> myset = setOperations.members("myset");
		System.out.println(myset);

		// 删除成员
		setOperations.remove("myset", "1", "2");

		myset = setOperations.members("myset");
		System.out.println(myset);
	}

有序集合 sorted set

@Test
	void testZset() {
		ZSetOperations zSetOperations = redisTemplate.opsForZSet();

		// 存值
		zSetOperations.add("myZset", "a", 10);
		zSetOperations.add("myZset", "b", 20);
		zSetOperations.add("myZset", "c", 5);
		zSetOperations.add("myZset", "a", 8);

		Set myZset = zSetOperations.range("myZset", 0, -1);
		System.out.println(myZset);

		// 修改分数
		zSetOperations.incrementScore("myZset", "c", 30);
		myZset = zSetOperations.range("myZset", 0, -1);
		System.out.println(myZset);

		// 删除
		zSetOperations.remove("myZset", "a");
	}

通用命令

@Test
	void testCommon() {
		// 获取Redis中所有的key
		Set keys = redisTemplate.keys("*");
		System.out.println(keys);

		// 判断某个key是否存在
		Boolean flag = redisTemplate.hasKey("name");
		System.out.println(flag);

		// 删除指定key
		redisTemplate.delete("name");

		// 获取指定key队形的value的数据类型
		DataType keyName = redisTemplate.type("myZset");
		System.out.println(keyName.name());
	}

标签:Java,myZset,Redis,System,println,操作,redisTemplate,out
From: https://www.cnblogs.com/bobowww/p/17574916.html

相关文章

  • java实现leetcode 22 括号的生成
    Java实现Leetcode22-括号的生成本文将介绍如何使用Java实现Leetcode22题-括号的生成,并提供相应的代码示例。括号的生成是一个经典的递归问题,通过理解递归的思想和括号生成的规律,我们可以很容易地解决这个问题。题目描述给定一个整数n,表示生成括号的对数,编写一个函数来生成......
  • java头文件怎么写
    Java头文件的编写在Java中,头文件指的是类的声明部分,包括类名、属性和方法的定义。正确编写头文件对于项目的可读性和可维护性非常重要。本文将介绍如何正确编写Java头文件,并解决一个实际的问题。问题描述假设我们正在开发一个学生管理系统,需要定义一个Student类来表示学生的信息......
  • java实现Modbus通信
    使用Java实现Modbus通信简介Modbus是一种通信协议,用于在工业自动化领域中不同设备之间进行数据通信。它是一种简单、可靠的通信协议,常用于监控和控制设备之间的通信。在Java中,我们可以使用第三方库来实现Modbus通信。本文将介绍如何使用j2mod库来实现ModbusTCP通信。准备工作......
  • java替换中文分号
    替换中文分号的步骤为了帮助刚入行的小白实现“java替换中文分号”,我将提供以下步骤来完成这个任务。每个步骤都将包含必要的代码和代码注释,以便小白能够理解和实施。步骤1:导入必要的类和包在开始替换中文分号之前,我们需要导入java.io和java.util包中的类。importjava.io.......
  • java实体时间戳用什么类型接
    实现Java实体时间戳的类型选择对于Java开发者来说,处理时间戳是非常常见的任务。在Java中,我们可以使用不同的数据类型来表示时间戳,但是选择合适的类型并了解其使用方法至关重要。本文将向刚入行的小白开发者介绍Java实体时间戳的类型选择,并提供相应的代码示例和解释。整体流程下......
  • JavaScript | JavaScript数据类型
    数据类型决定了一个数据的特征,比如:123和”123”,直观上看这两个数据都是123,但实际上前者是一个数字,而后者是一个字符串。对于不同的数据类型我们在进行操作时会有很大的不同。JavaScript中一共有5种基本数据类型:字符串型(String)数值型(Number)布尔型(Boolean)null型(Null)undefined......
  • 随笔02---JavaSE基础知识
    (1)基本数据类型:八大基本数据类型:1、整数类型:byte占1字节short占2字节int占4字节long占8字节(定义时后面加L)2、浮点数类型:float占4字节(后加F)double占8字节3、字符类型:char占2字节4、布尔类型:boolean占1个比特位(1bit)(2)引用数据类型:类、接口、数组-------------......
  • 基于Java Web的物流快递管理系统的设计与实现-计算机毕业设计源码+LW文档
    选题的背景、意义及研究现状:研究背景随着中国物流业的高速发展,物流管理的重要性不言而喻。而物流管理的效率更是各个物流企业最看重的地方。近些年来,很多公司和企业都实现了自动化办公及信息管理,工作人员只需要在电脑前动动手指,就可完成繁琐的管理操作,极大程度上减轻了工作人员的......
  • 面试类-Java集合 (二)
    MapMap中,毫无疑问,最重要的就是HashMap,面试基本被盘出包浆了,各种问法,一定要好好准备。8.能说一下HashMap的数据结构吗?JDK1.7的数据结构是数组+链表,JDK1.7还有人在用?不会吧……说一下JDK1.8的数据结构吧:JDK1.8的数据结构是数组+链表+红黑树。数据结构示意图如下:    ......
  • Kafka客户端操作
    五类API Kafka客户端API类型AdminClientAPI:允许管理和检测Topic、broker以及其它Kafka对象(类似于命令行的createtopic)ProducerAPI:发送消息到1个或多个TopicConsumerAPI:订阅一个或多个Topic,并处理产生的消息StreamsAPI:高效地将输入流转换到输出流ConnectorAPI:从一......