Redis指南【3】 特殊结构和高级用法

Redis高级数据结构 现代计算机用二进制位作为信息的基础单位,1字节=8位,比 阅读详情

前言

上篇文章介绍了redis的入门概念和基本数据结构,在本文中,我们将开始高级数据结构的学习,并看看redis这种还有除了做缓存外,还有哪些高级的应用?

一、三种特殊数据类型

1.1 Bigmaps --位图 (节衣缩食小能手)

位图的出现是为了在一些场景下节约存储空间而应用的, 在存储一些布尔值的时候,只有0 和1 两个状态,例如,用户的签到记录,如用用string 来存储的话,当上亿用户的时候,存储空间是惊人的。而位图其实就像一个byte 数组,每一个字节有8 bit,每个bit 只能存储0 和1 ,这样一年 365 天 用一个46字节的字符串就可以容纳下来。

基本使用:

###setbit getbit bitcount
# 打卡 只需去判断是否为1就可以
127.17.197.44:6379> setbit sign 0 1
(integer) 0
127.17.197.44:6379> setbit sign 1 0
(integer) 0
127.17.197.44:6379> setbit sign 2 0
(integer) 0
127.17.197.44:6379> setbit sign 3 1
(integer) 0
127.17.197.44:6379> setbit sign 4 0
(integer) 0
127.17.197.44:6379> setbit sign 5 1

127.0.0.1:6379[9]> get sign
"\x94"

127.17.197.44:6379> getbit sign 5
(integer) 1

127.17.197.44:6379> bitcount sign
(integer) 3

这里的操作是我们一位一位的赋值,然后通过get 整体取出来,称为“零存整取”。 通过getbit 取出来 称为“零存零取” 。当然 通过字符串 set ,然后getbit 取出来称为 “整存零取”。

通过 查找 和 统计 。

  • bitcount : 统计这个值有多少个1
  • bitpos:查找指定范围内第一个出现的1或0 所在位数
1.2 Hyperloglog
1.2.1 概述

Redis 在2.8.9 版本添加了HyperLogLog 结构。它是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常大时,计算基数所需的空间总是固定的,并且是很小的。在redis中,每个HyperLogLog 键 只需要花费 12kb 内存 ,就可以计算接近2^ 64个不同的基数。 远远节省了内存,但是它只会根据元素来计算基数,而不会存储输入元素本身,所以HyperLogLog 不能像集合那样,返回输入的各个元素。

那么什么是基数呢?

比如,数据集{1,2,3,4,4,7,8,8,8} 基数集合(不重复的个数) {1,2,3,4,7,8} ,基数(基数集合大小)为6。

基数估计就是在误差可接收的范围内,快速计算基数。

1.2.2 应用场景

如果页面访问量非常大,比如 一个爆款页面可能有几千万个浏览量。需要统计浏览页面的总用户个数,就比较麻烦,需要用一个set 集合来存储用户id 。在影响性能的同时,也增大了存储空间。

HyperLogLog 数据结构 提供了不精确的去重计数方案,标准误差为0.81% 。

1.2.3 使用方法
  • pfadd :增加计数
  • pfcount:获取计数
  • pfmerge:将后面键的值加到前面键的值
127.0.0.1:6379[9]> pfadd web user1
(integer) 1
127.0.0.1:6379[9]> pfadd web user2
(integer) 1
127.0.0.1:6379[9]> pfadd web user3
(integer) 1
127.0.0.1:6379[9]> pfcount web
(integer) 3
127.0.0.1:6379[9]> pfadd web user4 user5
(integer) 1
127.0.0.1:6379[9]> pfadd web2 user6 user7
(integer) 1
127.0.0.1:6379[9]> pfcount web web2
(integer) 7
127.0.0.1:6379[9]> pfmerge web web2
OK
127.0.0.1:6379[9]> pfcount web web2
(integer) 7
127.0.0.1:6379[9]> pfcount web 
(integer) 7
127.0.0.1:6379[9]> pfcount web2
(integer) 2
1.2.4 测试

向redis 中插入1w条数据测试下

