Redis深度历险(2)-基本操作

Redis 深度历险:如何使用 Redis 来实现简单限流策略 限流算法在分布式领域是一个经常被提起的话题,当系统的处理能力有限时, 如何阻止计划外的请求继续对系统施压,这是一个需要重视的问题。老钱在这里用“断 尾求生”形容限流背后的思想,当然还有很多成语也表达了类似的意思,如弃卒保车、 壮士断腕等。 除了控制流量,限流还有一个应用目的是控制用户行为,避免垃圾请求。比如 在 UGC 社区,用户的发帖、回复、点赞等行为都要严格受控,一般要严格限定某行 为在规定时... 阅读详情

目录

一、Redis的数据存储类型

二、string常用操作

     1、set key value

     2 、get key

     3、getset key value

     4、incr key

     5、decr key

     6、incrby key number

     7、decrby key number

     8、append key v

     9、del key

     10、keys *

三、hash常用操作

1、hset key field value

2、hgetall key

3、hget key field

4、hmset key fields

5、hmget key fileds

6、hexists key field

7、hlen key

8、hdel key

9、hkeys key

10、hlen key

11、hincrby key field increment

四、list常用操作

1、实现右进左出队列

rpush java python go

lpop

2、实现右进右出栈

rpush java python go

rpop

3、返回list长度

llen listName

4、获取特定位置的内容

lindex listName number

5、获取范围内所有内容

lrange listName beginIndex endIndex

6、截取范围内内容

ltrim beginIndex endIndex

五、set常用操作

1、添加元素 

sadd  filed key

2、获取全部元素

smembers filed

3、查询是否存在

sismember field key

4、获取长度

scard filed

5、弹出元素

spop filed

2.补充:数据类型底层实现

1.string、list、hash、set、zset的底层数据结构

2.string的扩容操作

3.hash的拉链法、渐进式rehash、双hashtable

4.zset为什么采用跳表作为底层实现



一、Redis的数据存储类型

   Redis一共有5种数据类型,分别是string(字符串),hash(哈希),list(链表),set(无序不重复集合),zset(有序不重复集合)

 

二、string常用操作

字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这 便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。 在Redis中字符串类型的Value最多可以容纳的数据长度是512M。

     1、set key value

设 定key持有指定的字符串value,如果该key存在则进行覆盖 操作。总是返回”OK”

     2 、get key

获取key的value。如果与该key关联的value不是String类型,redis 将返回错误信息,因为get命令只能用于获取String value;如果该key不存在,返 回null。

     3、getset key value

先获取该key的值,然后在设置该key的值。

     4、incr key

将该key的value值自增1,如果这个key不存在就会创建一个值为“1”的key,如果该key的值经过转换后不是数字,那么会报错

     5、decr key

key的value值自减1

     6、incrby key number

key的value值增长number

     7、decrby key number

key的value值减少number

     8、append key v

key的value值后面附加上v,相当于两字符串拼接

     9、del key

删除某个key

     10、keys *

查看所有key

三、hash常用操作

Redis中的Hashes类型可以看成具有String Key和String Value的map容器。所 以该类型非常适合于存储值对象的信息。如Username、Password和Age等。如果 Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash 可以存储4294967295个键值对。

1、hset key field value

为指定的key设定field/value对(键值对)。

 

2、hgetall key

获取key中的所有filed-vaule

3、hget key field

返回指定的key中的field的值

4、hmset key fields

设置key中的多个filed/value

5、hmget key fileds

获取key中的多个filed的值

6、hexists key field

判断指定的key中的filed是否存在

7、hlen key

获取key所包含的field的数量

8、hdel key

删除某个key

9、hkeys key

查看某个key

10、hlen key

获取key所包含的field的数量

11、hincrby key field increment

设置key中filed的值增加increment,如:age 增加20

 

四、list常用操作

1、实现右进左出队列

rpush java python go

lpop

2、实现右进右出栈

rpush java python go

rpop

3、返回list长度

llen listName

4、获取特定位置的内容

lindex listName number

5、获取范围内所有内容

lrange listName beginIndex endIndex

6、截取范围内内容

ltrim beginIndex endIndex

 

五、set常用操作

1、添加元素 

sadd  filed key

2、获取全部元素

smembers filed

3、查询是否存在

sismember field key

4、获取长度

scard filed

5、弹出元素

spop filed

 

 

