【Redis】在Java中以及Spring环境下操作Redis

Redis-使用java代码操作Redis Redis 提供了基于 SETNX(set if not exists)命令和 Lua 脚本等方法,可以实现分布式系统中的实时锁定机制,用于协调多个节点的操作。通过将会话数据存储在 Redis 中,可以实现负载均衡、容错和扩展性,同时保证会话数据的快速访问。Redis 支持数据的持久化,可以将内存中的数据定期保存到磁盘上,以保证数据的安全性。Redis 提供了基于 Lua 脚本的原子操作,可以实现分布式锁和限流,保证在分布式环境下的数据一致性和流量控制。存储基本不会变化的数据,然后这些数据又被多个表使用。 阅读详情
AI摘要

博客介绍了Java和Spring环境下操作Redis的方法。在Java环境,需创建maven项目、导入Jedis依赖、配置端口转发以防止端口被攻击。还列举了Redis基本命令操作。在Spring环境,创建项目勾选相关选项,通过注入StringRedisTemplate操作Redis,命令与之前大体一致。

Java环境下:

1.创建maven 项目

2.导入依赖

		<!-- redis -->
		<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
			<version>4.3.2</version>
		</dependency>

此处使用的是Jedis(提供的api和redis命令高度一致)

3.配置端口转发

防止Redis的端口被黑客攻击     将云服务器的redis端口映射到本地主机中

在xshell中配置:

 此时, 访问本地的 8888, 就相当于访问对应服务器的 6379

此时连接成功

一.基本命令:

    public static void test(Jedis jedis) {
        System.out.println("set 和 get 使用");
        //清空数据库
        jedis.flushAll();
        jedis.set("key","k1");
        jedis.set("key2","k2");
        jedis.set("key3","k3");
        String key = jedis.get("key");
        String key2 = jedis.get("key2");
        String key3 = jedis.get("key3");
        System.out.println("key: " + key);
        System.out.println("key2: " + key2);
        System.out.println("key3: " + key3);

        System.out.println("exists 和 del 使用");
        boolean result = jedis.exists("key");
        System.out.println("result:" + result);
        result = jedis.exists("key1111");
        System.out.println("result:" + result);

        long del = jedis.del("key", "key2");
        result = jedis.exists("key");
        System.out.println("result:" + result);

        System.out.println("keys 使用");
        jedis.set("key","k1");
        jedis.set("key2","k2");
        Set<String> keys = jedis.keys("*");
        System.out.println("keys: " + keys);

        System.out.println("expire 和 ttl 使用");

        jedis.set("key4","k4");
        jedis.expire("key4",10);
        //休眠5s
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        long ttl = jedis.ttl("key4");
        System.out.println("ttl: " + ttl );

        System.out.println("type 使用");
        jedis.flushAll();
        jedis.set("String", "1");
        String type = jedis.type("String");
        System.out.println("type: "+type);

        jedis.lpush("list","111","222","333");
        type = jedis.type("list");
        System.out.println("type: "+type);

        jedis.sadd("set","a","b","c");
        type = jedis.type("set");
        System.out.println("type: "+type);

        jedis.zadd("zset",1.0,"zhangsan");
        type = jedis.type("zset");
        System.out.println("type: "+type);

        jedis.hset("hash","f1 ","v1");
        type = jedis.type("hash");
        System.out.println("type: "+type);

    }

 String :

    public static void test(Jedis jedis) {
        //清空数据库
        jedis.flushAll();
        System.out.println("mset 和 mget 使用");
        jedis.mset("k1","111","k2","222","k3","333");
        List<String> mget = jedis.mget("k1", "k2", "k3","k4");
        System.out.println("mget: " +mget);

        System.out.println("getrange 和 setrange 使用");

        jedis.set("k4","abcdefgh");

        String k4 = jedis.getrange("k4", 0, 4);
        System.out.println("result: " +k4);

        jedis.setrange("k4",0,"eeee");
        System.out.println("k4: " +jedis.get("k4"));

        System.out.println("append 使用");
        jedis.append("k4","aaaaaa");
        System.out.println("k4: " + jedis.get("k4"));

        System.out.println("incr 和 decr 使用");

        jedis.set("k5","111");
        System.out.println( "k5: " + jedis.incr("k5"));
        System.out.println( "k5: " + jedis.decr("k5"));

    }

 