public static void testHyperLogLog(){
        Jedis jedis = new Jedis("10.240.30.103", 6379);
        jedis.auth("***");
        jedis.select(9);
        for (int i = 0; i < 10000; i++) {
            jedis.pfadd("web","user"+i);
            if(i==9999){
                long total = jedis.pfcount("web");
                System.out.println("总个数:"+(i+1)+"实际个数:"+total);
            }
        }
    }
总个数:10000实际个数:10067

在1w的时候,误差率为0.67%。 小于0.81% 的标准。

1.3 geospatial 地理位置
  • 用于 地图定位,附近的人,打车距离计算等场景

  • GEO存储的数据结构是存放在一个zset集合中,建议使用单独的redis实例部署GEO数据。

  • 只有6个命令:

    • GEOADD :添加
    • GEODIST : 两个位置间距离
    • GEOHASH :返回一个或多个位置的geohash值
    • GEOPOS:获取当前定位
    • GEORADIUS :附近的人,通过半径
    • GEOGEORADIUSBYMEMBER:根据储存在位置集合里面的某个地点获取指定范围内的地理位置集合
  • 添加

127.0.0.1:6379> geoadd china:city 121.47 31.23 shanghai
(integer) 1
127.0.0.1:6379> geoadd china:city 120.16 30.24 hangzhou
(integer) 1
  • 获取当前定位:
127.0.0.1:6379> geopos china:city shanghai hangzhou
1) 1) "121.47000163793563843"
   2) "31.22999903975783553"
2) 1) "120.1600000262260437"
   2) "30.2400003229490224"

两个位置间距离:单位 m ,km, mt,ft

127.0.0.1:6379> geodist china:city shanghai hangzhou
"166761.2770"
127.0.0.1:6379> geodist china:city shanghai hangzhou km
"166.7613"

附近的人,通过半径来找:

127.0.0.1:6379> georadius china:city 120 30 1000 km
1) "hangzhou"
2) "shanghai"

# 限制一个
127.0.0.1:6379> georadius china:city 120 30 1000 km withdist withcoord count 1
1) 1) "hangzhou"
   2) "30.8146"
   3) 1) "120.1600000262260437"
      2) "30.2400003229490224"

二、高级应用

2.1 分布式锁
2.1.1 分布式锁概要

锁,贯穿着我们的学习过程,在并发编程中,我们常常通过加锁来避免由于线程竞争而造成是数据不一致问题,但是Java中的锁往往只能在一个JVM进程内执行,如果在分布式集群下就需要用到分布式锁。

基于分布式锁常用的实现方式有三种:

  • 基于数据库乐观锁实现分布式锁
  • 基于缓存redis等实现分布式锁
  • 基于zookeeper实现分布式锁

今天,我们要来说说redis 中是怎么使用分布式锁的。

2.1.2 redis实现分布式锁

基本命令:

127.0.0.1:6379[9]> setnx lock lei  # 在键不存在情况下,设置key 和value
(integer) 1
127.0.0.1:6379[9]> setnx lock lei2 # 在lock被锁住的时候,去访问它则返回0
(integer) 0
127.0.0.1:6379[9]> get lock # 验证lock 的值有没有被覆盖
"lei"
127.0.0.1:6379[9]> del lock # 删除锁
(integer) 1
127.0.0.1:6379[9]> set lock lei ex 20 nx  # 保证原子性,既加锁,又设过期时间
OK

其中set 参数,可以保证加锁和过期时间的原子性,防止有时候加锁成功,却没有加过期时间。

参数如下:

set key value [EX seconds] [PX milliseconds] [NX|XX]
EX seconds:设置失效时长,单位秒
PX milliseconds:设置失效时长,单位毫秒
NX:key不存在时设置value,成功返回OK,失败返回(nil)
XX:key存在时设置value,成功返回OK,失败返回(nil)
2.1.3 超时问题

Redis 分布式锁不能解决超时问题,也就是第一个线程加上锁之后,就开始进行后面的逻辑代码,但是在锁的时间到了之后,后面代码还没执行结束,另一个线程就来占有这把锁,导致代码不能正确执行。

因此,redis的分布式锁不能解决较长时间的任务。

解决的方式就是在value 上加个随机数,释放锁的时候先匹配随机数是否一致,然后再删除key,这是为了确保当前线程占有的锁不会被其他线程释放,除非过期了。

