Redis入门(常用命令、spring-boot-starter-data-redis)

Redis

redis是一个基于内存的key-value的结构数据库

启动: redis-server.exe redis.windows.conf

客户端链接:redis-cli.exe [-h 目标ip] [-p 端口] [-a 密码]

修改链接密码:

redis.windows.conf中的requirepass 123456

常用的数据类型

redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型

  • 字符串 string

  • 哈希 hash

  • 列表 list

  • 集合 set

  • 有序集合 sorted set/zset

常用命令

字符串操作命令

SET key value 设置指定key的值

GET key 获取指定key的值

SETEX key seconds value 设置指定key的值,并将key的过期时间设置为seconds秒

SETNX key value 只有在key不存在时设置key的值

哈希操作命令

HSET key field value 将哈希表key中的字段field的值设置为value

HGET key field 获取存储在哈希表中指定字段的值

HDEL key field 删除存储在哈希表中的指定字段

HKEYS key 获取哈希表中所有的字段

HVALS key 获取哈希表中所有的值

列表操作命令

LPUSH key value1 [value2] 将一个或多个值插入到列表头部

LRANGE key start stop 获取列表指定范围内的元素

RPOP key 移除并获取列表最后一个元素

LLEN key 获取列表长度

集合操作命令

SADD key member1 [member2] 向集合添加一个或多个成员

SMEMBERS key 返回集合的所有成员

SCARD key 获取集合的成员数

SINTER key1 [key2] 返回给定所有集合的交集

SUNION key1 [key2] 返回所有给定集合的并集

SREM key member1 [member2] 删除集合中一个或多个成员

有序集合操作命令

ZADD key score1 member1 [score2 member2] 向有序集合添加一个或多个成员

ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序集合中指定区间内的成员

ZINCRBY key increament member 有序集合中对指定成员的分数加上增量increment

ZREM key member [member...] 移除有序集合中的一个或多个成员

通用命令

KEYS pattern 查找所有符合给定模式(pattern)的key

EXISTS key 检查给定key是否存在

TYPE key 返回key所存储的值的类型

DEL key 该命令用于在key存在时删除key

在java中操作Redis

Redis的常用java客户端有jedis,lettuce,Spring Data Redis

Spring Data Redis

