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

Jedis和SpringDataRedis

目录

Jedis

SpringDataRedis

第一步:创建SpringBoot项目

第二步:导入依赖

第三步:通过application.yml来配置redis

应用

SpringDataRedis操作string类型,通过RedisTemplate模板对象来获取ValueOperations对象来操作String类型

SpringDataRedis操作hash类型 

SpringDataRedis操作list类型

SpringDataRedis操作set数据类型

SpringDataRedis操作zset数据类型 

SpringDataRedis操作通用命令

使用redis连接池

1.导入依赖

2.编写application.yml配置文件

Redis持久化


Jedis

jedis属于java技术的客户端操作redis客户端

使用第一步:导入依赖

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

使用

public class JedisTest {@Testpublic void test(){try (Jedis jedis = new Jedis("192.168.230.130", 6379)) {//自动释放资源jedis.set("name", "hhh");System.out.println(jedis.get("name"));jedis.hset("person","name","hhh");System.out.println(jedis.keys("*"));Map<String, String> person = jedis.hgetAll("person");person.forEach((key,value)-> System.out.println(key+"->"+value));}}
}

SpringDataRedis

第一步:创建SpringBoot项目

第二步:导入依赖

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>

第三步:通过application.yml来配置redis

spring:redis:host: 192.168.230.100port: 6379database: 0  #操作的是0号数据库

应用

SpringDataRedis操作string类型,通过RedisTemplate模板对象来获取ValueOperations对象来操作String类型

@SpringBootTest
class SpringDay9SpringdataRedisApplicationTests {//从SpringIoC容器中直接获取@Autowiredprivate RedisTemplate redisTemplate;@Testvoid testString(){//根据模板对象redisTemplate获取操作String类型的ValueOperations对象ValueOperations valueOperations = redisTemplate.opsForValue();//1.存数据和取数据valueOperations.set("name","hqi");Object value = valueOperations.get("name");System.out.println("value="+value);//2.存值和设置过期时间valueOperations.set("address","bj",10, TimeUnit.SECONDS);//存活时间为10秒//3.如果key存在就修改原value值,不存在则不执行//即存在才执行valueOperations.setIfPresent("address","tj");//注意:修改value值之后,之前设置的过期时间就会失效//4.如果key存在就不会修改原value值,存在则不修改//即不存在才执行valueOperations.setIfAbsent("name","hhh");}

我们可以发现这个键值前面多了一些序列化的东西,所以我们可以自己配置一个RedisTemplate模板对象再交给IoC容器管理 

RedisTemplate模板对象默认的key序列化器为:JdkSerializationRedisSerializer
我们要改成StringRedisSerializer
@Configuration//告诉Spring这是一个配置类,并让Spring加载这个类
public class RedisConfig extends CachingConfigurerSupport {@Beanpublic RedisTemplate<Object,Object> redisTemplate(RedisConnectionFactory factory){RedisTemplate<Object,Object> redisTemplate = new RedisTemplate<>();//默认的key序列化器为:JdkSerializationRedisSerializer//我们改成StringRedisSerializer//键序列化redisTemplate.setKeySerializer(new StringRedisSerializer());//值序列化redisTemplate.setValueSerializer(new StringRedisSerializer());//key hashMap序列化redisTemplate.setHashKeySerializer(new StringRedisSerializer());//value hashMap序列化redisTemplate.setHashValueSerializer(new StringRedisSerializer());//连接工厂redisTemplate.setConnectionFactory(factory);return redisTemplate;}}

正常:

SpringDataRedis操作hash类型 

