redis缓存数据库详解(二):redis的数据结构及基础命令

【Redis | 1】Redis如何删除指定DB 用docker 运行了一个redis容器,怎么用命令删除redis 的指定的db数据缓存? 阅读详情

作为一个稀有的Java妹子,所写的所有博客都只是当作自己的笔记,留下证据自己之前是有用心学习的~哈哈哈哈(如果有不对的地方,也请大家指出,不要悄悄咪咪的不告诉我)

1.redis的数据结构

redis数据库不像mysql关系型数据库,使用表来存放数据,redis是使用key-value的形式来存放数据的,支持的数据类型有:String,list,set,zset,hash。

2.String类型的相关命令

字符串类型 是 Redis 最基础的数据结构。字符串类型 的值实际可以是 字符串(简单 和 复杂 的字符串,例如 JSON、XML)、数字(整数、浮点数),甚至是 二进制(图片、音频、视频),但是值最大不能超过 512MB。

命令解释
set存放值
get获取值
mset存放多个值
mget获取多个值
append追加到现有的值后面
incr使值递增1
incrby使值递增指定数字
incebyfloat使值递增指定数字,浮点型
decr使值递减1
decrby使值递减指定数字
getrange获取从起始下标到结束下标之间的值
setNX当key不存在时保存,存在则什么也不做

示例:

1.set key value [ex seconds] [px milliseconds] [nx|xx]

set 命令有几个选项:

ex seconds:为 键 设置 秒级过期时间。
px milliseconds:为 键 设置 毫秒级过期时间。
nx:键必须 不存在,才可以设置成功,用于 添加。
xx:与 nx 相反,键必须 存在,才可以设置成功,用于 更新。

//set key value PX|EX 过期时间(PX后面跟的是毫秒,EX是秒)
127.0.0.1:6379> set name jack EX 100
OK

2.get

127.0.0.1:6379> get name
"jack"

3.mset

//一次存放两个key
127.0.0.1:6379> mset age 18 tall 1.87
OK

4.mget

//一次获取两个key
127.0.0.1:6379> mget age tall
1) "18"
2) "1.87"

5.append

//在刚才设置的name后面追加chen
127.0.0.1:6379> append name chen
(integer) 8
127.0.0.1:6379> get name
"jackchen"
127.0.0.1:6379>

6.incr、incrby、incebyfloat

incr 命令用于对值做 自增操作,返回结果分为三种情况:
值不是 整数,返回 错误。
值是 整数,返回 自增 后的结果。
键不存在,按照值为 0 自增,返回结果为 1。

127.0.0.1:6379> set i 1
OK
127.0.0.1:6379> incr i
(integer) 2
127.0.0.1:6379> get i
"2"
127.0.0.1:6379> incrby i 5
(integer) 7
127.0.0.1:6379> get i
"7"
127.0.0.1:6379> incrbyfloat i 1.1
"8.1"
127.0.0.1:6379> get i
"8.1"
127.0.0.1:6379>

7.decr、decrby

127.0.0.1:6379> set j 9
OK
127.0.0.1:6379> decr j
(integer) 8
127.0.0.1:6379> get j
"8"
127.0.0.1:6379> decrby j 6
(integer) 2

8.getrange

127.0.0.1:6379> set test hello
OK
127.0.0.1:6379> getrange test 0 3
"hell"
127.0.0.1:6379>

9.setNX

//先设置一个nx的key
127.0.0.1:6379> set nx nx
OK
127.0.0.1:6379> setnx nx nx
//使用setnx再次设置key为nx的,发现没有设置成功,因为已经存在key为nx的值了
(integer) 0
127.0.0.1:6379> setnx hh hh
//设置key为hh的,成功了
(integer) 1
127.0.0.1:6379>

3.列表(list)有序不去重

列表(list)类型是用来存储多个 有序 的 字符串。在 Redis 中,可以对列表的 两端 进行 插入(push)和 弹出(pop)操作,还可以获取 指定范围 的 元素列表、获取 指定索引下标 的 元素 等。列表 是一种比较 灵活 的 数据结构,它可以充当 栈 和 队列 的角色,在实际开发上有很多应用场景。

命令解释
lpush在列表头部添加一个或多个值
rpush在列表尾部添加一个或多个值
lpop移除头部一个值
rpop移除尾部一个值
lrange获取起始位置到结束位置之间的值
lindex获取指定下标的值
llen获取列表的长度
ltrim截取列表
brpop阻塞的取元素