依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.7.3</version>
</dependency>
配置redis数据源(application.yml)
spring:redis:host: localhostport: 6379password: 123456database: 0
编写配置类,创建RedisTempalte对象
@Configuration
@Slf4j
public class RedisConfiguration {@Beanpublic RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){log.info("开始创建redis模板对象。。。");RedisTemplate redisTemplate = new RedisTemplate();//设置redis的链接工厂对象redisTemplate.setConnectionFactory(redisConnectionFactory);//设置redis key的序列化器redisTemplate.setKeySerializer(new StringRedisSerializer());return redisTemplate;}
}
通过RedisTemplate对象操作Redis
@SpringBootTest
public class SpringDataRedisTest {
​@Autowiredprivate RedisTemplate redisTemplate;
​@Testpublic void testRedisTempalte(){System.out.println(redisTemplate);}
}
操作字
符串类型的数据
/*** 操作字符串类型的数据*/
@Test
public void testString(){// set get setex setnx//插入redisTemplate.opsForValue().set("city", "北京");//获取String city = (String) redisTemplate.opsForValue().get("city");System.out.println(city);//插入,设置有效时间redisTemplate.opsForValue().set("code", "1234", 3, TimeUnit.MINUTES);//如果不存在插入redisTemplate.opsForValue().setIfAbsent("lock", 1);redisTemplate.opsForValue().setIfAbsent("lock", 2);//获取Integer lock = (Integer) redisTemplate.opsForValue().get("lock");System.out.println(lock);
}
操作哈希类型的数据
/**
* 操作哈希类型的数据
*/
@Test
public void testHash(){// hset hget hkeys hvalsHashOperations hashOperations = redisTemplate.opsForHash();
​//插入hashOperations.put("100", "name", "tom");hashOperations.put("100", "age", 20);//获取String name = (String) hashOperations.get("100", "name");System.out.println(name);
​//获取所有哈希valueList values = hashOperations.values("100");System.out.println(values);
​//删除某个哈希keyhashOperations.delete("100", "age");
​//获取所有哈希keySet keys = hashOperations.keys("100");System.out.println(keys);
}
操作列表类型的数据
/**
* 操作列表类型的数据
*/
@Test
public void testList() {// lput lrange rpop llenListOperations listOperations = redisTemplate.opsForList();
​//左侧插入listOperations.leftPushAll("mylist", "a", "b", "c");listOperations.leftPush("mylist", "d");//范围获取List mylist = listOperations.range("mylist", 0, -1);System.out.println(mylist);//右侧弹出String mylist1 = (String) listOperations.rightPop("mylist");System.out.println(mylist1);//获取长度Long mylist2 = listOperations.size("mylist");System.out.println(mylist2);
}
操作集合类型的数据
/*** 操作集合类型的数据*/
@Test
public void testSet() {//sadd smembers scard sinter sunion sremSetOperations setOperations = redisTemplate.opsForSet();
​//插入setOperations.add("set1", "a", "b", "c", "d");setOperations.add("set2", "a", "b", "x", "y");//获取所有元素Set set1 = setOperations.members("set1");System.out.println(set1);//获取交集Set intersect = setOperations.intersect("set1", "set2");System.out.println(intersect);//获取并集Set union = setOperations.union("set1", "set2");System.out.println(union);//删除元素setOperations.remove("set1", "a", "b");//获取元素个数Long size1 = setOperations.size("set1");System.out.println(size1);
​
}
操作有序集合类型的数据
/*** 操作有序集合类型的数据*/
@Test
public void testZset() {// zadd zrange zincrby zremZSetOperations zSetOperations = redisTemplate.opsForZSet();
​// 添加zSetOperations.add("zset1", "a", 10);zSetOperations.add("zset1", "b", 12);zSetOperations.add("zset1", "c", 9);// 获取某个范围内的元素Set zset1 = zSetOperations.range("zset1", 0, -1);System.out.println(zset1);// 增加权重zSetOperations.incrementScore("zset1", "c", 10);// 删除zSetOperations.remove("zset1", "a", "b");
​Set zset2 = zSetOperations.range("zset1", 0, -1);System.out.println(zset2);
}
​
​
​
通用命令操作
/*** 通用命令操作*/
@Test
public void testCommon() {// keys exists type det
​// 获取所有的keySet keys = redisTemplate.keys("*");System.out.println(keys);
​// 某个key是否存在Boolean name = redisTemplate.hasKey("name");Boolean set1 = redisTemplate.hasKey("set1");System.out.println(name);System.out.println(set1);
​//查看key中value的类型for (Object key: keys){DataType type = redisTemplate.type(key);System.out.println(type);}
​//删除keyredisTemplate.delete("mylist");
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/815083.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端三剑客 —— JavaScript (第八节)

目录 内容回顾&#xff1a; 事件对象 事件对象 事件对象的方法和属性 案例-移动DIV 案例-图片轮换 Ajax 内容回顾&#xff1a; 事件对象 1.1 什么是事件驱动 1.2 事件绑定 事件源&#xff1a;发生事件的源对象 事件对象&#xff1a;它包含了事件所有的信息&#xff0c;它…

[攻防世界]Reversing-x64Elf-100

1.查壳 无壳&#xff0c;ELF文件 2.用IDA64打开 找到关键部分 这里有坑&#xff0c;看清楚v3是长度为3数组&#xff0c;里面放三个字符串 3.脚本解密 v1"Dufhbmf" v2"pGimos" v3"ewUglpt" v4[v1,v2,v3] a1[0,0,0,0,0,0,0,0,0,0,0,0] for i …

使用cmake进行打包,包含可执行程序和动态依赖库

平常代码开发中&#xff0c;有时候需要将写的程序打包成压缩包放到目标设备上进行运行测试。用CMake管理工程&#xff0c;实现使用make -jnproc package指令可以将工程进行打包&#xff0c;可执行文件存储在bin文件夹中&#xff0c;依赖库存储在lib文件夹中。 示例 1.工程目录结…

算法打卡day41|动态规划篇09| Leetcode198.打家劫舍、213.打家劫舍II、337.打家劫舍 III

算法题 Leetcode 198.打家劫舍 题目链接:198.打家劫舍 大佬视频讲解&#xff1a;198.打家劫舍视频讲解 个人思路 偷还是不偷&#xff0c;这取决于前一个和前两个房是否被偷了&#xff0c;这种存在依赖关系的题目可以用动态规划解决。 解法 动态规划 动规五部曲&#xff1…

B端系统:控制台图表的十大常见类型,附精美案例

大家伙&#xff0c;我是大千UI工场&#xff0c;专注UI分享和项目接单&#xff0c;本期带来控制台图表的常见类型&#xff0c;欢迎大家关注、互动交流。 B端系统控制台的图表类型有很多种&#xff0c;常见的包括&#xff1a; 折线图&#xff1a;用于显示随时间变化的数据趋势&a…

Spring Boot 学习(3)——Spring Initializr 创建项目问题解决

产生问题的原因&#xff0c;各种的版本都较老&#xff0c;所以导致出现问题。目前暂未打到合适的教程&#xff0c;按老教程学起来先。 小白瞎学&#xff0c;大神勿喷&#xff01; 再次强调环境&#xff1a;maven 3.3.9、jdk 1.8、idea 2017、Spring 4.3.13、Spring Boot 1.5.…

【动态规划 区间dp 位运算】100259. 划分数组得到最小的值之和

本文涉及知识点 动态规划 区间dp 位运算 LeetCode100259. 划分数组得到最小的值之和 给你两个数组 nums 和 andValues&#xff0c;长度分别为 n 和 m。 数组的 值 等于该数组的 最后一个 元素。 你需要将 nums 划分为 m 个 不相交的连续 子数组&#xff0c;对于第 ith 个子数…

设计者模式之中介者模式(下)

3&#xff09;中介者与同事类的扩展 1.结构图 新增了具体同事类Label和具体中介者类SubConcreteMediator。 2.代码实现 //文本标签类&#xff1a;具体同事类 public class Label extends Component {public void update() {System.out.println("文本标签内容改变&#…

鉴权设计(一)———— 登录验证

1、概述 网站系统出于安全性的考虑会对用户进行两个层面的校验&#xff1a;身份认证以及权限认证。这两个认证可以保证只有特定的用户才能访问特定的数据的需求。 本文先实现一个基于jwt拦截器redis注解实现的简单登录验证功能。 2、设计思路 jwt用于签发token。 拦截器用于拦…

南京观海微电子---二极管钳位电路

在选择电阻器和电容器时&#xff0c;您必须注意电容器的放电时间&#xff0c;因为它会保持波形的时间段。它必须比时间段的一半大得多&#xff0c;以便电容器放电缓慢。电解电容器不应用于钳位电路&#xff0c;因为它们的充电和放电速度很慢。放电时间&#xff08;&#xff09;…

容器镜像进阶

Dockerfile 编写注意事项&#xff1a; 选择合适的基础镜像&#xff0c;没必要追求镜像的绝对大小。 alpine镜像不推荐&#xff0c;尤其是编译型业务&#xff0c;因为alpine镜像内置的musl libc库与标准的glibc不一样。 如果就是想使用alpine镜像&#xff0c;推荐多阶段构建&am…

2023-2024年科技行业主要变化趋势梳理与总结

一、主要大额并购案例并购原因 &#xff08;一&#xff09;产品线补充与业务市场拓展&#xff08;如VMware、Activision Blizzard并购案&#xff09; &#xff08;二&#xff09;技术整合&#xff08;如Spunk并购案&#xff09;、 &#xff08;三&#xff09;优化运营以期溢…

分类预测 | Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量机数据分类预测

分类预测 | Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量机数据分类预测 目录 分类预测 | Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量机数据分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量…

C++ 红黑树模拟实现

&#x1f493;博主CSDN主页:麻辣韭菜&#x1f493;   ⏩专栏分类&#xff1a;C知识分享⏪   &#x1f69a;代码仓库:C高阶&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多C知识   &#x1f51d;&#x1f51d; 前言 前面我们实现了AVL树&#xff0c;发明AVL树…

AI大模型探索之路-实战篇:基于CVP架构-企业级知识库实战落地

目录 前言 一、概述 二、本地知识库需求分析 1. 知识库场景分析 2. 知识库应用特点 3. 知识库核心功能 三、本地知识库架构设计 1. RAG架构分析 2. 大模型方案选型 3. 应用技术架构选型 4. 向量数据库选型 5. 模型选型 三、本地知识库RAG评估 四、本地知识库代码落地 1. 文件…

一文了解LangChain的记忆模块(理论实战+细节)

大多数LLM应用程序都有一个会话接口。会话的一个重要组成部分是能够参考会话早期的信息&#xff08;上文信息&#xff09;。这种存储过去互动信息的能力就称为“记忆&#xff08;Memory&#xff09;”。LangChain提供了许多用于向系统添加Memory的封装。 目前 LangChain 中大多…

OJ 连续数的和 球弹跳高度的计算【C判断是否为完全平方数】【格式输出%g输出全部小数部分】

连续数的和 判断是否为完全平方数有两种方法 1.遍历所有小于该数的整数&#xff0c;有一个满足平方与该数相等&#xff0c;则是完全平方数 2.用sqrt()或pow()函数对该数开方&#xff0c;取整&#xff08;舍去小数部分&#xff09;&#xff0c;再平方&#xff0c;与该数相等则…

nodejs解析url参数

需要引入 url 模块&#xff1b; var http require(http); var url require(url);http.createServer(function (req, res) {res.writeHead(200, {Content-Type: text/plain});// 解析 url 参数var params url.parse(req.url, true).query;res.write("name: " par…

初学python记录:力扣705. 设计哈希集合

题目&#xff1a; 不使用任何内建的哈希表库设计一个哈希集合&#xff08;HashSet&#xff09;。 实现 MyHashSet 类&#xff1a; void add(key) 向哈希集合中插入值 key 。bool contains(key) 返回哈希集合中是否存在这个值 key 。void remove(key) 将给定值 key 从哈希集合…

Linux部署自动化运维平台Spug

文章目录 前言1. Docker安装Spug2 . 本地访问测试3. Linux 安装cpolar4. 配置Spug公网访问地址5. 公网远程访问Spug管理界面6. 固定Spug公网地址 前言 Spug 面向中小型企业设计的轻量级无 Agent 的自动化运维平台&#xff0c;整合了主机管理、主机批量执行、主机在线终端、文件…