2.2 延时队列

redis 也是可以作为消息队列来使用的,与我们熟悉的rabbitmq 和kafka类似,作为异步消息传递。

但是redis 作为消息队列的特点是 它实现比较简单,但同时,它没有非常多的高级特性,没有ack 保证,对消息的可靠性没有极高要求时,可以考虑采用。

2.2.1 基于List的实现

redis 中的list 可以作为一个而消息队列,可以保证在队列的一端进行rpush 和lpush 操作入队列,用lpop 和rpop 操作出队列。不过考虑到如果队列中没有数据的时候,一直查询redis 会造成 cpu 性能消耗,可以采用 blpop / brpop 替代前面的rpop / lpop ,在没有数据的时候会进入休眠状态,一旦数据来了,就立即读取数据,延迟很低。

2.2.2 PUB/SUB ,发布订阅模式

Redis 的发布订阅是一种消息通信模式:发送者发送消息,订阅者接收消息。例如微博、微信、关注系统等。

Redis 客户端可以订阅任意数量的频道。也就是多个消费者都可以得到相同的消息。

SUBSCRIBE,用于订阅信道
PUBLISH,向信道发送消息
UNSUBSCRIBE,取消订阅

优点:

  • 典型的广播模式,一个消息可以发布到多个消费者
  • 多信道订阅,消费者可以同时订阅多个信道,从而接收多类别消息
  • 消息实时发送,不用等待消费者读取,消费端自动接收。

缺点:

  • 若消息发布时,客户端不在线,则消息丢失,不能寻回。
  • 不能保证每个消费者接收的时间是一致的
  • 若消费者客户端出现消息积压,到一定程序,会被强制断开,导致消息意外丢失

因此,发布订阅更擅长处理广播,及时通讯,及时反馈的业务。

简单案例:

## 发布者
127.0.0.1:6379> publish xiaolei "hello ,xiaolei"
(integer) 1
## 订阅者
127.0.0.1:6379> SUBSCRIBE kuangshengshuo #订阅一个频道
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) (integer) 1
#等待推送的信息
1) "message"
2) "hello ,xiaolei"

使用场景:

  • 1、实时消息系统!
  • 2、事实聊天!(频道当做聊天室,将信息回显给所有人即可!)
  • 3、订阅,关注系统都是可以的!
2.3 redis 事务
  • redis 单条命令 是保存原子性的,但是事务不保证原子性。
  • redis 事务本质:一组命令的集合,一个事务中的所有命令都会被序列化,在事务执行过程中,会按照顺序执行。一次性、顺序性、排他性。
  • redis 事务没有隔离级别的概念。
  • 所有的命令在事务中,并没有直接被执行,只有发起执行命令的时候才会执行。
  • redis 的事务:
    • 开启事务(multi)
    • 命令入队()
    • 执行事务(exec)
    • 放弃命令(discard)

127.0.0.1:6379> multi ## 开启事务
OK
127.0.0.1:6379> set k1 v1
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> get k2
QUEUED
127.0.0.1:6379> set k3 v3
QUEUED
127.0.0.1:6379> exec ## 执行事务
1) OK
2) OK
3) "v2"
4) OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set k1 v1 set k2 v2
QUEUED
127.0.0.1:6379> set k4 v4
QUEUED
127.0.0.1:6379> discard  ## 使用discard,事务队列中命令都不会被执行
OK
127.0.0.1:6379> get k4
(nil)

编译期异常(代码有问题!命令有错),事务中的所有命令都不会被执行。

 

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set k1 v1
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> set k3 v3
QUEUED
127.0.0.1:6379> getset k3
(error) ERR wrong number of arguments for 'getset' command
127.0.0.1:6379> set k4 v4
QUEUED
127.0.0.1:6379> exec ##错误的命令,执行事务报错,所有命令都不会执行
(error) EXECABORT Transaction discarded because of previous errors.

运行期异常(1/0),如果事务队列存在语法性,那么执行命令的时候,其他命令是可以正常执行的,错误命令抛出异常

 