list使用:

    public static void  test(Jedis jedis) {
        jedis.flushAll();
        System.out.println("lpush 和 lrange 使用");
        jedis.lpush("key","1","2","3","4","5");
        System.out.println("key:" + jedis.lrange("key",0,-1));
        System.out.println("rpuhs ,rpop, lpop 使用 ");
        jedis.rpush("key2","1","2","3","4","5");
        System.out.println("key2 :" + jedis.lrange("key2",0,-1));
        System.out.println("lpop key2:" + jedis.lpop("key2"));
        System.out.println("rpop key2:" + jedis.rpop("key2"));
        System.out.println("llen 使用");
        System.out.println("len key2: " + jedis.llen("key2"));
    }

hash的使用:

    private static void test(Jedis jedis) {
        jedis.flushAll();
        System.out.println("hset 和 hget 使用");
        HashMap<String,String> hash = new HashMap<>();
        hash.put("f2","v2");
        hash.put("f3","v3");
        hash.put("f4","v4");
        jedis.hset("key",hash);
        jedis.hset("key","f1","v1");
        System.out.println("key f1: " +jedis.hget("key", "f1"));
        System.out.println("key f5: " +jedis.hget("key", "f5"));

        System.out.println("hexists 使用");
        Boolean result = jedis.hexists("key","f1");
        System.out.println("key f1 result: " + result);
        result = jedis.hexists("key","f5");
        System.out.println("key f5 result: " + result);

        System.out.println("hkeys 和 hvals 使用");

        Set<String> hkeys = jedis.hkeys("key");
        System.out.println("hkeys: " + hkeys);
        List<String> hvals = jedis.hvals("key");
        System.out.println("hvals: " +hvals);

        System.out.println("hdel 使用");
        jedis.hdel("key","f1");
        result = jedis.hexists("key","f1");
        System.out.println("key f1 result: " + result);

        System.out.println("hmset 和 hmget 使用");
        List<String> hmget = jedis.hmget("key", "f1", "f2", "f3");
        System.out.println("hmget key: " + hmget);
    }

set的使用:

    public static void test(Jedis jedis) {
        jedis.flushAll();

        System.out.println("sadd 和 smembers 使用");
        jedis.sadd("key","a","b","c","d");
        Set<String> smembers = jedis.smembers("key");
        System.out.println("key: " +smembers);

        System.out.println("sismember , scard , spop  使用");
        boolean result = jedis.sismember("key", "a");
        System.out.println("result: " + result);
        long len  = jedis.scard("key");
        System.out.println("key len: " +len);
        jedis.spop("key");
        System.out.println("key len: " +jedis.scard("key"));

        System.out.println("sinter 和 sinterstore");

        jedis.sadd("key2","1","2","3","4","5");
        jedis.sadd("key3","3","4","5","6","7");
        System.out.println("[key2 key3]sinter: "+ jedis.sinter("key2","key3"));

        long sinterstore = jedis.sinterstore("key4", "key2", "key3");
        System.out.println("sinterstore: " + sinterstore);
        System.out.println("key4: " + jedis.smembers("key4"));
    }

zset的使用:

    public static void test(Jedis jedis) {
        jedis.flushAll();
        System.out.println("zadd 和 zrange 使用");
        jedis.zadd("key",10.0,"zhangsan");
        Map<String ,Double> hash = new HashMap<>();
        hash.put("lisi",20.0);
        hash.put("wangwu",30.0);
        jedis.zadd("key",hash);
        List<String> members = jedis.zrange("key", 0, -1);
        System.out.println("members: "+members);
        List<Tuple> key = jedis.zrangeWithScores("key", 0, -1);
        System.out.println("key: " + key);

        System.out.println("zcard , zscore 使用");
        long len = jedis.zcard("key");
        System.out.println("len key: " +len);
        Double score  =  jedis.zscore("key","zhangsan");
        System.out.println("score: " + score);

        System.out.println("zrem , zrank 使用");
        Long zrank = jedis.zrank("key", "lisi");
        System.out.println("lisi rank: " + zrank);
        jedis.zrem("key","zhangsan");
        System.out.println("lisi rank: " + jedis.zrank("key", "lisi"));

    }

 

都是一些基本操作,跟在redis操作基本一致,

Spring环境:

创建项目时勾选即可

通过注入的方法拿到StringRedisTemplate操作Redis 相当于刚才的Jedis

 

 将操作Redis的方法分成几个类别,好进一步更好的组织

大体命令基本一致 

