Redis中3种特殊的数据类型

Redis中3种特殊的数据类型

Bitmap

Bitmap就是通过一个bit位来表示某个元素对应的值或者状态

其中的 key 就是对应元素本身,实际上底层也是通过对字符串的操作来实现

Redis2.2 版本之后新增了setbit, getbit, bitcount 等几个 bitmap 相关命令

虽然是新命令,但是本身都是对字符串的操作

SETBIT key offset value

其中 offset 必须是数字,value 只能是 0 或者 1

这个命令的返回值是修改前的值

比如调用

setbit byte0 0 1;
setbit byte0 2 1;
setbit byte0 5 1;
?
setbit byte1 1 1;
setbit byte1 4 1;

对应内存中的值就是这样

byte bit0 bit1 bit2 bit3 bit4 bit5 bit6 bit7
byte0 1 0 1 0 0 1 0 0
byte1 0 1 0 0 1 0 0 0

可以看出 bit 的默认值是 0,那么 Bitmap 在实际开发的运用呢?

这里举一个例子:储存用户在线状态

这里只需要一个 key,然后把用户 ID 作为 offset,如果在线就设置为 1,不在线就设置为 0

//设置在线状态
$redis->setBit online 0 1;
?
//设置离线状态
$redis->setBit online 0 0;
?
//获取状态
$redis->getBit online 0;
?
//获取在线人数
$redis->bitCount online;

Geo

RedisGEO 特性在 Redis 3.2 版本中推出

这个功能可以将用户给定的地理位置信息储存起来, 并对这些信息进行操作

GEO 的数据结构总共有六个命令

  • geoadd
  • geopos
  • geodist
  • georadius
  • georadiusbymember
  • geohash

GEOADD

GEOADD key longitude latitude member [longitude latitude member ...]

将给定的空间元素(纬度、经度、名字)添加到指定的键里面

这些数据会以zset的结构被储存在键里面

比如设置

keySicily(意大利亚西西里岛屿)

member1Palermo(意大利西西里自治区首府 巴勒莫)

member2Catania(意大利西西里大区卡塔尼亚省首府 卡塔尼亚)

redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
(integer) 2

GEOPOS

GEOPOS key member [member ...]

从键里面返回所有给定位置元素的位置(经度和纬度)

比如调用GEOPOS Sicily Palermo

返回Palermo的经纬度

redis> GEOPOS Sicily Palermo
1) 1) "13.361389338970184"
2) "38.115556395496299"

GEODIST

GEODIST key member1 member2 [unit]

返回两个给定位置之间的距离

如果两个位置之间的其中一个不存在, 那么返回null

指定单位的参数 unit 必须是以下单位的其中一个:(默认为m)

  • m
  • km 千米
  • mi 英里
  • ft 英尺

比如调用GEODIST Sicily Palermo Catania

返回PalermoCatania的距离166274.15米

redis> GEODIST Sicily Palermo Catania
"166274.15156960039"

GEORADIUS

GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [ASC|DESC] [COUNT count]

以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素

距离单位和上面的一致,其中后面的选项:

  • WITHDIST

    在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回

    距离的单位和用户给定的范围单位保持一致

  • WITHCOORD

    将位置元素的经度和维度也一并返回

  • WITHHASH

    52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值

    这个选项主要用于底层应用或者调试, 实际中的作用并不大

比如调用GEORADIUS Sicily 15 37 200 km WITHDIST

意思就是返回keySicily中处于

经度15纬度37为圆心,半径200km的圆形范围内的元素,以及元素到圆心的距离

redis> GEORADIUS Sicily 15 37 200 km WITHDIST
1) 1) "Palermo"
 2) "190.4424"
2) 1) "Catania"
 2) "56.4413"

HyperLogLog

Redis 的基数统计

这个结构可以非常省内存的去统计各种计数,比如注册 IP 数每日访问 IP 数页面实时UV在线用户数

但是它也有局限性,就是只能统计数量,而没办法去知道具体的内容是什么

PFADD

redis> PFADD databases "Redis" "MongoDB" "MySQL"
(integer) 1
?
redis> PFADD databases "Redis"  # Redis 已经存在,不必对估计数量进行更新
(integer) 0

PFCOUNT

redis> PFCOUNT databases
(integer) 3

PFMERGE

PFMERGE destkey sourcekey [sourcekey ...]

将多个 HyperLogLog 合并为一个 HyperLogLog

合并后的 HyperLogLog 的基数接近于所有输入 HyperLogLog可见集合的并集

合并得出的 HyperLogLog 会被储存在 destkey 键里面

如果该键并不存在,那么命令在执行之前, 会先为该键创建一个空的 HyperLogLog

