linux-redis学习经历二,通过jedis用java来操作redis

Redis高可用架构设计:从单点故障到P99.999%写入保障 Redis作为高性能内存数据库,其高可用并非简单主从或集群部署即可实现,而是涉及复制机制、故障检测、数据一致性与系统级调优的综合工程问题。核心原理在于解决主节点故障时写入不中断、读流量激增时吞吐不塌方、网络分区时数据不丢失三大矛盾。技术价值体现在将P99.99延迟稳定在50ms内、写入成功率提升至99.999%,支撑秒杀、抢券、风控等强实时业务场景。典型应用包括电商库存扣减、金融规则引擎、IoT设备状态缓存等对可用性与一致性有分级要求的系统。本文深入剖析Redis哨兵脑裂边界、Cluster跨slot陷阱及 阅读详情

1:创建maven项目,本人使用的是idea,配置好maven后一步步新建就可以,这里略过

2:加载jedis的jar包,上maven仓库搜jedis即可,这里使用的是2.9.0版本

 

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
    <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>2.9.0</version>
    </dependency>

3:写个main方法尝试

 

 

package com.gcc.test;
import redis.clients.jedis.Jedis;
public class JedisTest {

    public static void main(String[] args) {
        Jedis jedis = new Jedis("192.168.0.154", 6379);
        jedis.set("hello","你好");
        System.out.println(jedis.get("hello"));
        jedis.close();
    }

}

4:修改错误,这里会有陆续三次报错,去linux修改即可

Last login: Mon Jan 29 19:08:15 2018 from 192.168.0.122
//启动redis 
[root@bogon ~]#  ps -ef | grep -i redis
root       8592      1  0 1月29 ?       00:00:15 bin/redis-server 127.0.0.1:6379
root       8690   8603  0 00:10 pts/0    00:00:00 grep --color=auto -i redis
//第一次运行报错content time out……是没有打开6379端口,添加后重启
//这里的意义是:设置防火墙,公共区域,添加端口6379,设置为永久添加
[root@bogon ~]# firewall-cmd --zone=public --add-port=6379/tcp --permanent
success
[root@bogon ~]# firewall-cmd --reload
success
//第二次报错是bind 127.0.0.1,使用的约束添加默认是本机,注释掉即可。然后关闭redis再重启,使配置生效。
[root@bogon ~]# vi /usr/local/redis/redis.conf 
[root@bogon ~]# /usr/local/redis/bin/redis-cli shutdown
[root@bogon ~]# /usr/local/redis/bin/redis-server /usr/local/redis/redis.conf 
[root@bogon ~]# ps -ef | grep -i redis
root       9035      1  0 00:22 ?        00:00:00 /usr/local/redis/bin/redis-server *:6379
root       9039   8603  0 00:22 pts/0    00:00:00 grep --color=auto -i redis
//第三次错误,redis is running in protected……,redis是受保护的,可以关掉保护,但是不推荐。这里用设置使用密码的形式。
[root@bogon ~]# /usr/local/redis/bin/redis-cli 
127.0.0.1:6379> config set requirepass admin
OK
127.0.0.1:6379> quit
[root@bogon ~]# /usr/local/redis/bin/redis-cli 
127.0.0.1:6379> auth admin
OK
127.0.0.1:6379> 

5:再次测试,代码为:

 

 

package com.gcc.test;
import redis.clients.jedis.Jedis;
public class JedisTest {

    public static void main(String[] args) {
        Jedis jedis = new Jedis("192.168.0.154", 6379);
        jedis.auth("admin");
        jedis.set("hello","你好");
        System.out.println(jedis.get("hello"));
        jedis.close();
    }

}

6:连接改为连接池形式,代码为:

 

package com.gcc.test;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class JedisPoolTest {

    public static void main(String[] args) {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(100);//设置最大连接数
        jedisPoolConfig.setMaxIdle(10);//设置最大空闲连接数

        JedisPool jedisPool = new JedisPool(jedisPoolConfig,"192.168.0.154",6379);
        Jedis jedis=null;
        //idea生成try快捷键ctrl+alt+t
        try {
            jedis=jedisPool.getResource();
            jedis.auth("admin");
            jedis.set("hello","你好");
            System.out.println(jedis.get("hello"));
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if (jedis!=null) {
                jedis.close();
            }
            //不需要时再关了
            if (jedisPool!=null) {
                jedisPool.close();
            }
        }


    }

}