    @Testvoid testHash(){//根据模板对象RedisTemplate获取HashOperations对象来操作hash数据类型HashOperations hashOperations = redisTemplate.opsForHash();//1.存储几个hash类型的数据//第一个参数是hash的key,第二个参数是hash的字段,第三个参数是字段值hashOperations.put("person","name","hhh");hashOperations.put("person","age","19");//2.获取hash类型的某个字段值Object value = hashOperations.get("person", "name");System.out.println(value);//hhh//3.根据键获取哈希类型的所有字段Set person = hashOperations.keys("person");System.out.println(person);//[name, age]//4.获取hash表中所有字段值List person1 = hashOperations.values("person");System.out.println(person1);//[hhh, 19]//5.根据键获取hash类型的所有值Map person2 = hashOperations.entries("person");person2.forEach((k,v)-> System.out.println(k+"->"+v));//name->hhh//age->19}

 

SpringDataRedis操作list类型

    @Testvoid testList(){//根据RedisTemplate模板对象获取ListOperations来操作list数据类型ListOperations listOperations = redisTemplate.opsForList();//1.向列表中添加数据listOperations.leftPush("list","a");listOperations.leftPush("list","b");listOperations.leftPushAll("list","c","d");//批量添加listOperations.rightPush("list","1");listOperations.rightPush("list","2");//2.查看list数据类型的所有值List list = listOperations.range("list", 0, -1);for (Object object : list) {System.out.println("value="+object);//value=d//value=c//value=b//value=a//value=1//value=2}}

SpringDataRedis操作set数据类型

@Testvoid testSet(){//根据RedisTemplate模板对象来获取SetOperations来操作set数据类型SetOperations setOperations = redisTemplate.opsForSet();//1.向set集合中添加数据setOperations.add("set","a","b","c","1","a","2");//set集合会去重,无序//2.获取set集合的所有值Set set = setOperations.members("set");for (Object o : set) {System.out.println("value="+o);//value=a//value=1//value=b//value=c//value=2}//3.删除指定set集合中的值setOperations.remove("set","a","b");}

 

SpringDataRedis操作zset数据类型 

      @Testvoid testZSet(){//根据RedisTemplate模板对象获取ZSetOperations来操作ZSet数据类型ZSetOperations zSetOperations = redisTemplate.opsForZSet();//1.向zSet中添加数据zSetOperations.add("zset","hhh",90);zSetOperations.add("zset","aaa",70);zSetOperations.add("zset","bbb",80);//2.从zSet中取数据Set zset = zSetOperations.range("zset", 0, -1);for (Object o : zset) {System.out.println("value="+o);//value=aaa//value=bbb//value=hhh}//3.对某个值的分数加10zSetOperations.incrementScore("zset","hhh",10);//4.获取zset集合中分数和value值Set<ZSetOperations.TypedTuple> set = zSetOperations.rangeWithScores("zset", 0, -1);for (ZSetOperations.TypedTuple tuple : set) {System.out.println(tuple.getValue()+"->"+tuple.getScore());//aaa->70.0//bbb->80.0//hhh->100.0}//5.删除数据zSetOperations.remove("zset","aaa","bbb");}

SpringDataRedis操作通用命令

    @Testvoid testCommon(){//1.获取redis中所有keySet keys = redisTemplate.keys("*");for (Object key : keys) {System.out.println("key="+key);//key=zset//key=set//key=list//key=person}//2.判断某个key是否存在System.out.println(redisTemplate.hasKey("set"));//true//3.删除某个keySystem.out.println(redisTemplate.delete("set"));//true//4.获取指定key的数据类型System.out.println(redisTemplate.type("list"));//LIST}

使用redis连接池

1.导入依赖

<!--        redis创建连接池,默认不会创建--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId></dependency>

2.编写application.yml配置文件

spring:redis:host: 192.168.230.130port: 6379database: 0  #操作的是0号数据库lettuce:pool:max-active: 8 #连接池最大连接数(使用负数表示没有限制连接个数)max-wait: -1ms #连接池最大阻塞等待时间(使用负数表示没有限制时间)max-idle: 8 #连接池中的最大空闲连接min-idle: 1 #连接池中最小空闲连接

Redis持久化

把redis服务器关了之后,再重启服务器,数据库数据会部分丢失因为redis服务器会每隔一段时间写入一次内存中数据到硬盘上

所以我们要让redis持久化,即把内存中的数据保存到硬盘上

redis持久化的两种方式

1.ROB:redis database 默认的持久化方式,以二进制的方式将数据写入文件中。每隔一段时间写一次。(效率高,但是突然关闭服务器会导致部分数据丢失)

2.AOF:Append Only File 以文本文件的方式记录用户的每次操作,数据还原时候,读取AOF文件,模拟用户的操作,将数据还原率低,但是不会有数据丢失)

要把redis持久化方法改成AOF,只需要把redis.conf文件的appendonly修改为yes即可

 


http://www.mrgr.cn/news/376.html

相关文章:

  • 【网络】UDP回显服务器和客户端的构造,以及连接流程
  • xssnote
  • 电商平台的推荐算法需要备案吗?
  • 【云原生】Kubernetes中的名称空间和资源配额详细用法与应用实战
  • TinTinLand Web3 + DePIN 共学月|深入探索 DePIN 项目,全景分析去中心化网络未来
  • 跨进程通信使用 Zenoh中间件 进行高效数据传输的测试和分析
  • 【深度学习基础】关于卷积神经网络你了解多少?
  • Linux Xfce 桌面环境系统休眠的问题
  • 本地连接服务器上docker中的redis
  • KV存储之ETCD
  • Linux网络设置
  • 基于Hadoop的汽车大数据分析系统设计与实现【爬虫、数据预处理、MapReduce、echarts、Flask】
  • 基于spring boot的疫情信息管理系统
  • AWS域名注册服务:为您的在线业务打下坚实基础
  • 快讯 | OpenAI 找回场子:chatgpt-4o-latest 刷新多项AI跑分纪录
  • React 学习——useMemo
  • iOS的App启动详细过程(底层知识)
  • 【STM32嵌入式系统设计与开发拓展】——16_FreeRTOS操作系统
  • 11 IIC通讯协议
  • LLama 3 跨各种 GPU 类型的基准测试