redis多种数据类型以及使用场景有哪些_redis有哪些数据类型

redis多种数据类型以及使用场景有哪些_redis有哪些数据类型SDS简单动态字符串 struct sdshdr { // 记录buf数组中已使用字节的数量 // 等于SDS所保存字符串的长度 int len; // 记录buf数组中未使用字节的数量 int fr

Redis多种数据类型以及使用场景

SDS简单动态字符串

struct sdshdr {

// 记录buf数组中已使用字节的数量

// 等于SDS所保存字符串的长度

int len;

// 记录buf数组中未使用字节的数量

int free;

// 字节数组,用于保存字符串

char buf[];

}

image

  • free表示这个SDS没有分配 未使用空间。

  • len表示SDS保存了无字节长的字符串。

  • buf是一个char数组。

SDS与C字符串区别

  1. O(1)复杂度获取字符串长度。

  2. 防止缓冲区溢出。

  3. 减少修改字符串时带来的内存重分配次数。

字符串

命令

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

内部编码

字符串类型的内部编码有3种:

  • int:8个字节长整型。

  • embstr:小于等于39个字节的字符串。

  • raw:大于39个字节的字符串。

Redis会根据当前值的类型和长度决定使用哪种内部编码实现。

整数:

set key 8653

ok

object encoding key

“int”

短字符:

set key “hello”

ok

object encoding key

“embstr”

长字符:

set key “40 bytes”

ok

object encoding key

“raw”

使用场景

  1. 缓存

  2. 计数

  3. Session集中管理

  4. 限速

哈希

命令

hset key field value

hset uset:1 name tom

hget key field

hget uset:1 name

“tom”

内部编码

  • ziplist(压缩列表):哈希类型元素个数小于hash-max-ziplist-entries默认512个、同时所有值都小于hash-max-

ziplist-value配置时,Redis会使用ziplist实现,节省内存方面比hashtable优秀。

  • hashtable:哈希类型无法满足ziplist条件时,会用这个,hashtable的读写时间复杂度都是O(1)。

hset hashkey f3 “bigger than 64 bytes”

object encoding hashkey

“hashtable”

hmset hashkey f1 v1 f2 v2 f3 v3 …… f513 v513

object encoding hashkey

“hashtable”

列表

从右边插入元素:rpush key value

lrange listkey 0 -1

从左边插入元素:lpush key value

linsert key before | after pivot value

查找:lrange key start end

删除:lpop key

内部编码

  • ziplist:元素个数小于list-max-ziplist-entries,同时每个值都小于list-max-ziplist-value,Redis选用压缩列表减少内存。

  • linkedlist:无法满足ziplist就会用链表来实现。

使用场景

  1. 消息队列

  2. 文章列表

集合

用来保存多个的字符串元素,不允许重复元素,无序。

sadd key a b c 添加key

3

srem key a b 删除key

2

scard key 计算key

1

smembers key 获取所有元素

sinter key 求交集

suinon key 求并集

sdiff key 求差集

内部编码

  • intset(整数集合)

  • hashtable

使用场景

标签(tag)

给用户添加标签

sadd user:1:tags tag1 tag2 tag3

sadd uset:1:tags tag1 tag2 tag3

给标签添加用户

sadd tag1:users user:1 user:3

sadd tag2:users user:1 user:2

计算用户共同感兴趣的标签

sinter user:1:tag2 user:2:tag

有序集合

不能重复,可以排序的set,给每个元素设置了一个score作为排序的依据。

列表、集合和有序集合三者异同点

image

命令

zadd key score member 添加成员

zadd user:ranking 251 tom

有序集合提供排序字段,产生代价,zadd复杂度为Ologn,sadd为O1。

zcard user:ranking 计算成员数

zscore key member 返回某个成员分数

zrank key member 计算成员的排名

zrem key member 删除成员

zrange …

集合间的操作

(1)交集

(2)并集

内部编码

  • 压缩列表

  • 跳跃表

使用场景

添加用户赞数:

zadd user:ranking:2016_03_15 mike 3

获得赞后:

zincrby user:ranking:2016_03_15 mike 1

取消赞:

zrem

获取赞数最多的十个用户:

zrevrangebyrank user:ranking:2016_0315 0 9

展示用户信息以及用户分数:

此功能将用户名作为键后缀,将用户信息保存在哈希类型中,至于用户的分数和排名可以使用zscore和zrank

hgetall user:info:tom

zscore user:ranking:2016_03_15 mike

zrank user:ranking:2016_03_15 mike

待更新:

Bitmaps

HyperLogLog

GEO

Reference

《Redis设计与实现》

《Redis开发与运维》

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5810.html

(0)
上一篇 2023-04-23
下一篇 2023-04-24

相关推荐

  • expdp 导出UDE-31623 ORA-31623

    expdp 导出UDE-31623 ORA-31623问题描述: ORACLE EXADATA 12.2 4节点 一个简单的expdp导出,在之前是正常的,但是隔了一天后出现问题了,具体报错信息如下: expdp '”/as sysdba”&…

    2022-12-23
    201
  • hms 包括哪些服务_什么是能力

    hms 包括哪些服务_什么是能力     随着互联网不停的发展,人们的生活已经离不开智能手机更离不开手机应用,它让人们的生活更高效、更智慧、更便捷。HMS Core作为HMS的核心服务能力,围绕高效、安全、智慧、价值,华为HMS …

    2023-02-20
    165
  • 初识Oracle数据库基础笔记

    初识Oracle数据库基础笔记初识Oracle数据库基础知识点笔记

    2023-04-15
    149
  • Python应用领域及优势

    Python应用领域及优势Python在数据科学及机器学习领域中拥有广泛的应用。其丰富的数据科学将某些任务的执行成为可能,比如:数据采集、数据挖掘、数据分析、数据可视化及机器学习模型的构建。Python主要用于数据科学和机器学习的应用包括NumPy、SciPy、Pandas、SciKit-Learn、Keras、TensorFlow、PyTorch等库和框架。

    2024-03-11
    78
  • Oracle RAC集群测试-生产环境最佳方法(Oracle 11g/12c/18c/19 RAC)

    Oracle RAC集群测试-生产环境最佳方法(Oracle 11g/12c/18c/19 RAC)生产环境Oracle RAC集群测试最佳方法(支持Oracle 11g/12c/18c/19c RAC安装后期测试过程) 一、Oracle RAC集群测试背景 某中大型制造业公司,由于要新上项目,建…

    2023-03-03
    153
  • Python集成开发环境

    Python集成开发环境在过去的几年中,Python变得越来越流行。Python的易学性和广泛的应用范围使之成为了许多初学者的首选语言,同时也是许多经验丰富的开发人员的最爱。Python在许多领域中都有应用,如Web开发、数据科学、人工智能和机器学习等。随着Python使用的增加,更多的人开始使用Python集成开发环境(IDE)以提高他们的编程效率。

    2024-09-12
    23
  • Mysql基础(一)「建议收藏」

    Mysql基础(一)「建议收藏」准备工作 1.开启服务器 ··windows系统: 方法1.搜索服务,找到mysql并开启. 方法2.如果安装的是5.7版本,cmd中输入: net start MySQL57 &

    2023-03-04
    139
  • 什么是流处理

    什么是流处理流处理正变得像数据处理一样流行。流处理已经超出了其原来的实时数据处理的范畴,它正在成为一种提供数据处理(包括批处理),实时应用乃至分布式事务的新方法的技术。 1、什么是流处理? 流处理是不断合并新数据

    2023-03-18
    154

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注