使用场景

命令场景
lpush + lpopStack(栈)
lpush + rpopQueue(队列)
lpush + brpopMessage Queue(消息队列)

示例:

1.lpush

127.0.0.1:6379> lpush mylist hello bye good
(integer) 3

2.lrange

//获取列表中的所有元素
127.0.0.1:6379> lrange mylist 0 -1
1) "good"
2) "bye"
3) "hello"

3.rpush

127.0.0.1:6379> rpush mylist yes
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "good"
2) "bye"
3) "hello"
4) "yes"

4.lpop

127.0.0.1:6379> lpop mylist
"good"
127.0.0.1:6379> lrange mylist 0 -1
1) "bye"
2) "hello"
3) "yes"

5.rpop

127.0.0.1:6379> rpop mylist
"yes"
127.0.0.1:6379> lrange mylist 0 -1
1) "bye"
2) "hello"

6.lindex

127.0.0.1:6379> lindex mylist 0
"bye"

7.llen

127.0.0.1:6379> llen mylist
(integer) 2

8.brpop key timeout

timeout为0表示一直挂起,直到集合中有元素了取到返回,多个客户端从列表中阻塞取元素时,先连接的等有元素了会先取到

//新建一个列表,往列表里添加两个元素
127.0.0.1:6379> lpush listtest aaa bbb
(integer) 2
127.0.0.1:6379> lrange listtest 0 -1
1) "bbb"
2) "aaa"
//开启另一个客户端,阻塞的取
127.0.0.1:6379> brpop listtest 0
1) "listtest"
2) "aaa"
//再取一次,这时候列表为空了
127.0.0.1:6379> brpop listtest 0
1) "listtest"
2) "bbb"
//当列表为空,再次取的时候,就会一直挂起
127.0.0.1:6379> brpop listtest 0

//再打开一个客户端,也阻塞的取元素
127.0.0.1:6379> brpop listtest 0

//然后往列表里添加,这时第一个阻塞的客户端会获取元素
127.0.0.1:6379> lpush listtest jiji
(integer) 1
127.0.0.1:6379> brpop listtest 0

1) "listtest"
2) "jiji"
(107.15s)这里会有一个等待的时间

4.set

集合(set)类型也是用来保存多个 字符串元素,但和 列表类型 不一样的是,集合中 不允许有重复元素,并且集合中的元素是 无序的,不能通过 索引下标 获取元素。

命令解释
sadd添加一个或多个值
srem移除一个或多个值
scard获取集合的长度
sismember查看集合中是否包含某个值
smembers获取所有元素
sinter取多个集合的交集
suinon取多个集合的并集
sdiff取多个集合的差集

1.sadd

127.0.0.1:6379> sadd set1 aa bb cc
(integer) 3
127.0.0.1:6379> smembers set1
1) "aa"
2) "cc"
3) "bb"

2.srem

127.0.0.1:6379> srem set1 aa
(integer) 1
127.0.0.1:6379> smembers set1
1) "cc"
2) "bb"

3.scard

127.0.0.1:6379> scard set1
(integer) 2

4.sismember

127.0.0.1:6379> sismember set1 hh
(integer) 0
127.0.0.1:6379> sismember set1 cc
(integer) 1

5.sinter

127.0.0.1:6379> sadd set1 aa bb cc
(integer) 1
127.0.0.1:6379> sadd set2 bb hh nn
(integer) 3
(integer) 3
127.0.0.1:6379> sinter set1 set2
1) "bb"

6.sunion

127.0.0.1:6379> sunion set1 set2
1) "aa"
2) "bb"
3) "cc"
4) "nn"
5) "hh"

7.sinterstore将交集存储到redis中

127.0.0.1:6379> sinterstore inter set1 set2
(integer) 1
127.0.0.1:6379> smembers inter
1) "bb"

5.sorted set 有序去重

1.sorted set也被叫做zset,因为命令都是以z开头,与set的结构基本是一样的,命令也是类似的。
2.zset是有序的,每个元素都要设置权重值,权重值是可以重复的,但元素是不重复的。

命令解释
zadd添加一个或多个值
zrem移除一个或多个值
zcard获取集合的长度
zrange获取起始位置到结束位置之间的元素

1.zadd