127.0.0.1:6379> multi 
OK
127.0.0.1:6379> incr k1
QUEUED
127.0.0.1:6379> set k1 v1
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> exec ## 单条有原子性,整体没有
1) (error) ERR value is not an integer or out of range
2) OK
3) OK
127.0.0.1:6379> get k1
"v1"

还不懂Redis中的高级数据结构,我教你啊 前面我们学习 Redis 中的5中基础数据类型,今天我又来了,没错,就是 Redis 中剩余的3中高级数据类型,废话不多说,我们开始吧。 Bitmap Bitmap 翻译过来就是位图,那它有什么作用呢? 我们首先想这么一个场景,二值状态统计,这个二值状态就是指集合元素的取值就只有0和1两种。比如:在签到打卡的场景中,我们只用记录签到(1)或未签到(0),这就是典型的二值状态。在我们签到统计时,每个用户的一天的签到用1个bit位就能表示,有多少天就只需要多少个bit位,不需要使用太复杂的集合类型,这时我们就可 阅读详情

相关推荐

[Linux外设驱动详解]RK3588 U-Boot网络功能深度分析

本文深入分析了RK3588平台上U-Boot的网络功能实现,主要内容包括: 网络架构:详细剖析了从硬件层到协议层的完整网络栈架构,包括GMAC驱动、TFTP/NFS启动、网络命令等关键组件。 驱动实现:重点介绍了RK3588 GMAC驱动结构,包含关键数据结构、专用操作函数集、设备树兼容性配置和GRF寄存器设置。 功能实现:详细说明了驱动初始化流程、RGMII速度适配机制以及PHY接口配置过程。 高级特性:涵盖了网络启动功能、镜像更新和MAC地址传递到Linux内核的机制。 文档通过代码片段和流程图清晰展示

Just Linux! 1115

【进阶篇】 redis 高级使用

补充了上一篇

King Gigi的博客 4094

利用Solidworks2020将挖掘机装配体转换为URDF模型

利用Solidworks2020将挖掘机装配体转换为URDF模型一、下载sw_urdf_exporter插件 URDF(Universal Robot Description Format)——通用机器人描述格式,它是ROS里边使用的一种机器人的描述文件,包含的内容有:连杆、关节,运动学和动力学参数、可视化模型、碰撞检测模型等。 一、下载sw_urdf_exporter插件 ROS提供了SolidWorks转URDF的插件(下载链接)—sw2urdfSetup.exe,下载后点击安装,安装完成后就能在sol

weixin_48192326的博客 6105

Redis-发布订阅

发布者不是计划发送消息给特定的接收者(订阅者),而是发布的消息分到不同的频道,不需要知道什么样的订阅者订阅 订阅者对一个或多个频道感兴趣,只需接收感兴趣的消息,不需要知道什么样的发布者发布的 客户端发到频道的消息,将会被推送到所有订阅此频道的客户端 客户端不需要主动去获取消息,只需要订阅频道,这个频道的内容就会被推送过来 消息的格式 推送消息的格式包含三部分 ...

weixin_30294709的博客 287

维纳滤波和卡尔曼滤波

本文的主要内容是维纳滤波和卡尔曼滤波的介绍,包含匹配滤波器、维纳滤波器、维纳预测、卡尔曼滤波等内容。

西岸贤 9521

Python Trimesh库实战:5分钟搞定STL文件解析与3D模型可视化

本文介绍了如何使用Python的Trimesh库快速解析STL文件并进行3D模型可视化。通过简洁的代码示例,演示了从环境搭建、模型加载、几何数据提取到基础变换和批量处理的核心流程,帮助开发者和工程师在5分钟内高效完成3D数据处理与可视化任务。

weixin_32005771的博客 162

【Redis】7.BigMap与HyperLogLog

BIgMap是一种实现对位的操作的数据结构,但是其实它本身并不是数据结构,底层其实是字符串,是借助字符串进行位操作的。但是BigMap在Redis中使用却和字符串不太一样,可以理解为这是一个以位为单位的数组,数组的每个单元格存放的是1或者0,数组的下标在BitMaps中被称为偏移量。BigMap在Redis中最大上限是512M,转换为bit则是 2^32个bit位。Redis中的HyperLogLog是一种基于基数估算的算法,所谓基数估算就是在一批数据中不重复的元素个数有多少个。

