把redis用在Java项目
创始人
2024-12-14 03:35:08
0

1. Java连接redis

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

1.1 引入依赖

                      redis.clients             jedis             4.3.1         

 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 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 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 k52 = jedis.hgetAll("k5");         System.out.println("获取k5的所有键值对:"+k52);      } }

2. java连接redis集群模式

适合SSM项目。

  public static void main(String[] args) {         Set 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 引入依赖

                       org.springframework.boot             spring-boot-starter-data-redis         

 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 {      @Autowired     private StringRedisTemplate stringRedisTemplate;      //关于Hash的操作     @Test     public void testHash(){         HashOperations forHash = stringRedisTemplate.opsForHash();         //存放数据  hset(key,field,value)         forHash.put("user","name","ykq");         Map 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 user = forHash.entries("user");         System.out.println("获取所有的元素:"+user);          Set user1 = forHash.keys("user");         System.out.println("获取所有的key:"+user1);         List user2 = forHash.values("user");         System.out.println("获取所有的value:"+user2);     }       //关于String的操作: 在封装的StringRedisTemplate类对应每种数据类型的操作 对应相应的类来完成     @Test     void testString() {         //得到操作字符串的类对象         ValueOperations 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的操作     @Test     void testKeys() {         Set 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 {      @Autowired     private RedisTemplate redisTemplate;      @Test     public 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 {      @Autowired     private RedisTemplate redisTemplate;     //       @Test     public 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

相关内容

热门资讯

终于清楚!哈灵麻将系统规律(透... 终于清楚!哈灵麻将系统规律(透视辅助)透视脚本辅助神器(2021已更新)(哔哩哔哩)1、哈灵麻将系统...
七分钟细节!金州水鱼取胜小,水... 七分钟细节!金州水鱼取胜小,水鱼天下辅助器(好像真的是有挂)1、实时金州水鱼取胜小开挂更新:用户可以...
4分钟攻略!老友麻将神器通用版... 4分钟攻略!老友麻将神器通用版,牌友联盟切实是真的有挂,AI教程(有挂ai代打)1、用户打开应用后不...
9分钟了解!钱塘十三水怎么提升... 9分钟了解!钱塘十三水怎么提升好牌率(一直真的是有挂)详细透明挂教程;1、玩家可以在钱塘十三水怎么提...
实测揭晓!!大菠萝十三水辅助器... 实测揭晓!!大菠萝十三水辅助器(辅助挂)透视脚本辅助脚本(2024已更新)(哔哩哔哩)1、玩家可以在...
5分钟规律!新猴王牛牛有挂吗,... 5分钟规律!新猴王牛牛有挂吗,川蜀麻将有挂吗(确实有辅助挂)进入游戏-大厅左侧-新手福利-激活码辅助...
七分钟揭秘!掌心娱乐辅助器,丽... 七分钟揭秘!掌心娱乐辅助器,丽水茶苑麻将一直真的是有挂,透牌教程(有挂秘笈)亲,关键说明,掌心娱乐辅...
科技新动态!中至九江讨赏有挂吗... 科技新动态!中至九江讨赏有挂吗(真是是有挂)详细透明挂教程暗藏猫腻,小编详细说明中至九江讨赏有挂吗原...
玩家必看攻略!南通长牌算胡牌方... 玩家必看攻略!南通长牌算胡牌方法(透视)外挂透明挂辅助插件(2022已更新)(哔哩哔哩)1、在南通长...
4分钟细节!聚友互娱手机app... 4分钟细节!聚友互娱手机app辅助器,浙江宝宝游戏透视外 挂(果然有挂辅助挂)1、操作简单,无需注册...