//这里添加了两个bb,之前说过zset是去重的,实际上只会存在一个bb,第二次只是更新了权重值
 127.0.0.1:6379> zadd myset 1 aa 2 bb 3 bb 4 cc
(integer) 3
127.0.0.1:6379> zrange myset 0 -1
1) "aa"
2) "bb"
3) "cc"

2.zrem

127.0.0.1:6379> zrem myset aa
(integer) 1
127.0.0.1:6379> zrange myset 0 -1
1) "bb"
2) "cc"

3.zcard

127.0.0.1:6379> zcard myset
(integer) 2
Redis数据结构详解及不同场景应用指南 Redis是一个开源的、基于内存的键值存储系统,支持持久化到磁盘。它以其高性能、丰富的数据结构和灵活的扩展性而闻名。Redis的常见用途包括缓存、会话存储、消息队列、实时分析等。Redis的丰富数据结构使其成为解决多种问题的强大工具。通过合理选择数据结构,可以显著提高应用的性能和可扩展性。字符串:缓存、计数器。哈希:存储对象数据。列表:消息队列、最新消息列表。集合:标签系统、去重数据存储。有序集合:排行榜、优先级队列。 阅读详情

相关推荐

Redis-缓存穿透、缓存雪崩、缓存击穿详解

redis有关缓存穿透、缓存雪崩、缓存击穿的详解

m0_58684211的博客 1655

Redis缓存数据库(一)