7:常用代码,推荐再次封装为util

protected Logger logger = LoggerFactory.getLogger(JedisPoolUtil.class);

    @Test
    public void testKey (){
        Jedis redis = JedisPoolUtil.getRedis("47.106.114.88", 6379);
        logger.info(String.valueOf(redis.exists("hello")));//判断key为hello的键是否存在
        logger.info(redis.get("hello"));//显示key为hello的对应的值
        redis.set("a","10");//设置值
        redis.set("a","97");//修改值
        redis.set("b","98");
        logger.info(redis.get("a"));
        logger.info(redis.keys("*").toString());//查看所有的key
        logger.info(redis.keys("he*").toString());//查看以he开头的key
        redis.del("b");//删除key
        logger.info(redis.keys("*").toString());
        logger.info(redis.type("a"));//查看存储的值的类型
        JedisPoolUtil.closeRedis(redis);
    }

    //常用
    @Test
    public void testString(){
        Jedis redis = JedisPoolUtil.getRedis("47.106.114.88", 6379);
        redis.set("c","99");
        redis.append("c",":追加的内容");//字符串后追加
        logger.info(redis.get("c"));
        redis.mset("d","100","e","101","f","102");//批量新增值
        logger.info(redis.mget("c","d","e","f").toString());//批量获取
        redis.del(new String[]{"e","f"});//批量删除
        logger.info(redis.mget("c","d","e","f").toString());
        logger.info(redis.setnx("d","键值已存在则不覆盖").toString());//设置key,值已存在的不覆盖
        logger.info(redis.get("d"));
        JedisPoolUtil.closeRedis(redis);
    }

    //使用较少,不具体示例ltrim,lpop,rpop,rpush,sort
    @Test
    public void testList(){
        Jedis redis = JedisPoolUtil.getRedis("47.106.114.88", 6379);
        redis.lpush("collections","ArrayList", "LinkedList", "Vector", "Stack", "queue");
        redis.lpush("collections","aaa");
        redis.lpush("collections","aaa");
        redis.lpush("collections","bbb");
        redis.lpush("collections","ccc");
        logger.info(redis.lrange("collections",0,-1).toString());//根据添加顺序,从新到老排列,-1指最后一项
        logger.info(redis.lrange("collections",0,2).toString());
        redis.lrem("collections",2,"aaa");//第二个参数是删除个数 (重复值)
        logger.info(redis.lrange("collections",0,-1).toString());
        logger.info(redis.llen("collections").toString());//获取长度
        logger.info(redis.lindex("collections",0));//获取对应下标的值
        redis.ltrim("collections",0,1);//保留下标从0到1的值,其它删除
        logger.info(redis.lrange("collections",0,-1).toString());
        JedisPoolUtil.closeRedis(redis);
    }

    //常用
    @Test
    public void testHash(){
        Jedis redis = JedisPoolUtil.getRedis("47.106.114.88", 6379);
        Map<String,String> map = new HashMap<String, String>();
        map.put("m1","m-1");
        map.put("m2","m-2");
        map.put("m3","m-3");
        redis.hmset("hash",map);
        redis.hset("hash","m4","m-4");
        logger.info(redis.hgetAll("hash").toString());//查看所有键和值
        logger.info(redis.hkeys("hash").toString());//查看所有键
        logger.info(redis.hvals("hash").toString());//查看所有值
        redis.hdel("hash","m4","m3");//删除一个或多个值
        logger.info(redis.hgetAll("hash").toString());
        logger.info(redis.hlen("hash").toString());//查看键值对数量
        logger.info(redis.hexists("hash","m1").toString());//判断是否存在指定的键值
        logger.info(redis.hmget("hash","m1","m2").toString());//获取一个或多个值
        JedisPoolUtil.closeRedis(redis);

 

Java后端实习面试深度解析:从JVM到Spring Boot的实战指南 在Java后端开发领域,扎实的基础知识是构建高可用、高性能系统的基石。理解JVM内存模型、垃圾回收机制等核心原理,是优化应用性能、排查线上问题的关键。并发编程中的锁机制、线程安全等技术,直接关系到系统的稳定性和吞吐量。数据库事务的ACID特性、索引优化以及Redis等缓存组件的应用,则是保障数据一致性与提升访问速度的工程实践重点。Spring Boot通过自动配置和起步依赖,极大地简化了企业级应用的开发与部署流程。本文以一份典型的Java后端实习面试题为线索,深入剖析了JVM对象创建、synchronize 阅读详情

相关推荐

Tomcat集群Session共享:Redis集中存储方案全解析

在分布式架构中,Session管理是保障用户体验一致性的核心技术之一。当应用从单机扩展到多节点集群时,由于负载均衡会将请求分发到不同服务器,而Session默认存储在服务器本地内存,导致用户登录状态频繁丢失、购物车数据错乱等问题。本文将深入讲解Session与Cookie的配合原理,分析为何IP_HASH无法根治Session不一致,并介绍一种基于Redis的集中式Session存储方案——tomcat-redis-session-manager。该方案通过替换Tomcat的Manager组件,将Sessi

ciya3282的博客 313

Redis - 浅谈JedisPool

想要操作redis,就需要与redis建立连接。就像操作MySQL一样,需要首先拿到数据库链接。 进而,类似于MySQL的DataSource,ActiveMQ的pool,redis也提供了自己的pool–JedisPool。这些”池”理念是相通的,把你从繁琐的手动获取释放链接解放出来,减少了资源消耗,提高了性能。 【1】先看源码 源码如下: package redis.clien...

小小默:进无止境 3010

激光雷达与相机融合(四)----基于激光雷达与相机的碰撞检测

在这一部分,基于前面的各个部分内容,将利用激光雷达和相机实现目标的检测分类及单目标跟踪,并对车辆前方的车辆目标计算相应的碰撞时间TTC。计算方法分别利用相机和雷达实现。 1.系统的总体架构: 2.TTC计算 简单介绍一下通过激光雷达和相机计算碰撞时间的原理: 利用激光雷达点计算碰撞时间:首先根据检测框聚类出前车目标的点,并过滤掉这些点中的离群点,然后找出这些点中相对于本车最近的点,基于前后两帧以及数据采集频率就可以求解出相对速度,然后用当前帧的距离除以速度得出当前的TTC。但该方法对最近点的选取稳定性不是

张飞飞的博客 3986

linux java连接redis_java 连接linux的redis 报错。但是linux 客户端可以连接redis

480 localhost-startStop-1 ERROR com.hgd.MainSetup redis启动异常redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the poolat redis.clients.util.Pool.getResource(Pool.ja...

weixin_27605509的博客 238

银河麒麟系统V10 sp1,安装wine 9.0

银河麒麟系统V10 sp1 x86_64,安装wine 9.0

daqinzl的专栏 1万+

32位ALU设计(verilog实现)

32位ALU设计 ​ 算术逻辑单元(arithmetic and logic unit) 是能实现多组算术运算和逻辑运算的组合逻辑电路,简称ALU。算术逻辑单元是中央处理器(CPU)的执行单元,是所有中央处理器的核心组成部分,由"And Gate"(与门) 和"Or Gate"(或门)构成的算术逻辑单元,主要功能是进行二位元的算术运算,如加减乘(不包括整数除法)。基本上,在所有现代CPU体系结构中,二进制都以补码的形式来表示。 设计思路 设计实现 仿真测试 文章目录32位ALU设计一、设计

Destiny的博客 4万+

jedis使用_redis从在linux下安装到项目使用

1,首先先从网上下载redis安装包http://download.redis.io/releases/redis-4.0.10.tar.gz2,然后使用FileZilla将压缩包上传至linux中3,再用putty连接linux ,设置window为Change the size of the fort (可以复制粘贴)设置Connection的时间(这样就算一段时间不使用putty也不会关闭)...

weixin_39622901的博客 163

8.5华为OD机试真题 新系统 - 最长不连续子串 (Java/Py/C/C++/Js/Go)

8.5华为OD机试真题 新系统 - 最长不连续子串 (Java/Py/C/C++/Js/Go)

算法大师! 627

解决jedis连接Linux系统的远程连接的redis服务失败

jedis连接Linux系统的远程连接的redis服务失败 可能的原因:redis.conf配置文件需要修改,但是我的配置没有大家说的bind和protected-mode,防火墙也关闭了 解决:连接本地的windows版的redis服务,下载链接 Release 3.2.100 · microsoftarchive/redis · GitHub 双击启动redis服务 pong,OK! ...

liaorongxiao的博客 1616

线结构光相机原理详解以及精度控制总结

摘要:线阵结构光相机是工业三维检测的核心设备,结合线阵相机的高分辨率与结构光的主动三维成像能力。其工作原理基于线激光投射、逐线扫描、亚像素级条纹提取及三角测量法实现三维重建。精度受硬件、校准、环境和算法四因素影响,需通过优化硬件选型(如小像元相机、窄线宽激光)、精准校准(相机内参、激光平面)、环境控制(遮光、隔振、恒温)及算法优化(Steger算法、点云后处理)来提升。典型应用(卷材、轨道检测)中深度精度可达5-20μm,需根据场景需求平衡参数配置。

start_up_go的博客 940

国科大学习资料--遥感原理集图像处理(尤红建)--2019年期末考试

国科大学习资料–遥感原理集图像处理(尤红建)–2019年期末考试 国科大学习资料–遥感原理集图像处理(尤红建)–2019年期末考试 国科大学习资料–遥感原理集图像处理(尤红建)–2019年期末考试 ================================================================== ================================================================== ==============

无名何许人的博客 1469

linux下安装部署redis及使用jedis访问redis server简单的完整流程(简洁版本)

1.linux安装redis 2.jedis访问redis

凤歌 1106

【Claude Code 源码解析教程】第25章:测试与调试

Claude Code 作为复杂的 AI 编程助手,测试与调试是保证质量的关键环节。项目建立了完善的测试体系,包括单元测试、集成测试、端到端测试等多个层次,同时提供了丰富的调试工具和技巧。

rengang66的博客 210

redis 安装。java,从安装linux到用java操作redis

1. 安装linux经历了无数险阻唉,一样难尽第一步,下载vmware百度网盘链接:https://pan.baidu.com/s/1XhfMgN6v-02UggcOOW2eog 密码:862w第二步,安装vmware下一步下一步下一步,许可证第三步,创建虚拟机,安装linux下一步下一步下一步到这个页面7.png第一个,软件安装中可以选择安装GUI可视化界面第二个,安装位置,这里面需要配置一下...

weixin_33826761的博客 92

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

后台服务后台遇到的坑整理,以及做活动的优化经历,redis需要读写分离吗以及其他问题

因为去年做活动主要是H5活动比较多,运营环节在观察 选型: nginx, springboot, java8, redis, (mysql) nginx做动静分离和集群分发 spring boot提供app容器,简化配置,快速开发 java8 提供函数编程 redis 丰富的数据结构和数据持久化 mysql 缺省redis的情况下使用,之后弃用。 服务器改为 loc

kkgbn的博客 1492

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

_013_java连接不上redis

异常信息:Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: connect timed out于是我关闭了linux的防火墙,问题有出现了异常信息Caused by: java.net.ConnectException: Connection re...

poiuyppp的博客 272

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

redis个人配置误区总结

有三天没有写日报了这三天一直弄redis(快疯了)--->查了快100篇博客和资料终于有一点眉目了项目重新构建差不多10几次了一直报错,开始找文档的问题,后面在检查端口还有配置问题Exception in thread "main" redis.clients.jedis.exceptions.JedisDataException: DENIED Redis is running in pr...

thelostworld 149

Redis 数据库 入门 教程

Redis 数据库入门教程

freeking101的博客 3684

jmeter修改redis_线上Redis高并发性能调优实践

项目背景  最近,做一个按优先级和时间先后排队的需求。用 Redis 的 sorted set 做排队队列。  主要使用的 Redis 命令有, zadd, zcount, zscore, zrange 等。  测试完毕后,发到线上,发现有大量接口请求返回超时熔断(超时时间为3s)。  Error日志打印的异常堆栈为:    redis.clients.jedis.exceptions.Jedis...

weixin_29661121的博客 268

短短两个月,我从三流java外包到秒杀阿里P7,鬼知道我经历了啥

最其实不管什么时候,找工作都跑不了面试。目前很多小编都做了面试手册了,那就是别人家的孩子都有糖了,作为一个自觉的小编,必须搞。 容我先絮叨一下,制作这个面试手册差不多花了3个多星期时间,过程还是比较磨人的,但是也很期待。要是因为我做的手册,帮助到了大家,那就真的开心啊!这就是这篇文章的目的,帮你搜集了大量的面试题,已经整理成了一个Java面试手册PDF,《互联网面试2400页》,目前有65份PDF,共有2400多页,后续还会不断的完善更新。 直接进入正题,由于pdf文档里的细节内容实在过多所以只编辑了

m0_50180963的博客 172

Testcontainers实战:Java集成测试中MySQL/Redis/Kafka自动化环境搭建

在Java后端开发中,集成测试是验证系统各模块协同工作的关键环节,其核心挑战在于如何构建稳定、一致且隔离的外部依赖环境。传统方案如内存数据库、Mock服务或共享测试环境,往往在环境一致性、测试真实性和隔离性上存在不足。Docker容器化技术通过提供轻量级、可移植的运行时环境,为这一难题提供了理想的解决方案。基于Docker的Testcontainers库,将容器化理念无缝集成到测试生命周期中,实现了测试所需数据库(如MySQL)、缓存(如Redis)和消息队列(如Kafka)等中间件的按需创建与自动销毁。这

weixin_33747129的博客 332

java线程池原理源码解析,程序员如何技术划水

面试大概九十分钟,问的东西很全面,需要做充足准备,就是除了概念以外问的有点懵逼了。回来之后把这些题目做了一个分类并整理出答案(强迫症的我~狂补知识)分为MySQL+Java+Redis+算法+网络+Linux等六类,接下来分享一下我的这次阿里一面面经+一些我的学习笔记。

bq520111的博客 441

Redis连接池的隐形战场:从内核参数到文件描述符的深度调优

本文深入探讨了Redis连接池在高并发场景下的系统级调优策略,从内核参数到文件描述符限制的全面优化。通过分析`maxclients`参数与操作系统限制的关系,提供实战调优方案,包括系统级限制调整、进程优化和TCP协议栈配置,帮助解决Redis连接瓶颈问题。

a3b4c5的博客 459

Redis高可用架构选型与核心参数调优实战

Redis高可用是指在主节点故障、网络分区或资源瓶颈等真实生产场景下,系统仍能自动完成故障检测、主从切换与数据一致性保障的能力。其技术原理涵盖哨兵的多数派选举机制、Cluster的Gossip协议与slot分片路由、Proxy模式的透明分片与配置中心协同。关键价值在于降低业务雪崩风险、缩短RTO(恢复时间目标)至秒级,并支撑电商、金融等高并发场景的稳定缓存服务。典型应用场景包括读写分离架构下的热点缓存、分布式会话存储、实时排行榜等。本文深入解析哨兵、Cluster与Proxy三大模式的适用边界,并聚焦max

clugcpne10995的博客 384

Redis在电商店铺状态管理中的高并发实践

Redis作为高性能内存数据库,通过其丰富的数据结构和原子操作特性,有效解决了传统关系型数据库在高并发场景下的性能瓶颈。特别是在电商平台的店铺状态管理场景中,利用Hash类型存储结构化数据,结合分布式锁和缓存一致性策略,可以实现毫秒级的读写响应。本文以10万+QPS的真实案例,详细解析如何通过Lettuce客户端、多级缓存架构和GEO空间索引等技术方案,构建高可用、低延迟的店铺状态服务,其中缓存击穿防护和热点数据隔离等实战技巧,对处理类似双十一的大流量场景具有重要参考价值。

weixin_34126557的博客 470
上一篇: linux-redis学习经历一,安装和简单使用
下一篇: linux-redis学习经历三,了解redis数据和基本操作
gcc_front
博客等级 码龄9年 16粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值