沉迷写代码的程序猿的博客 1835

2.13寸电子墨水屏HINK-E0213+esp8266

很久以前买的一块电子墨水屏,运气很好,这个型号HINK-E0213资料很全,而且微雪官网也有相关电路资料等。

梦境虽美,却不长. 3005

Redis3种特殊数据结构详解

当我们探索Redis时,除了常见的键值存储功能外,还存在一些特殊类型,它们为Redis增添了更多的魅力和多样性。在本次讲解中,我们将聚焦于Redis中的三种特殊数据结构类型:地理空间(Geospatial)、HyperLogLogs和位图(Bitmaps)。这些特殊类型为我们提供了独特的功能和解决方案,无论是用于地理位置数据的处理、基数估计还是位运算,Redis都展现出了其强大的应用潜力。通过深入了解这些特殊类型,我们将探索Redis更广阔的应用领域,为我们的数据处理任务带来新的可能性和效率提升。

weixin_67589420的博客 1757

【WRF模拟】保存wrf输出文件到指定目录+仅输出指定空间域/变量文件

修改wrf命令以更改指定输出文件目录等

WW、forever的博客 545

基于LSTM的股票价格预测系统,Django框架,Web的股票预测系统,训练+数据集+源码(无需安装环境版)

股票价格预测是投资领域的一个重点关注课题。由于股票价格受到诸多非线性因素的影响,得到精确的预测结果较为困难。使用 PyCharm 作为代码开发工具,通过下载好的股票金融数据,进行数据预处理,构建 LSTM 网络模型,训练模型并训练出最优模型,输出股票未来收盘价波动的走势,最后在训练好的模型上,设计股票模型应用系统,运行效率较高,对股票预测具有一定的积极意义。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 956

redis学习笔记 ——redis中的四大特殊数据结构

Bitmap(位图),是一串连续的二进制数组(0和1),可以通过偏移量(offset)定位元素,通过对最小单位bit进行0|1的设置来表示某个元素的值或者状态,由于 bit 是计算机中最小的单位,使用它进行储存将非常节省空间,特别适合一些数据量大且使用二值统计的场景。Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。

qq_73924465的博客 1741

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Redis - 3种特殊数据结构详解

Bitmap 存储的是连续的二进制数字(0 和 1),通过 Bitmap, 只需要一个 bit 位来表示某个元素对应的值或者状态,key 就是对应元素本身。我们知道 8 个 bit 可以组成一个 byte,所以 Bitmap 本身会极大的节省储存空间。你可以将 Bitmap 看作是一个存储二进制数字(0 和 1)的数组,数组中每个元素的下标叫做 offset(偏移量)。

Java程序员的知识博客 1129

蓝牙模块HM-10手册

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

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Redis入门:Redis中的数据结构和在Java中的实现

由于Redis是一个key-value的数据库,key一般是String类型,不过value的类型多种多样:其数据结构又可以分为基本类型和特殊类型基本类型: 1.字符串(String)—— 最简单的数据容器 2.列表(List)—— 双向链表结构 3.集合(Set)—— 无序唯一元素集合 4.有序集合(Sorted Set)—— 带分数的集合 5.哈希表(Hash)—— 键值对的集合特殊类型: 1.GEO类型——主要用于存储

likenuo1016的博客 2110

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

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

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

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

redis5种基本数据结构和3种特殊结构的使用

redis五种基本数据结构(string、hash、list、set、zset)和三种特殊结构(geospatial、hyperloglog、bitmaps)的使用

qq_43209615的博客 1665

【玩转Redis】一文看懂 Redis的5种常用数据结构和4种特殊数据结构!

简介 我们在实现一些业务的时候,做一些比较特有的需求,用传统的DB去做会很繁琐,比如实现一个微信记步排行,频繁访问封锁IP,秒杀等等需求,而利用Redis里面的数据结构特性,能相对便携的实现这些需求。 详解 1. String value 值可以是字符型,也可以是数字。 其实没有什么特别的特点,正常的持久化那些基本操作,get set 然后获取字符串长度,让字符串拼接等 如果是数字的话,可以incre decre 计数功能 常用命令: get、set、incr、decr、mget等 应