六、补充:数据类型底层实现

1.string、list、hash、set、zset的底层数据结构

1.string的底层基于字节数组(长度以范型T修饰,可被初始化为byte或short,以节约空间),其字符串的大小是可变的,类似于Java中的ArrayList
2.list的底层是一个双线链表,类似Java中的LinkedList
3.hash的底层是数组+链表,采用拉链法解决冲突,类似Java中的HashMap
4.set的底层是hash,set的值即为hash的key,所以不能重复
5.zset的底层是跳表

2.string的扩容操作

string会在创建时分配一个最大容量capacity,当当前数量len要大于capacity时,会进行扩容操作:
1.当字符串大小 < 1MB 时,每次成倍扩容
2.当字符串大小 >= 1MB 时,每次以1MB为增量扩容,最大不能超过512M
(为了节约空间,字符串大小不同时会采用不同的格式存储)

3.hash的拉链法、渐进式rehash、双hashtable

hash的设计十分巧妙,它在扩容时,不像HashMap那样全量rehash,将所有的index重新计算哈希值和新索引值放入新数组中,而是通过渐进式rehash来达到性能优化的目的:在hash结构中存在两个haashtable,一个是旧的,一个是新的。在发生扩容时,会先将一部分rehash到新是hashtable中,而其他部分仍保留在旧hashtable中,剩余的数据将被定时器转移或在之后的操作中再逐步将其转移到新的哈希表。

4.zset为什么采用跳表作为底层实现

因为zset必须保证有序,那么有两种方案,第一种是采用有序数组,这种方案能够用二分法做到插入有序,但是考虑到需要动态扩展大小,所以不能使用数组;第二种是采用有序链表,可以动态扩展大小,但是不能够快速地找到插入点;第三种是采用跳表,它结合来有序数组快速找到插入点的优点和链表动态扩展的优点,做到来O(logn)时间复杂度即可插入数据并且使其有序。

 

Redis 深度历险: 核心原理和应用实践 1.Redis 可以做什么? Redis 的业务应用范围非常广泛,让我们以掘金技术社区(juejin.im)的帖子模块为实 例,梳理一下,Redis 可以用在哪些地方? 1、记录帖子的点赞数、评论数和点击数 (hash)。 2、记录用户的帖子 ID 列表 (排序),便于快速显示用户的帖子列表 (zset)。 3、记录帖子的标题、摘要、作者和封面信息,用于列表页展示 (hash)。 ... 阅读详情

相关推荐

Simulink实战:火电机组一次调频与AGC协同控制建模与仿真解析

本文详细解析了如何使用Simulink进行火电机组一次调频与AGC协调控制的建模与仿真。通过系统架构设计、参数设置和模块实现,阐述了如何实现两者的协同控制,确保电网频率稳定。文章提供了实用的建模技巧、参数整定经验和性能评估方法,为电力系统仿真工程师提供了有价值的实践指导。

c7d8e9的博客 310

Redis基本操作命令(图文详解)

文章目录Redis操作命令1.1 Redis基本操作命令1.2 Redis的key的操作命令1.3 redis数据类型操作命令1.3.1 字符串类型string1.3.1.1 基本命令1.3.1.2 常用命令1.3.2 哈希类型hash1.3.2.1 基本命令1.3.2.2 常用命令1.3.3 list列表1.3.3.1 基本命令1.3.3.2 常用命令1.3.4 集合类型set1.3.4.1 基本命令1.3.4.2 常用命令1.3.5 有序集合类型zset1.3.5.1 基本命令1.3.5.2 常用命令

Luna_A的博客 2万+

从理想光源到部分相干:Abbe与Hopkins模型在计算光刻中的演进与选择

本文深入探讨了计算光刻中Abbe模型与Hopkins模型的演进与选择,分析了理想光源与部分相干光源在光刻仿真中的关键差异。Abbe模型基于理想点光源假设,计算简洁但存在精度局限;Hopkins模型则通过互强度函数和TCC技术,更准确地模拟现实中的部分相干光源,尤其适用于先进节点光刻工艺。文章还提供了模型选择的实用建议,帮助工程师在精度与效率间取得平衡。

weixin_29217235的博客 300

Redis基本操作介绍

【代码】【无标题】

shine_1965761503的博客 3197

ST-LINK调试STM32H743必看:CubeMX工程中缺失的这行代码导致程序跑飞

