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

【Redis】在Java中以及Spring环境下操作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的方法分成几个类别,好进一步更好的组织

大体命令基本一致 

Read more

Python+Flask+Echarts打造全国气象数据可视化分析大屏

1. 为什么需要气象数据可视化大屏? 最近帮朋友公司搭建气象数据展示系统时,发现很多决策者面对密密麻麻的Excel表格总是一头雾水。其实人类大脑处理图像信息的速度比处理文字快6万倍,这就是为什么我们需要把枯燥的气象数据变成直观的可视化图表。 气象数据可视化大屏的核心价值在于: * 实时监控:像股票大盘一样展示全国气象变化 * 趋势分析:通过历史数据预测未来天气走向 * 快速决策:农业、物流等行业可以据此调整工作计划 * 异常预警:直观发现极端天气征兆 我在实际项目中验证过,同样的气象数据,用表格呈现时决策需要3分钟,而通过可视化大屏只需10秒就能get关键信息。 2. 技术选型:为什么是Python+Flask+Echarts? 2.1 Python生态的优势 刚开始做气象项目时,我对比过Java和Node.js方案,最终选择Python是因为: * 数据处理能力强:Pandas处理千万级气象数据比Java快40% * 开发效率高:同样功能Python代码量只有Java的1/3 * 丰富的库支持:从爬虫到可视化都有成熟解决方案 实测用Python的re

By Ne0inhk
Python RPA+爬虫:模拟人工操作采集ERP系统数据(金蝶/用友无接口场景)

Python RPA+爬虫:模拟人工操作采集ERP系统数据(金蝶/用友无接口场景)

一、背景:无接口ERP数据采集的痛点 企业数字化转型中,ERP系统(金蝶K/3、用友U8/NC)是核心数据载体,但多数中小企业面临一个共性问题:ERP系统无开放API接口,或接口权限申请流程繁琐、成本高,无法通过常规接口调用获取数据。 传统的解决方案(人工手动导出Excel)存在效率低、易出错、无法实时采集的问题;而单纯的爬虫技术又无法应对ERP系统的“桌面客户端操作”“多层菜单导航”“动态加载表格”等场景。此时,Python RPA(机器人流程自动化)+ 爬虫的组合方案成为最优解——用RPA模拟人工操作ERP界面(点击、输入、翻页),用爬虫/数据提取技术抓取界面数据,既符合ERP系统的操作逻辑,又能实现数据的自动化采集,实测可将人工采集效率提升10倍以上。 本文针对金蝶K/3(Windows客户端)和用友U8(网页版)两种典型无接口场景,实现一套通用的Python RPA采集方案,覆盖登录、导航、查询、

By Ne0inhk
西工大noj(C/C++)100题参考题解及注意事项(2024)

西工大noj(C/C++)100题参考题解及注意事项(2024)

西工大noj100题 说在前面:所有程序设计题目的题解都是在自己思考过以后看才能有所收获,题解只是一个参考,看懂思路后最好自己从0开始敲一遍!!! 如果对某一题有更好的思路 欢迎评论区交流或者私信我 持续更新~ 更新时间:2024.12.29 (目录自动生成在文章右边哦~) 本文优势: 1.以《算法笔记》(胡凡 曾磊)为蓝本,内容充实有依据 2.通俗易懂,初学者也可无障碍阅读 3.精心挑选全站最优博文,为读者提供拓展阅读链接 4.一题多解,拓宽读者题解思路 5.解题过程中带领读者回顾基础知识点 6.对素数等热门题总结出模板,方便读者积累 7.题目完整清晰,题解注释清楚 8.对于较难的题目,给出清晰的解题思路和调试过程 9.题目后用括号标注注意事项或主要解题算法和步骤 10.提供应试技巧和常见错误,助力考生金榜题名 …… 考前提醒 1.重视模板:文件这类题是有固定的模板的,

By Ne0inhk
【2026 最新】Python 与 PyCharm 详细下载安装教程 带图展示(Windows 版)

【2026 最新】Python 与 PyCharm 详细下载安装教程 带图展示(Windows 版)

前言 Python 是当今最流行的编程语言之一,广泛应用于 Web 开发、数据分析、人工智能、自动化脚本等领域。而 PyCharm 作为 JetBrains 公司推出的 Python 专业集成开发环境(IDE),凭借智能代码补全、调试器、虚拟环境管理、版本控制集成等强大功能,成为众多开发者首选工具。 本教程专为 Windows 系统用户 编写,将手把手指导你完成 Python 解释器 和 PyCharm IDE 的下载、安装与基础配置,助你快速搭建本地 Python 开发环境。 一、Python 下载与安装 1.1 访问 Python 官网 打开浏览器,访问 Python 官方网站:Download

By Ne0inhk