当前位置: 首页 > news >正文

把redis用在Java项目

1. Java连接redis

Java连接redis的方式是通过jedis,连接redis需要遵循jedis协议。

1.1 引入依赖

<!--引入java连接redis的驱动--><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>4.3.1</version></dependency>

 1.2 编写代码

import redis.clients.jedis.Jedis;import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class Test01 {public static void main(String[] args) {//连接redis的信息 默认连接本地的redis 端口号6379. 所有关于redis操作的功能都在该类中Jedis jedis=new Jedis("192.168.111.188",6379);//关于key的命令Set<String> keys = jedis.keys("*");System.out.println("所有的key:"+keys);long del = jedis.del("k1", "k2", "k3");System.out.println("删除key的个数:"+del);boolean k4 = jedis.exists("k4");System.out.println("判断指定的k4是否存在:"+k4);long k5 = jedis.expire("k5", 10);//关于字符串类型的命令:String set = jedis.set("k1", "v1");System.out.println("存入k1的值:"+set);String k1 = jedis.get("k1");System.out.println("获取指定key的值:"+k1);long k2 = jedis.setnx("k2", "110");System.out.println("如果k2不存在,则设置k2的值:"+k2);long k21 = jedis.incr("k2");System.out.println("k2的值加1:"+k21);long k22 = jedis.decr("k2");System.out.println("k2的值减1:"+k22);String setex = jedis.setex("k3", 100, "v3");System.out.println("k3的值:"+setex);//关于hash类型的命令:long hset = jedis.hset("k4", "k41", "v41");System.out.println("存入k4的键值对:"+hset);Map<String,String> map=new HashMap<>();map.put("name","张三");map.put("age","18");long k51 = jedis.hset("k5", map);System.out.println("存入k5的键值对:"+k51);String hget = jedis.hget("k5", "name");System.out.println("获取k5的name的值:"+hget);Map<String, String> k52 = jedis.hgetAll("k5");System.out.println("获取k5的所有键值对:"+k52);}
}

2. java连接redis集群模式

适合SSM项目。

  public static void main(String[] args) {Set<HostAndPort> nodes=new HashSet<>();nodes.add(new HostAndPort("192.168.111.188",7001));nodes.add(new HostAndPort("192.168.111.188",7002));nodes.add(new HostAndPort("192.168.111.188",7003));nodes.add(new HostAndPort("192.168.111.188",7004));nodes.add(new HostAndPort("192.168.111.188",7005));nodes.add(new HostAndPort("192.168.111.188",7006));JedisCluster jedisCluster=new JedisCluster(nodes);jedisCluster.set("k5","666");System.out.println(jedisCluster.get("k5"));}

3. springboot整合redis

通过starter启动依赖,包含自动装配类,完成相应的装配功能。

3.1 引入依赖

 <!--引入了redis整合springboot 的依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>

 3.2 修改配置文件

#redis 配置
#你所连接的reids的地址
spring.redis.host=192.168.111.188
#端口号
spring.redis.port=6379
#连接的几号数据库
spring.redis.database=1
#用于控制 Jedis 连接池的一个属性。它定义了连接池中可以同时活动的最大连接数。
spring.redis.jedis.pool.max-active=100
#用于设置 Jedis 连接池中最多可以有多少个空闲的 Redis 连接
spring.redis.jedis.pool.max-idle=10
#用于设置当连接池中的所有连接都在使用时,线程等待连接池返回连接的最大时间
spring.redis.jedis.pool.max-wait=10000ms

 3.3 使用

springboot整合redis时封装了两个工具类:StringRedisTemplate和RedisTemplate

StringRedisTemplate它是RedisTemplate的子类,StringRedisTemplate里面只能存放字符串的内容。

3.3.1 StringRedisTemplate


import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;@SpringBootTest
class Qy174SpringbootRedisApplicationTests {@Autowiredprivate StringRedisTemplate stringRedisTemplate;//关于Hash的操作@Testpublic void testHash(){HashOperations<String, Object, Object> forHash = stringRedisTemplate.opsForHash();//存放数据  hset(key,field,value)forHash.put("user","name","ykq");Map<String,String> map=new HashMap<>();map.put("age","18");map.put("adrress","北京");forHash.putAll("user",map);//获取指定的元素  hget(key,field)Object o = forHash.get("user", "name");System.out.println("获取指定的元素:"+o);Map<Object, Object> user = forHash.entries("user");System.out.println("获取所有的元素:"+user);Set<Object> user1 = forHash.keys("user");System.out.println("获取所有的key:"+user1);List<Object> user2 = forHash.values("user");System.out.println("获取所有的value:"+user2);}//关于String的操作: 在封装的StringRedisTemplate类对应每种数据类型的操作 对应相应的类来完成@Testvoid testString() {//得到操作字符串的类对象ValueOperations<String, String> opsForValue = stringRedisTemplate.opsForValue();//存放数据---set(k,v)opsForValue.set("k1","v1");//存放数据--setex(k,second,v)opsForValue.set("k2","20",2,TimeUnit.MINUTES);//存放数据--setnx(k,v)Boolean aBoolean = opsForValue.setIfAbsent("k3", "v3", 2, TimeUnit.MINUTES);System.out.println("是否设置成功:"+aBoolean);//获取指定的元素String k1 = opsForValue.get("k1");System.out.println("获取指定的元素:"+k1);Long k2 = opsForValue.increment("k2", 10);System.out.println("获取指定的元素:"+k2);}//关于key的操作@Testvoid testKeys() {Set<String> keys = stringRedisTemplate.keys("*");System.out.println("所有的key:"+keys);Boolean k1 = stringRedisTemplate.delete("k1");System.out.println("是否删除指定的k1:"+k1);Boolean k11 = stringRedisTemplate.hasKey("k1");System.out.println("是否存在k1:"+k11);Boolean k12 = stringRedisTemplate.expire("k1", 10, TimeUnit.HOURS);System.out.println("是否设置过期时间:"+k12);}}

3.3.2 RedisTemplate

它属于StringRedisTemplate的父类,它的泛型默认都是Object。它可以直接存储任意类型的key和value。

@SpringBootTest
class Qy174SpringbootRedisApplicationTests {@Autowiredprivate RedisTemplate redisTemplate;@Testpublic void test01(){//指定key的序列化方式。redisTemplate.setKeySerializer(new StringRedisSerializer());//指定value的序列化方式redisTemplate.setValueSerializer(new FastJsonRedisSerializer<>(Object.class));ValueOperations valueOperations = redisTemplate.opsForValue();valueOperations.set("k11","v11"); //为什么出现了乱码?1.key要不要序列化。要。默认使用的是jdk序列化方式 。System.out.println(valueOperations.get("k11"));//能否获取值。--能//org.springframework.data.redis.serializer.SerializationException: 序列化valueOperations.set("k12",new User("宋英豪",18));//把内存中的数据存入磁盘---序列化过程JSONObject k12 = (JSONObject) valueOperations.get("k12");}}

如果使用RedisTemplate每次都需要人为指定key和value的序列化。

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.support.spring.FastJsonRedisSerializer;
import com.ykq.demos.web.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.data.redis.serializer.StringRedisSerializer;import java.util.*;
import java.util.concurrent.TimeUnit;@SpringBootTest
class Qy174SpringbootRedisApplicationTests {@Autowiredprivate RedisTemplate redisTemplate;     //@Testpublic void test01(){ValueOperations valueOperations = redisTemplate.opsForValue();valueOperations.set("k11","v11"); //为什么出现了乱码?1.key要不要序列化。要。默认使用的是jdk序列化方式 。System.out.println(valueOperations.get("k11"));//能否获取值。--能//org.springframework.data.redis.serializer.SerializationException: 序列化valueOperations.set("k12",new User("宋英豪",18));//把内存中的数据存入磁盘---序列化过程JSONObject k12 = (JSONObject) valueOperations.get("k12");HashOperations forHash = redisTemplate.opsForHash();forHash.put("u","n","zhangsan");forHash.put("u","张三","张三杀回");}}

4. 集群模式

#集群模式
spring.redis.cluster.nodes=192.168.111.188:7006,192.168.111.188:7001,192.168.111.188:7002,192.168.111.188:7003,192.168.111.188:7004,192.168.111.188:7005

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • python_基础编程_字典、集合
  • C语言图书信息管理系统
  • 导航网站WP主题/WP黑格导航主题BlackCandy-简约酷黑色高逼格+焕然一新的UI设计
  • 多区域DNS以及主从DNS的搭建
  • 【Gin】架构的精妙编织:Gin框架中组合模式的革新实践与技术深度解析(下)
  • 防火墙与入侵检测系统(IDS/IPS)在现代网络安全中的关键角色
  • java--jvm虚拟机(都是要点)
  • 【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 卡牌游戏(200分) - 三语言AC题解(Python/Java/Cpp)
  • HarmonyOS应用开发者高级认证,Next版本发布后最新题库 - 多选题序号5
  • vue3前端架构---打包配置
  • ScriptableObject使用
  • 新手小白做视频素材去哪里下载?8个无水印视频素材库分享
  • mysql 主从复制 读写分离 MHA
  • Android APK混淆处理方案分析
  • MySQL 存储引擎详解
  • Angular4 模板式表单用法以及验证
  • chrome扩展demo1-小时钟
  • flask接收请求并推入栈
  • java多线程
  • Java基本数据类型之Number
  • Laravel Mix运行时关于es2015报错解决方案
  • Python3爬取英雄联盟英雄皮肤大图
  • Spring声明式事务管理之一:五大属性分析
  • SQLServer之创建数据库快照
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • Yeoman_Bower_Grunt
  • 分布式事物理论与实践
  • 配置 PM2 实现代码自动发布
  • 前嗅ForeSpider教程:创建模板
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 区块链共识机制优缺点对比都是什么
  • 数组的操作
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 小程序开发之路(一)
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​十个常见的 Python 脚本 (详细介绍 + 代码举例)
  • #if和#ifdef区别
  • (+4)2.2UML建模图
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (LeetCode 49)Anagrams
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (二刷)代码随想录第15天|层序遍历 226.翻转二叉树 101.对称二叉树2
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (四)activit5.23.0修复跟踪高亮显示BUG
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (自用)仿写程序
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .Net CF下精确的计时器