redis学习笔记4: 在Java中操作Redis

news/2024/9/23 3:31:51

redis学习笔记4: 在Java中操作Redis


Redis的Java客户端

  • Jedis [命令和原生Redis基本相同]

  • Lettuce [性能高效]

  • Spring Date Redis [可以在Spring项目中使用, 简化操作]


Spring Date Redis使用方式

导入maven坐标

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><version>3.2.4</version>
</dependency>

其他版本管理方式

<properties><redis>3.2.4</redis>
</properties><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><version>${redis}</version>
</dependency>

配置Redis数据源

application-dev

spring: #是spirng分级下的redis:host: localhostport: 6379password: 123456 #redis 5.0密码需要被""包裹database: 0 #一共有16个库 DB0 不同数据库的数据是完全隔离的 [在有些情况可能不被识别]

application

spring:redis:host: ${spring.redis.host}port: ${spring.redis.port}password: ${spring.redis.password}}   database: ${spring.redis.database}

编写相关配置类, 创建RedisTemplate对象

@Configuration
@Slf4j
public class RedisConfiguration {@Bean //将第三方类交给IOC容器管理public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){log.info("开始创建redis模板类");RedisTemplate redisTemplate = new RedisTemplate();//设置key的序列化器, 默认为JdkSerializationRedisSerializerredisTemplate.setKeySerializer(new StringRedisSerializer());//设置redis连接工厂对象redisTemplate.setConnectionFactory(redisConnectionFactory);return redisTemplate;}

通过RedisTemplate对象操作Redis

string

public void testString(){redisTemplate.opsForValue().set("name","小明");//get keyString name = (String) redisTemplate.opsForValue().get("name");String city2 = (String) redisTemplate.opsForValue().get("city2");System.out.println(name);System.out.println(city2);//SETEX key seconds value  设置过期时间为seconds的key//SETEX code 3 1234redisTemplate.opsForValue().set("code","1234",10, TimeUnit.SECONDS); //使用枚举类写时间单位//setNX 当key不存在时创建//redis的string和java的String不是完全不同, 最后都会转化成redis字符串存储redisTemplate.opsForValue().setIfAbsent("lock",1);redisTemplate.opsForValue().setIfAbsent("lock",2);
}

hash

//    @Test
public void testHash() {//hset hget hkeys hvalsHashOperations hashOperations = redisTemplate.opsForHash();//hset key filed valuehashOperations.put("100","name","tom");hashOperations.put("100","age","20");hashOperations.put("100","gender","male");//hget key fieldString name = (String) hashOperations.get("100","name");System.out.println(name);//hkeys keySet keys = hashOperations.keys("100");System.out.println(keys);//hvals keyList values = hashOperations.values("100");System.out.println(values);//hdel key fieldhashOperations.delete("100","gender");
}

set

public void testSet1(){SetOperations setOperations = redisTemplate.opsForSet();//sadd 插入新数据setOperations.add("set1","aa","bb","cc");//smembers 遍历setOperations.members("set1");//scard 元素数量Long size = setOperations.size("set1");System.out.println(size);//sinter 交集System.out.println(setOperations.intersect("set1", "set2"));//sunion 并集System.out.println(setOperations.union("set1", "set2"));//srem 删除setOperations.remove("set1","aa","bb");
}

list

public void testList(){ListOperations listOperations = redisTemplate.opsForList();//Lpush 左压栈listOperations.leftPush("mylist","aa");listOperations.leftPush("mylist","bb");listOperations.leftPush("mylist","cc");listOperations.leftPush("mylist","dd");//Llen 元素数量System.out.println(listOperations.size("mylist"));//Lrange 遍历System.out.println(listOperations.range("mylist", 0, -1));//Rpop 右弹出listOperations.rightPop("mylist");//Llen 元素数量System.out.println(listOperations.size("mylist"));
}

zset

public void testZSet(){ZSetOperations zSetOperations = redisTemplate.opsForZSet();//zadd key value score 向zset插入数据zSetOperations.add("zset1","a",19);//zrange 遍历zsetSystem.out.println(zSetOperations.range("zset1", 0, -1));//zrange key start end withScores  遍历zset并显示分数System.out.println(zSetOperations.rangeByScoreWithScores("myset1", 0, -1));//zincreby 为指定key的分数添加一个增量zSetOperations.incrementScore("zset1","c",10);//zrem 删除指定keyzSetOperations.remove("zset1","a","b");
}

通用命令操作

public void testCommon(){//keys * 查询所有keySet keys = redisTemplate.keys("*");System.out.println(keys);//exists 查询指定key是否存在Boolean name = redisTemplate.hasKey("name");//type 查询keys集合中所有数据的类型for (Object key : keys) {System.out.println(redisTemplate.type(key));}//del 根据key删除数据redisTemplate.delete("mylist");
}

其他的

在图形化界面key正常, valule显示乱码, 通过java输出是正常的

不设置序列化器, 会使用默认的序列化器, key乱码, 可以在java中查询到

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/31312.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

xxl任务绑定一台服务器的两个项目

项目场景: 之前正式一直都是使用的手动注册,而且测试环境还没有注册上去,但是最近开发的需要每天在测试上跑跑看,再上生产,所以这次要解决掉。问题描述 我是测试环境和正式环境都在一台机子上,两个环境项目跑不同的docker容器,我要做的是这两个容器里面的项目都注册到我…

day4-1-Redis

day4-1-Redis入门Redis介绍 Redis是一个基于内存的key-value结构数据库基于内存存储, 读写性能高适合存储热点数据(热点商品, 咨询, 新闻) (在特定时间有大量访问量)key valueid 101name 小智city 北京redis中文网Redis安装Redis启动-服务端 在安装目录运行cmd, 若提示没有相关…

实例网盘(强推)

实例网盘(强推)实例网盘为实例的 /gm-fs 目录,该目录为实例同一个数据中心的分布式存储,对于较大的文件或者压缩文件有着出色的读写性能,实例网盘不受实例删除/释放影响,采用分布式冗余存储,数据安全性较高,强烈建议使用网盘备份数据。 立即免费体验:https://gpumall.co…

程序员的AI编程小助手,CodeGeeX在vscode,vs2022,IDEA2023使用体验总结

程序员的AI编程小助手,CodeGeeX使用体验总结 一、1.CodeGeeX 是什么?能做什么?CodeGeeX 是一个智能编程软件工具,目前CodeGeeX支持多种主流IDE,如VS Code、visual studio 2022,IntelliJ IDEA、PyCharm、Vim等, 同时,支持Python、Java、C++/C、JavaScript、Go等多种语言…

城市三维模型CIM轻量化技术浅析

三维工厂K3DMaker是一款三维模型浏览、分析、轻量化、顶层合并构建、几何校正、格式转换、调色裁切等功能专业处理软件。可以进行三维模型的网格简化、纹理压缩、层级优化等操作,从而实现三维模型轻量化。轻量化压缩比大,模型轻量化效率高,自动化处理能力高;采用多种算法对…

如何优化文件跨区域传输的能力,提高市场核心竞争力?

随着业务的不断扩张和发展,越来越多的企业在异国、异地设立分支机构,用以覆盖更广泛的市场和客户群体,比如医院在不同地域设立一院、二院,企业在不同地域设立分部等等,因此存在必然的文件跨区域传输场景。由于涉及数据在不同网络和区域间的移动,因此需要特别注意安全性和…

Code-Llama 语言模型

Code Llama 是一系列专注于代码相关任务的大型语言模型,它构建在 Llama 2 的基础上,在开放模型中提供了最先进的性能,它在填充能力、支持大输入上下文以及零指导编程任务的能力方面表现出色。Code Llama 是一系列专注于代码相关任务的大型语言模型,它构建在 Llama 2 的基础…