高并发核心技术Redis系列(七)--------Jedis操作Redis

简介: 先读缓存,再读数据库

一、Jedis操作Redis

1.1 Cache Aside Pattern(缓存模式)

读:

1. 先读缓存,再读数据库

2. 如果缓存命中,则直接返回缓存数据

3. 如果缓存未命中,则访问数据库,并将数据重置回缓存,然后返回。

2345_image_file_copy_233.jpg

写:

先操作数据库写,再淘汰缓存(这里淘汰缓存是删除,而不是更新)

2345_image_file_copy_234.jpg

Jedis是Redis官方推荐的Java连接开发工具。要在Java开发中使用好Redis中间件,必须对Jedis熟悉才能写成漂亮的代码。

1.2 引入Jedis

1. 启动redis并在IDEA中创建一个maven工程

2345_image_file_copy_235.jpg

2. 引入maven依赖

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

3. 创建相关文件

2345_image_file_copy_236.jpg

1.3 常用方法

1. Jedis连接到redis

Jedis jedis = new Jedis("192.168.56.31",6379); //第一个参数是ip地址,第二个参数是端口

在连接之前,需要开放redis连接服务,即关闭redis.conf中的bind本机和关闭本机保护模式

2345_image_file_copy_237.jpg

通过systemctl stop firewalld.service命令关闭CentOS8防火墙

Jedis jedis = new Jedis("192.168.56.31",6379);
String msg = jedis.ping();//通过ping()方法向redis发送一个ping命令,服务器返回一个Pong
System.out.println(msg);
jedis.close();//jedis使用完毕需要关闭

2. String

jedis.set("k1","v1"); //设置一个key
jedis.set("k2","1");//设置一个key
String res = jedis.get("k1");//获取一个key
Long ires =  jedis.incr("k2");//对某一个key自增

3. Keys

Set<String> keys = jedis.keys("*");//返回所有的key
Long time = jedis.ttl("k1");//返回该key剩余过期时间

4. List

jedis.lpush("list1","v1","v2","v3");//向list中添加数据
List<String> list = jedis.lrange("list1",0,-1 );//返回list全部数据

5. Set

jedis.sadd("set1" ,"v1","v2","v2","v3");//向set中添加数据
jedis.smembers("set1");//查看该集合中有多少个元素

6. Hash

jedis.hset("user","age","25");//设置一个hash
jedis.hvals("user");//获取该key的所有value

7. Zset

jedis.zadd("zset1",100,"java");//向zset中添加一条数据
jedis.zrange("zset1",0,-1);//获取所有的值

8. Bitmaps

jedis.setbit("b1",0, "1");//将b1偏移量为0的位设置为1
jedis.getbit("b1",0);//获取b1偏移量为0的位

9. Geospatia

jedis.geoadd("chinacity",130,110,"beijing");//添加一条地理信息数据

10. Hyperloglog

jedis.pfadd("book","c++","java","php");//将所有元素参数添加到 Hyperloglog 数据结构中。

其实jedis中的方法基本同redis命令一致。

2345_image_file_copy_238.jpg