redis> PFADD nosql "Redis" "MongoDB" "Memcached"
(integer) 1
redis> PFADD RDBMS "MySQL" "MSSQL" "PostgreSQL"
(integer) 1
redis> PFMERGE databases nosql RDBMS
OK
redis> PFCOUNT databases
(integer) 6

原文地址:https://www.cnblogs.com/lezon1995/p/11229117.html

时间: 2024-10-26 22:03:36

Redis中3种特殊的数据类型的相关文章

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

前言 Reids 在 Web 应用的开发中使用非常广泛,几乎所有的后端技术都会有涉及到 Redis 的使用.Redis 种除了常见的字符串 String.字典 Hash.列表 List.集合 Set.有序集合 SortedSet 等等之外,还有一些不常用的数据类型,这里着重介绍三个.下面话不多说了,来一起看看详细的介绍吧. BitMap BitMap 就是通过一个 bit 位来表示某个元素对应的值或者状态, 其中的 key 就是对应元素本身,实际上底层也是通过对字符串的操作来实现.Redis 从

Redis 中 5 种数据结构的使用场景介绍

这篇文章主要介绍了Redis中5种数据结构的使用场景介绍,本文对Redis中的5种数据类型String.Hash.List.Set.Sorted Set做了讲解,需要的朋友可以参考下 一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 redis 中一共有5种数据结构,那每种数据结构的使用场景都是什么呢? String——字符串 Hash——字典

redis中5种数据结构的使用

一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 redis 中一共有5种数据结构,那每种数据结构的使用场景都是什么呢? String——字符串Hash——字典List——列表Set——集合Sorted Set——有序集合 下面我们就来简单说明一下它们各自的使用场景: 1. String——字符串 String 数据结构是简单的 key-valu

Redis中5种数据结构的使用场景

一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 redis 中一共有5种数据结构,那每种数据结构的使用场景都是什么呢? String--字符串Hash--字典List--列表Set--集合Sorted Set--有序集合 下面我们就来简单说明一下它们各自的使用场景: 1. String--字符串 String 数据结构是简单的 key-valu

redis(Springboot中封装整合redis,java程序如何操作redis的5种基本数据类型)

平常测试redis操作命令,可能用的是cmd窗口 操作redis,记录一下 java程序操作reids, 操作redis的方法 可以用Jedis ,在springboot 提供了两种 方法操作 RedisTemplate 和StringRedisTemplate 两种方法的区别 可参考:https://blog.csdn.net/yifanSJ/article/details/79513179 当然 springboot 中也可以使用Jedis ,本次记录的是 如何使用RedisTemplate

Redis中的数据类型

Redis一共分为五种基本数据类型:String,Hash,List,Set,ZSet 1.String类型 String类型是包含很多种类型的特殊类型,并且是二进制安全的,比如序列化的对象进行存储,比如一张图片进行二进制存储,比如一个简单的字符串,数值等等~ set和get方法: 设置值:set key value  取值:get key(说明 设置key多次会覆盖)  删除值:del key 使用setnx(not exist) name如果不存在就进行设置,如果存在就不进行设置了,返回0

redis中各种数据类型对应的jedis操作命令

一.常用数据类型简介: redis常用五种数据类型:string,hash,list,set,zset(sorted set). 1.String类型 String是最简单的类型,一个key对应一个value String类型的数据最大1G. String类型的值可以被视作integer,从而可以让“INCR”命令族操作(incrby.decr.decrby),这种情况下,该integer的值限制在64位有符号数. 在list.set和zset中包含的独立的元素类型都是Redis String类

redis的五种数据类型

redis的五种数据类型 redis客户端建立 ./redis-cli -h 192.168.1.22 -p 6380 --raw 1.String 应用场景: 统计网站访问数量.当前在线人数.微博数.粉丝数等,全局递增ID等 . 常用命令: SET key value GET key MSET key1 value1 [key2 value2] MGET key1 key2 INCR key DECR key SETNX key value  #只有key 不存在时,才设置key的值 2.Ha

Redis实战 | 5种Redis数据类型详解

我们知道Redis是目前非常主流的KV数据库,它因高性能的读写能力而著称,其实还有另外一个优势,就是Redis提供了更加丰富的数据类型,这使得Redis有着更加广泛的使用场景.那Redis提供给用户的有哪些数据类型呢?主要有:string(字符串).List(列表).Set(集合).Hash(哈希).Zset(有序集合).HyperLogLogs(计算基数用的一种数据结构).Streams(Redis 5.0提供一种建模日志用的全新数据结构). 需要注意的是这里说的数据类型是指Redis值的数据