本文深入剖析了使用ST-LINK调试STM32H743时,因CubeMX工程中缺失电源电压档位配置代码而导致程序跑飞或出现“Can not access memory”错误的问题。文章解释了H7系列电源与时钟耦合的核心原理,提供了具体的代码修复方案和系统化的调试排查思路,帮助开发者从根本上解决这一常见调试困境。

weixin_29191669的博客 282

LLC型自驱动半桥谐振变换器:电压电流变化与自然换向解析

变换器的工作状态经历了多个阶段,从模态一的关断状态,到模态二和三的电流供电状态,每个阶段都得到了合理的设计和优化。的工作原理,尤其是在半个周期内的电压和电流变化。上图 展示了该变换器在工作时的电压和电流波形,它为我们揭示了变换器如何通过精确的电流和电压控制,优化性能并实现高效能转换。,并根据负载情况调整电流和电压的工作模式,能够极大提升变换器的效率,尤其是在零电压开通和自然换向的设计中,发挥着关键作用。这意味着,电流会随着时间周期的变化,呈现典型的振荡波形,从而达到良好的电流控制。是两个关键的电流变量。

weixin_43199439的博客 281

Redis的基础操作

使用rename命令进行重命名时,无论目标key是否存在都进行重命名,且源key的值会覆盖目标key的值。b、每个元素都会关联–个double类型的分数score(表示权重),可以通过权重的大小排序,元素的score可以相同。String是 redis 最基本的类型,最大能存储 512MB 的数据,String类型是二进制安全的,即可以存储任何数据、比如数字、图片、序列化对象等。redis-benchmark 是官方自带的 Redis 性能测试工具,可以有效的测试 Redis 服务的性能。

Miraitowa_xu的博客 1196

【YOLO26科研级突破】集成BiFPN双向特征金字塔,让多尺度特征融合效率与精度双跃升

打开确保模型解析器能识别BiFPN模块。通过将BiFPN双向特征金字塔集成到YOLO26中,我们实现了一个“全尺度双向特征流动+加权融合+精准检测”的目标检测模型。这个改进不仅在工程上能大幅提升多尺度、复杂场景下的检测精度,更在科研上提供了“双向特征融合”的创新思路——这种思路可以延伸到其他检测网络(如Faster R-CNN、SSD)的Neck模块改进中,帮你在论文中打造独特的研究点。

LXY_LOVE36的博客 201

Redis数据库:概念、安装及常用操作命令

本文主要介绍了Redis数据库的概念、安装和基本操作,如redis-cli命令行工具、redis-benchmark测试工具、对键的操作命令、对数据库的操作命令等,希望对你有帮助!

十七拾的博客 2331

CloudCompare 二次开发(6)——插件中拖拽添加Qt窗口(区域生长算法为例)

手动拖拽的方式搭建Qt对话框界面的制作流程,以PCL中的点云区域生长算法为例进行制作。

点云侠的博客 2153

ardupilot 为什么要采样四元数姿态控制

本节主要说明清楚ardupilot姿态控制为什么要用到四元数,欢迎批评指正!!!

陌城烟雨 1119

redis的基本操作

redis数据库的一些简单操作

m0_50782114的博客 5774

如何跑通SuperPoint+LightGlue的训练代码使用gluefactory进行训练和评估?

🏆本文收录于专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家!持续更新中,up!up!up!!

**My Coding Family** 1786

Redis 深度历险(Redis安装)

前言 对于Redis的使用一直停留着仅会用和使用过的阶段,经历过Redis线上故障导致系统奔溃后,笔者认识到,对于任何在生产工程中使用的基础组件,必须做到知其然,知其所以然。但笔者水平有限,索性借助其他大牛的一些书籍,分享来夯实自己的基础,在Redis学习过程中,笔者看了钱老师的《Redis深度历险·核心原理与应用实战》这本书籍,里面提到了诸多之前未层接触,但非常有用的内容,在学习的过程中,笔者...

麦芒小蚱蜢的博客 349

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

redis深度历险 pdf_Redis深度历险

说明:本文章为书籍《Redis深度历险》的读书笔记,如有侵权,马上删除,不承担任何法律责任。目录:应用原理集群拓展源码应用内容列表:ZSET,分布式锁,HyperLogLog,布隆过滤器1.ZSET 有序列表 sorted set形式value 1 - score 1value 2 - score 2value 3 - score 3数据结构value -> score : HashMaps...