【数学建模技术】基于A*算法的路径规划研究与优化应用 A算法(A-star Algorithm)是一种广泛应用于路径规划的启发式搜索算法。它结合了广度优先搜索和贪心算法的优点,能够高效地找到从起点到终点的最优路径,广泛应用于导航系统、机器人路径规划、游戏AI等领域。本篇文章将详细介绍A算法的基本原理,并通过代码实例展示其在路径规划中的实现。 阅读详情

相关推荐

Python实战:5分钟搞定VCF文件中每个样本的SNP统计(附bcftools安装指南)

本文介绍了三种高效统计VCF文件中每个样本SNP数量的Python方法,包括原生解析、结合bcftools的推荐方案以及使用PyVCF3专业库。特别推荐bcftools结合Python的方法,适用于中大型VCF文件,显著提升处理效率。文章还提供了bcftools安装指南和进阶统计技巧,帮助生物信息学分析人员快速完成SNP统计任务。

weixin_30555125的博客 493

Java中使用redis所需要的pom依赖

&lt;dependency&gt; &lt;groupId&gt;redis.clients&lt;/groupId&gt; &lt;artifactId&gt;jedis&lt;/artifactId&gt; &lt;version&gt;2.1.0&lt;/version&gt; &lt;/dependency&gt; &lt;depende

qq_41774226的博客 3万+

ST电机库实战:从状态机到稳健启动流程的深度解析

本文深度解析了ST电机库中状态机的核心作用与稳健启动流程。状态机作为电机控制的“交通指挥官”,通过IDLE、CHARGE_BOOT_CAP、ALIGNMENT等一系列状态的严格跳转,确保了永磁同步电机(PMSM)和直流无刷电机(BLDC)的安全启动与可靠运行,是避免硬件损坏和实现平稳控制的关键。

weixin_29161785的博客 224

Redis快速入门及在Java中使用Redis

Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供的数据是可以达到100000+的QPS(每秒内查询次数)。它存储的value类型比较丰富,也被称为结构化的NoSql(NoSql(Not Only SQL),不仅仅是SQL,泛指非关系型数据库。NoSql数据库并不是要取代关系型数据库,而是关系型数据库的补充。 )数据库。

程序猿追的博客 4万+

硬件工程师八大细分岗位详解:从芯片到整机的技术分工与职业选择

硬件工程作为电子系统设计的核心领域,涉及从芯片级到整机级的完整技术链条。其基本原理是通过电路设计、信号处理和功率管理等技术,将电子元件集成为功能完备的硬件系统。随着产品复杂度提升,硬件工程师岗位出现高度专业化分工,这种细分不仅提升了技术深度,更优化了团队协作效率。在工程实践中,信号完整性和电源完整性成为高速数字设计的两个关键技术挑战,直接影响系统稳定性。本文基于行业热词"硬件工程师"和"信号完整性",深入解析八大细分岗位的技术差异,帮助从业者明确职业发展方向,构建系统化的硬件设计思维。

weixin_33811539的博客 450

24. SAP UI5 应用如何使用 OData 数据模型

本教程之前的二十三个步骤,使用的数据模型都是 JSON 模型。从本步骤开始,我们要学习另一种非常重要的数据模型:OData 数据模型。 OData 数据模型也是 SAP 产品里广泛使用的数据模型,比如 SAP S/4HANA,SAP CRM Fiori 应用等等,都使用的是 OData 数据模型而不是 JSON 数据模型。 使用 OData 数据模型的典型场景就是,通过 OData 模型提供的 Read API,将远端服务器上存储的数据通过 OData 协议读取到客户端,并显示在 SAP UI5 应用里。.

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 5792

【Java】SpringBoot快速整合Redis

SpringBoot快速整合Redis, 测试从数据查询和从redis缓存中查询的效率差别。

m0_64210833的博客 2105

Unity 工具 之 ZXing QRCode 二维码的生成和识别(可设置生成不同颜色的/带图标的二维码)

Unity 基础 之 ZXing QRCode 二维码的生成和识别(可设置生成不同颜色的/带图标的二维码) 目录 Unity 基础 之 ZXing QRCode 二维码的生成和识别(可设置生成不同颜色的/带图标的二维码) 一、简单介绍 二、实现原理 三、注意实现 四、效果预览 五、ZXing.net ( zxing.unity.dll ) 插件下载 六、实现步骤 七、关键代码 一、简单介绍 Unity 开发中,自己整理的一些游戏开发可能用到的功能,整理归档,方便游...

仙魁XAN 9824
上一篇: 【BFS】解决FloodFill 算法
下一篇: 【Redis】持久化机制
评论 65
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值