随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴漏了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题,包括超大规模数据的存储。(例如谷歌每天为它们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。泛指非关系型的数据库。

杀神lwz的博客 755

缓存数据库redis

redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统。和Memcached类似,但很大程度补偿了memcached的不足,它支持存储的value类型相对更多。技术博客http://blog.youkuaiyun.com/zcjfzcjf

Redis缓存数据库表(JSON格式value设计)

确保Redis和数据库的数据保持同步。当数据库中的数据发生变化时,需要更新Redis中的缓存数据。这通常可以通过数据库触发器、消息队列或应用程序逻辑来实现。设置合适的过期时间。过期时间太短可能导致频繁地从数据库中读取数据,而过期时间太长可能导致Redis中存储了过时的数据。考虑使用Redis的事务或Lua脚本来确保操作的原子性,特别是在更新缓存和数据库时需要保持数据一致性的场景中。监控Redis的内存使用情况,避免因为缓存过多数据而导致内存溢出。

道可道非常道 1104

fdtd(时域有限差分)仿真

基础入门阶段采用 Step by step 的教学方式带着做具体的案例,在案例中学习 FDTD 应用的。的痛难点,将 FDTD 仿真引入实验当中,通过软件可视化处理有效直观的展示仿真的流程,与实验数。图像传感器,OLED 和液晶,表面计量,表面等离子体,石墨烯,太阳能电池,集成光子组件,超材。料,衍射光学和光子晶体。波,场极化,磁场,周期性结构,半球功率积分等设计解决方案,提供时域有限差分分析函数,时域。子光学传感器、热电子光探测器的光学特性研究、光学微腔宽带吸收器等多个方向的研究方法。

y2715163545的博客 5431

python语言下使用opencv接口cv2.VideoCapture()接口调用海康机器人工业相机

文章目录 目录 文章目录 前言 一、opencv接口介绍 二、调用海康机器人工业相机 1.使用海康机器人工业相机的前提 2.调用海康机器人工业相机进行显示 3.调用海康机器人工业相机进行存图 4.调用海康机器人工业相机存视频 5.调用海康机器人工业相机进行简单图像处理 总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下.

qq_39570716的博客 1万+

Redis缓存数据库表(列单独缓存)

​ 在Redis中缓存数据库表数据,而不使用JSON结构来表示value,通常意味着我们会将数据库表的每一行数据映射为Redis中的一个或多个键值对。下面是一个简单的Java示例,展示了如何使用Jedis库来缓存数据库表的部分数据。​ 这个示例没有包含实际的数据库访问代码,因为这取决于你使用的具体数据库和ORM框架。在实际应用中,你会从数据库中获取。字段,所以如果你需要它,你需要从数据库获取或根据业务需求处理。方法获取,如果Redis中没有,再回退到数据库查询。​ 在这个例子中,我们创建了一个。

道可道非常道 884

FICO F.27 Customer statement 打印

需求,定制化打印,替换标准的F.27打印 类似于采购订单的打印,但是略有不同,查阅资料之后步骤如下: T-code F.27 is SAP standard program to produce customer/vendor correspondence (letter). Correspondence Type is used to specify the related printing program and form for the particular correspondence. SAP

IamRunjiang的博客 1963

05-使用Redis缓存数据,管理员相关数据表

使用Redis可以提高查询效率,一定程度上可以减轻数据库服务器的压力,从而保护了数据库。通常,应用Redis的场景有:一旦使用Redis,就会导致Redis和数据库中都存在同样的数据,当数据发生变化时,可能出现不一致的问题!所以,还有某些数据在特定的场景中不能使用Redis:需要学会评估是否要求数据一定保持一致!要使用Redis缓存数据,至少需要:在使用Redis之前,还必须明确一些问题:暂定目标:在创建接口,并在接口中添加抽象方法: 然后在创建(接口的实现类),实现以上接口: 完成后,测试: 然后,需要修

qq_54781283的博客 763

使用 C# 开发海康设备实时视频流的监控与报警系统

本文介绍了如何使用C#结合海康威视SDK(HCNetSDK)开发安防监控系统,涵盖设备登录、视频流获取、报警处理和云台控制等核心功能。内容包括开发环境配置、系统架构设计、关键代码实现(如设备登录、实时视频播放、报警设置)以及用户界面设计。通过Windows Forms/WPF,开发者可构建完整的监控应用,实现设备管理、视频监控、报警响应等功能。系统采用模块化设计,便于扩展和维护,适用于各类安防场景。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1355

安装anaconda3时出现错误:Failed to link extracted packages to D:\anaconda!...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1477

Redis缓存数据和表数据一致性之延迟双删策略

延迟1是为了等待更新数据表动作完成、2是为了等待更新数据表之前查询查到的旧数据写入缓存动作完成,最后再把写入缓存的旧数据删除。当请求1执行删除缓存数据后,还未来得及更新数据表或更新动作还未完成,此时请求2查询到数据表中仍然是更新之前的数据、并把脏数据写入了Redis缓存。当请求1执行update更新数据表后,还未来得及删除缓存数据或删除缓存动作还未完成,此时请求2查询到Redis缓存中仍然是旧数据、并返回给前端。3、Redis适用的是读频率远远大于改频率的数据表,不适合改频率大于读频率的数据。

hkl_Forever的博客 4750

【ODX介绍】-4.2-UDS诊断$27服务在ODX-D诊断描述文件中如何描述

共25页精讲:附ODX-D XML:UDS $27 Security服务0x61和0x62 Sub-Function,其它Sub-Function可参照其格式。 目录 1 ODX-D描述一个UDS $27 Security服务Sub-Function的结构 2 标签DIAG-SERVICE描述的内容 2.1 举例:DIAG-SERVICE的XML描述 3 标签REQUEST描述的内容 3.1 举例:REQUEST的XML描述 4 标签POS-RESPONSE描述的内容 4.1 举例:PO..

「汽车电子助手」的博客 1121

【Redis】Redis基础命令集详解

此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。当数据量很大时,count 的数量的指定可能会不起作用,Redis 会自动调整每次的遍历数目。

Etui۹(・༥・´)و的博客 5万+

从自然语言到PCB设计:DeepSeek与Altium协同自动化实战指南

摘要:在电子设计领域,将自然语言需求转化为PCB设计图是实现自动化设计的重要目标。受限于当前NLP和EDA技术,通过DeepSeek直接生成完整PCB设计图尚无法实现,但在设计辅助环节已展现实用价值。本文深入分析技术可行性,提出"自然语言→设计约束→脚本生成→人工验证"的人机协同工作流。通过28个完整代码示例、12张技术图表及5个工程案例,详细展示DeepSeek解析需求、生成设计约束,并结合Altium Designer API实现元件放置、规则设置、DRC校验的全流程。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1759

基于深度学习的生活垃圾检测与分类系统:YOLOv5、YOLOv6、YOLOv7与YOLOv8实现

本项目的目标是开发一个基于YOLO系列模型的生活垃圾检测与分类系统。数据集准备与标注:收集并标注生活垃圾图像数据集。模型训练:使用YOLOv5、YOLOv6、YOLOv7、YOLOv8等深度学习模型训练垃圾分类系统。UI界面设计:设计一个简洁的用户界面,支持图像或视频的上传与垃圾分类结果展示。实时垃圾检测与分类:通过摄像头进行实时垃圾检测和分类。结果展示与保存:展示检测结果,支持用户保存分类后的图像或视频。

YOLO 705

Redis基础命令集详解

Redis基础命令集详解

weixin_43064747的博客 1614

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

redis设置database 不生效剖析

redis 设置database 不生效原因剖析

爱媳妇儿爱编程 6567

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

android 蓝牙通讯demo

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

Redis终极入门指南:万字解析帮你从零基础到掌握命令与五大数据结构

Redis终极入门指南:从零基础到掌握命令与五大数据结构,万字全解析!一篇带你掌握所有Redis的基本命令!

小菜的博客 2393

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Redis更新缓存的正确姿势(先更新DB,再删除缓存)

1.更新缓存的三种模式 引入缓存势必会导致数据的一致性问题(因为分别存放到缓存以及DB),那么在数据更新时,缓存和DB都得更新,并且更新时序的不同会导致不同的结果。关于数据更新目前业界已经沉淀了Cache Aside Pattern,Read/Write through,Write Behind Caching等三种方式。 Cache Aside :同时更新缓存和数据库; Read/Write Through:先更新缓存,缓存负责同步更新数据库; ...

Java后端技术栈 7572

Redis数据结构详解:从基础到特殊类型

Redis作为一个高性能的键值对数据库,其丰富的数据结构是其最大的特点之一。本文将详细介绍Redis的5种基础数据结构和3种特殊数据结构,并通过图文并茂的方式帮助读者深入理解。Redis丰富的数据结构使其能够应对各种复杂的业务场景。在实际开发中,选择合适的数据结构不仅能提高开发效率,还能显著提升系统性能。希望通过本文的介绍,读者能够对Redis的数据结构有更深入的了解,并在实际项目中合理运用。温馨提示:在实际使用时,需要根据具体的业务场景和数据特点,选择最合适的数据结构,同时也要注意内存占用和性能的平衡。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 1183

Redis常用数据结构及命令详解:从基础到进阶

Redis作为一款高性能的键值存储系统,凭借其丰富的数据结构和灵活的用法,被广泛应用于缓存、队列、计数器等场景。Redis提供了多种数据结构,每种结构都有其独特的特性和适用场景。本文将详细介绍Redis的几种常用数据结构,并指出使用时的注意事项,帮助开发者更好地掌握Redis的使用技巧。

z2637305611的博客 1387

redis基础命令

Redis(Remote Dictionary Server)是一个开源的高性能键值存储系统。它由 Salvatore Sanfilippo 开发,支持多种类型的数据结构,如字符串(strings)、列表(lists)、集合(sets)、有序集合(sorted sets)、哈希(hashes)、地理空间索引(geospatial indexes)等。Redis 适用于缓存、会话存储、实时分析等多种应用场景,是现代应用程序中非常受欢迎的数据库之一。

x0_5904的博客 2229

Redis、MySQL、hive、hbase的区别以及数据库及数据仓库的比较

redis:分布式缓存,强调缓存,基于内存 传统数据库:注重关系,注重事务性 hbase:列式数据库,字典查询,稀疏性存储,无法做关系数据库的主外键,用于存储海量数据,底层基于hdfs hive:数据仓库工具,底层是mapreduce。不是数据库,不能用来做用户的交互存储 HBase和Redis都是基于Key、Value的数据库。 ...

qq_39682761的博客 7456

Redis缓存架构详解

一般开发中我们都会使用 Redis 作缓存,提高查询效率,但 Redis 缓存在使用时还会有很多问题,如,缓存穿透,击穿,雪崩等。一般对于不同的业务我们使用不同的缓存结构。1、对于并发几率很小的数据(如个人维度的订单数据、用户数据等),这种几乎不用考虑这个问题,很少会发生 缓存不一致,可以给缓存数据加上过期时间,每隔一段时间触发读的主动更新即可。2、就算并发很高,如果业务上能容忍短时间的缓存数据不一致(如商品名称,商品分类菜单等),缓存加上过期 时间依然可以解决大部分业务对于缓存的要求。

. 1611
上一篇: redis缓存数据库详解(一):config文件详解
下一篇: redis缓存数据库详解(三):redis的持久化
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值