目录
相关文章
|
6月前
|
缓存 关系型数据库 MySQL
在MySQL中处理高并发和负载峰值的关键技术与策略
采用上述策略和技术时,每个环节都要进行细致的规划和测试,确保数据库系统既能满足高并发的要求,又要保持足够的灵活性来应对各种突发的流量峰值。实施时,合理评估和测试改动对系统性能的影响,避免单一措施可能引起的连锁反应。持续的系统监控和分析将对维护系统稳定性和进行未来规划提供重要信息。
337 15
|
7月前
|
缓存 NoSQL 算法
高并发秒杀系统实战(Redis+Lua分布式锁防超卖与库存扣减优化)
秒杀系统面临瞬时高并发、资源竞争和数据一致性挑战。传统方案如数据库锁或应用层锁存在性能瓶颈或分布式问题,而基于Redis的分布式锁与Lua脚本原子操作成为高效解决方案。通过Redis的`SETNX`实现分布式锁,结合Lua脚本完成库存扣减,确保操作原子性并大幅提升性能(QPS从120提升至8,200)。此外,分段库存策略、多级限流及服务降级机制进一步优化系统稳定性。最佳实践包括分层防控、黄金扣减法则与容灾设计,强调根据业务特性灵活组合技术手段以应对高并发场景。
2052 7
|
6月前
|
缓存 NoSQL Java
Java 项目实操高并发电商系统核心模块实现从基础到进阶的长尾技术要点详解 Java 项目实操
本项目实战实现高并发电商系统核心模块,涵盖商品、订单与库存服务。采用Spring Boot 3、Redis 7、RabbitMQ等最新技术栈,通过秒杀场景解决库存超卖、限流熔断及分布式事务难题。结合多级缓存优化查询性能,提升系统稳定性与吞吐能力,适用于Java微服务开发进阶学习。
243 0
|
8月前
|
NoSQL 算法 安全
redis分布式锁在高并发场景下的方案设计与性能提升
本文探讨了Redis分布式锁在主从架构下失效的问题及其解决方案。首先通过CAP理论分析,Redis遵循AP原则,导致锁可能失效。针对此问题,提出两种解决方案:Zookeeper分布式锁(追求CP一致性)和Redlock算法(基于多个Redis实例提升可靠性)。文章还讨论了可能遇到的“坑”,如加从节点引发超卖问题、建议Redis节点数为奇数以及持久化策略对锁的影响。最后,从性能优化角度出发,介绍了减少锁粒度和分段锁的策略,并结合实际场景(如下单重复提交、支付与取消订单冲突)展示了分布式锁的应用方法。
638 3
|
12月前
|
缓存 NoSQL 架构师
Redis批量查询的四种技巧,应对高并发场景的利器!
在高并发场景下,巧妙地利用缓存批量查询技巧能够显著提高系统性能。 在笔者看来,熟练掌握细粒度的缓存使用是每位架构师必备的技能。因此,在本文中,我们将深入探讨 Redis 中批量查询的一些技巧,希望能够给你带来一些启发。
Redis批量查询的四种技巧,应对高并发场景的利器!
|
9月前
|
人工智能 缓存 NoSQL
高并发秒杀系统设计:关键技术解析与典型陷阱规避
在电商、在线票务等场景中,高并发秒杀活动对系统性能和稳定性提出极大挑战。海量请求可能导致服务器资源耗尽、数据库锁争用及库存超卖等问题。通过飞算JavaAI生成的Redis + Lua分布式锁代码,可有效解决高并发下的锁问题,提升系统QPS达70%,同时避免缓存击穿与库存超卖。相较传统写法,AI优化代码显著提高性能与响应速度,为高并发系统开发提供高效解决方案。
|
存储 缓存 监控
社交软件红包技术解密(四):微信红包系统是如何应对高并发的
本文将为读者介绍微信百亿级别红包背后的高并发设计实践,内容包括微信红包系统的技术难点、解决高并发问题通常使用的方案,以及微信红包系统的所采用高并发解决方案。
359 13
|
存储 缓存 NoSQL
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
359 1
|
缓存 NoSQL 关系型数据库
云端问道21期实操教学-应对高并发,利用云数据库 Tair(兼容 Redis®)缓存实现极速响应
本文介绍了如何通过云端问道21期实操教学,利用云数据库 Tair(兼容 Redis®)缓存实现高并发场景下的极速响应。主要内容分为四部分:方案概览、部署准备、一键部署和完成及清理。方案概览中,展示了如何使用 Redis 提升业务性能,降低响应时间;部署准备介绍了账号注册与充值步骤;一键部署详细讲解了创建 ECS、RDS 和 Redis 实例的过程;最后,通过对比测试验证了 Redis 缓存的有效性,并指导用户清理资源以避免额外费用。
274 1
|
消息中间件 缓存 NoSQL
Redis 高并发竞争 key ,如何解决这个难点?
本文主要探讨 Redis 在高并发场景下的并发竞争 Key 问题,以及较为常用的两种解决方案(分布式锁+时间戳、利用消息队列)。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
Redis 高并发竞争 key ,如何解决这个难点?