• 【Redis学习笔记】第二章 Redis数据类型



    在这里插入图片描述

    1、Redis数据存储类型

    Redis做为缓存使用,涉及的业务数据譬如:

    • 秒杀、双十一、抢票等业务
    • 突发高频访问的数据,如突发的时政要闻
    • 高频、复杂的统计数据,如大直播间在线人数、投票排行榜等高频变动的数据

    除了以上经典业务场景,还有三个附加功能:

    • 单服务器升级集群
    • Session管理
    • Token管理

    对应于以上业务场景,Redis给出物种常用数据类型

    • string 字符串
    • hash 哈希
    • list 列表
    • set 集合
    • sorted_set 有序集合

    在这里插入图片描述
    所有的数据都是采用 key : value 的形式存储,数据类型是指 value 部分的类型,key 部分永远都是字符串!!

    2、string

    一个存储空间保存一个数据,如果字符串是一个整数的形式,则它也可以当作数字一样被操作。
    在这里插入图片描述

    3、string类型数据的基本操作指令

    添加/修改数据
    set key value

    获取数据
    get key

    删除数据
    del key


    添加/修改多个数据 (m即Multiple)
    mset key1 value1 key2 value2 key3 value3


    获取多个数据
    mget key1 key2 key3 key4


    获取数据字符串长度
    strlen key


    追加信息到原始信息后面(存在则追加,不存在则新建)
    append key value

    实例:

    127.0.0.1:6379> set name 9527
    OK
    (0.88s)
    
    127.0.0.1:6379> get name
    "9527"
    
    127.0.0.1:6379> del name
    (integer) 1   //1代表成功,0代表失败
    
    127.0.0.1:6379> get name
    (nil)
    
    127.0.0.1:6379> del name
    (integer) 0
    
    127.0.0.1:6379> mset a 1 b 2 c 3 d 4
    OK
    
    127.0.0.1:6379> mget b c
    1) "2"
    2) "3"
    
    127.0.0.1:6379> strlen d
    (integer) 1
    
    127.0.0.1:6379> append a 314
    (integer) 4
    
    127.0.0.1:6379> get a
    "1314"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    注**
    set和mset在不同的数据量下,其效率性能谁高谁低不一定,再譬如单线程下,一下mset大量数据,则容易造成阻塞,孰优孰劣应当以实际生产环境为准。

    4、string类型数据的扩展

    随着数据的增多,将一个大的表或库,分表分库,是一个常规选择,那如何保证,分表过程中自增主键的不重复性呢?

    在这里插入图片描述

    Oracle 数据库具有 sequence 设定,可以解决该问题,但是 MySQL数据库并不具有类似的机
    制。在这个背景下,看Redis的string类型的数据扩展操作:

    设置数值数据增加指定范围的值:


    增加1,默认
    incr key

    增加指定整数大小
    incrby key increment

    增加指定小数大小
    incrbyfloat key increment

    设置数值数据减少指定范围的值:

    减少1
    decr key

    减少指定数值
    decrby key increment

    实例:

    127.0.0.1:6379> get b
    "2"
    
    127.0.0.1:6379> incr b
    (integer) 3
    
    127.0.0.1:6379> incrby b 10
    (integer) 13
    
    127.0.0.1:6379> decrby b -1
    (integer) 14
    
    127.0.0.1:6379> decrby b -1.1
    (error) ERR value is not an integer or out of range
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    注**

    • string在Redis中,在遇到增减操作时,就会被当作一个数值,但还是一个字符串
    • redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发带来的数据影响。
    • 按数值进行操作的数据,如果原始数据不能转成数值,或超越了redis 数值上限范围,将报错
    127.0.0.1:6379> set str a
    OK
    
    127.0.0.1:6379> incr str
    (error) ERR value is not an integer or out of range
    
    • 1
    • 2
    • 3
    • 4
    • 5

    5、string类型设置数据生命周期

    业务场景举例:

    • 海选投票,只能通过微信投票,每个微信号每 4 小时只能投1票。
    • 电商商家开启热门商品推荐,热门商品不能一直处于热门期,每种商品热门期维持3天,3天后自动取消热门。

    以上,数据均需要控制存在的时间。

    设置数据生命周期

    秒级:
    setex key seconds value

    毫秒级:
    psetex key milliseconds value

    redis 控制数据的生命周期,通过数据是否失效控制业务行为,适用于所有具有时效性限定控制的操作

    6、key的命名规范

    表名:主键名:主键值:字段名 ,如:

    user: uid: 9527: password
    news: id :2022813: title

    127.0.0.1:6379> set user:id:9527:fans 1000000
    OK
    
    127.0.0.1:6379> incr user:id:9527:fans
    (integer) 1000001
    
    values中也可以json格式存储信息:
    127.0.0.1:6379> set user:id:001 {name:9527,age:22,sex:1}
    OK
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    Dapr与Service Mesh的区别
    2022-09-09 STM32 Jlink SWD接口SEGGER J-Flash烧录调试记录
    网站整站优化-网站整站优化工具
    LeetCode 2558. 从数量最多的堆取走礼物【模拟,堆或原地堆化】简单
    JVM运行时数据区域之PCRegister和虚拟机栈
    C# 将图片字符化(转为ASCII字符)
    新库上线 | CnOpenData电力、热力、燃气及水生产和供应业工商注册企业基本信息数据
    微服务中间件
    B树(B-tree)
    [附源码]Python计算机毕业设计Django校园订餐系统
  • 原文地址:https://blog.csdn.net/llg___/article/details/126276536