OxYGC 1555

Redis 5种基本数据类型 + 3种特殊数据类型

它将所有的元素紧挨着一起存储,分配的是一块连续的内存。它的底层实际上是使用双向链表实现的(如下图),对两端的操作性能很高,通过索引下标操作中间节点性能会较差。以上的方案结果精确,但随着数据不断增加,导致占用空间越来越大,对于非常大的数据集是不切实际的。集合的成员是唯一的,但是评分是可以重复的。)来获取一个范围的元素。访问有序集合中的中间元素也是非常快的,因为你能够使用有序集合作为一个没有重复成员你的智能列表。的优点是:在输入元素的数量或者体积 非常非常大时,计算基数所需的空间总是固定的、并且是很小的。

JngKang的博客 1715

Redis特殊数据结构

根据官网介绍:Bitmap 不是 Redis 中的实际数据类型,而是在 String 类型上定义的一组面向位的操作,将其视为位向量。由于字符串是二进制安全的块,且最大长度为 512 MB,它们适合用于设置最多 2^32 个不同的位。Bitmap 存储的是连续的二进制数字(0 和 1),通过 Bitmap, 只需要一个 bit 位来表示某个元素对应的值或者状态,key 就是对应元素本身。我们知道 8 个 bit 可以组成一个 byte,所以 Bitmap 本身会极大的节省储存空间。

致力于不留技术债务cuizb.top 1385

Redis 3 种特殊数据类型详解

Bitmap 存储的是连续的二进制数字(0 和 1),通过 Bitmap, 只需要一个 bit 位来表示某个元素对应的值或者状态,key 就是对应元素本身。Bitmap 不是 Redis 中的实际数据类型,而是在 String 类型上定义的一组面向位的操作,将其视为位向量。HyperLogLog 是一种有名的基数计数概率算法 ,基于 LogLog Counting(LLC)优化改进得来,并不是 Redis 特有的,Redis 只是实现了这个算法并提供了一些开箱即用的 API。

2403_87122707的博客 1073

Redis 数据结构详解

redis常用五种数据类型和三种特殊数据类型。

一名后端程序猿 8035

探寻Redis的世界:Redis 3 种特殊数据类型详解

根据官网介绍:Bitmap 不是 Redis 中的实际数据类型,而是在 String 类型上定义的一组面向位的操作,将其视为位向量。由于字符串是二进制安全的块,且最大长度为 512 MB,它们适合用于设置最多 2^32 个不同的位。Bitmap 存储的是连续的二进制数字(0 和 1),通过 Bitmap, 只需要一个 bit 位来表示某个元素对应的值或者状态,key 就是对应元素本身。我们知道 8 个 bit 可以组成一个 byte,所以 Bitmap 本身会极大的节省储存空间。

zxyhj的博客 738

【Redis基础篇】超详细♥Redis安装教程、5种常用数据结构和常见命令、Jedis和SpringDataRedis的使用

Redis是典型的key-value数据库,key一般是字符串,而value包含很多不同的数据类型:Redis为了方便我们学习,将操作不同数据类型的命令也做了分组,在官网()可以查看到不同的命令:不同类型的命令称为一个group,我们也可以通过help命令来查看各种不同group的命令:接下来,我们就学习常见的五种基本数据类型的相关命令。2、Redis通用命令KEYS:查看符合模板的所有key。keys *效率低,redis单线程,不建议在生产环境设备上使用)DEL:删除一个或多个指定的key。

实用技术干货分享⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄对您有用的话请点个关注吧~ 3657

Redis中3种特殊的数据类型(BitMap、Geo和HyperLogLog)

转自https://www.jb51.net/article/136322.htm 这篇文章主要给大家介绍了关于Redis中3种特殊的数据类型(BitMap、GEOADD和GEODIST)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。 前言 Reids 在 Web 应用的开发中使用非常广泛,几乎所有的后端技术...

混血王子的博客 1953
上一篇: Redis指南【2】五大基本类型
下一篇: 并发编程JUC-CountDownLatch源码解析
加班不秃顶
博客等级 码龄7年 1822粉丝 599原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值