weixin_39787792的博客 1537

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Redis深度历险:掌握核心原理与应用实践

Redis深度历险:掌握核心原理与应用实践 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在当今大数据和云计算的时代,高效的数据存储和处理技术显得尤为重要。Redis,作为一种高性能的键值存储系统,凭借其卓越的性能和丰富的功能,成为了众多开发者和企业的首选。为了帮助广大开发者深入理解和掌握Redis的核心原理与应用实践,我们特别推出了《Redis深度历险:核心原理和应...

gitblog_06645的博客 357

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Redis深度历险——核心原理与应用实践

转自:&nbsp;https://www.toutiao.com/a6587193839872639496/?tt_from=mobile_qq&amp;utm_campaign=client_share&amp;timestamp=1533761453&amp;app=news_article&amp;ut...

南小瓜的专栏 272

重点思维导图------redis深度历险

重点思维导图------redis深度历险 posted @ 2019-05-06 23:41 ff_d 阅读(...) 评论(...) 编辑 收藏

li_haoren的博客 1261

一本《Redis 深度历险》,我能躺挣多少钱?

最近,掘金销量最高的小册《Redis 深度历险》纸质版终于上线了,这是第一本成功纸质化的掘金小册。全书为了保留掘金小册高质量的阅读效果,不惜成本采用了全彩印刷,阅读体...

codehole_的博客 252

《Redis深度历险》笔记

redis使用、原理、数据结构

qq_35572013的博客 847

《Redis深度历险核心原理与应用实践》读书笔记

目录前言基础和应用篇Redis可以做什么5种基础数据结构位图HyperLogLog布隆过滤器限流附件的人或物(GEO)scan原理篇集群篇拓展篇保护Redis 前言 《Redis深度历险核心原理与应用实践》是掌阅服务端技术专家钱文品所著,看完后感觉有点东西。书马上要还了,避免忘记,在此与自己所学结合做个笔记。不涉及源码篇(因为这块没怎么看懂)。 基础和应用篇 Redis可以做什么 1、缓存最近热帖内容(hash)。 2、分布式锁(hash、string)。 3、记录帖子的点赞数,评论数和点击数(has

愤怒的苹果ext的博客 1489

Redis深度历险:核心原理和应用实践

Redis深度历险:核心原理和应用实践 去发现同类优质开源项目:https://gitcode.com/ 欢迎来到Redis深度历险:核心原理和应用实践资源下载页面!这里为您提供了《Redis深度历险:核心原理和应用实践》的压缩文件,内含深入浅出的Redis知识分享。 文件简介 《Redis深度历险:核心原理和应用实践》是一份详尽的资源,涵盖了Redis的核心原理以及在实际应用中的各种实践方法。这...

gitblog_06711的博客 324

学习《Redis深度历险:核心原理和应用实践》的总结(上)

对《Redis深度历险:核心原理和应用实践》(作者:钱文品)这本书的知识进行了自己的理解总结。 目录数据结构字符串数据结构list(列表)内部实现:快速列表hash(哈希)set(集合)zset(有序列表)内部实现:跳表分布式锁解决setnx(抢锁)和expire(给锁设置过期时间,防死锁)的原子操作问题解决业务时长超过锁过期时间的问题redis实现队列利用list实现异步消息队列解决队列空了导致客户端不断调用pop()、产生浪费资源的空轮询问题解决sleep导致的消息延迟问题利用zset实现延时队列Hy

weixin_45887086的博客 203

redis 深度历险 pdf_听童话23丨汤姆索亚历险记

点击听音频《汤姆索亚历险记》《汤姆·索亚历险记》(The Adventures of Tom Sawyer)是美国小说家马克·吐温1876年发表的长篇小说。小说的故事发生在19世纪上半世纪美国密西西比河畔的一个普通小镇上。主人公汤姆·索亚天真活泼、敢于探险、追求自由,不堪忍受束缚个性、枯燥乏味的生活,幻想干一番英雄事业。小说的时代在南北战争前,写的虽是圣彼得堡小镇,但该镇某种程度上可以说...

weixin_39663605的博客 319
上一篇: Redis深度历险(1)-什么是Redis
下一篇: solr学习笔记(2)-Linux下的安装配置
BoringRong
BoringRong 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 2万+粉丝 386原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BoringRong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值