• redis学习之 常用数据类型之string


    2、redis常用数据类型之string

    redis 数据存储格式:

    • redis 自身是一个 Map,其中所有的数据都是采用 key : value 的形式存储
    • 数据类型指的是存储的数据的类型,也就是 value 部分的类型,key 部分永远都是字符串

    2.1、string类型

    • 存储的数据:单个数据,最简单的数据存储类型,也是最常用的数据存储类型
    • 存储数据的格式:一个存储空间保存一个数据
    • 存储内容:通常使用字符串,如果字符串以整数的形式展示,可以作为数字操作使用,但是数据类型仍是string,并不是数字。

    2.2、string类型的基本操作

    2.2.1、set

    添加/修改操作

    set key value
    

    2.2.2、get

    获取数据操作

    get key
    

    2.2.3、del

    删除操作

    del key
    

    如果删除成功,返回值是1,如果要删除的key不存在,返回的值是0

    127.0.0.1:6379> set geely jianglinlu 
    OK
    127.0.0.1:6379> get geely
    "jianglinlu"
    127.0.0.1:6379> del geely
    (integer) 1
    127.0.0.1:6379> get geely
    (nil)
    127.0.0.1:6379> set geely test
    OK
    127.0.0.1:6379> get geely
    "test"
    127.0.0.1:6379> del geely
    (integer) 1
    127.0.0.1:6379> del geely
    (integer) 0
    

    2.2.4、mset

    添加/修改多个数据

    mset key1 value1 key2 value2
    

    示例:

    127.0.0.1:6379> mset name zhangsan sex man age 28 address china
    OK
    

    2.2.5、mget

    读取多个数据

    mget key1 key2
    

    示例:

    127.0.0.1:6379> mget name sex age address
    1) "zhangsan"
    2) "man"
    3) "28"
    4) "china"
    

    2.2.6、strlen

    获取数据字符个数(字符串长度)

    strlen key
    

    示例:

    127.0.0.1:6379> strlen name
    (integer) 8
    

    2.2.7、append

    追加信息到原始信息后部(如果原始信息存在就追加,否则新建)

    append key value
    

    示例:

    127.0.0.1:6379> append name _age
    (integer) 12
    127.0.0.1:6379> get name
    "zhangsan_age"
    

    2.2.8、setnx

    如果key存在则不设置,如果key不存在则设置

    #命令格式
    setnx key value
    
    #示例
    #先删除name的key
    127.0.0.1:6379> del name
    (integer) 1
    # 此时没有name这个key,第一次使用setnx name zhangsan是设置成功,返回值为1
    127.0.0.1:6379> setnx name zhangsan
    (integer) 1
    127.0.0.1:6379> get name
    "zhangsan"
    # 因为已经存在name这个key,因此再次设置setnx name lisi是不成功的,返回值为0
    127.0.0.1:6379> setnx name lisi
    (integer) 0
    # 查看name这个key的值,发现还是zhangsan
    127.0.0.1:6379> get name 
    "zhangsan"
    

    2.3、多数据操作与单数据操作的区别

    指令的执行过程包括:执行传输到服务器、执行执行、指令返回客户端。在三个时间都会消耗时间,如果有10个指令且单指令执行,那么需要传输20次。如果采用多指令,可以一次发送10条指令,这样只需要发送2次。多指令一般情况下可以节省指令的消耗时间。

    2.4、string 类型数据的扩展操作

    2.4.1、string类型的数值操作

    业务场景

    大型企业级应用中,分表操作是基本操作,使用多张表存储同类型数据,但是对应的主键 id 必须保证统一性,不能重复。Oracle 数据库具有 sequence 设定,可以解决该问题,但是 MySQL数据库并不具有类似的机制,那么如何解决?

    解决方案

    可以在redis数据库中存一个数值类型的字符串,当需要生产主键时就让这个数值增加1。需要做好持久化工作

    string 作为数值操作

    • string在redis内部存储默认就是一个字符串,当遇到增减类操作incr,decr时会转成数值型进行计算。
    • redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发带来的数据影响。
    • 注意:按数值进行操作的数据,如果原始数据不能转成数值,或超越了redis 数值上限范围,将报错。 9223372036854775807(java中long型数据最大值,Long.MAX_VALUE)

    采用的命令如下:

    • 设置数值数据增加指定范围的值
      #对key代表的数值增加1,key代表的值必须是数值类型,否则报错。执行结果的返回值就是增加后的值
      incr key
      #对key代表的数值增加increment,key代表的值必须是数值类型,否则报错。increment必须整型
      incrby key increment
      #对key代表的数值增加increment,key代表的值必须是数值类型,否则报错。increment可以是浮点数
      incrbyfloat key increment
      示例:
      127.0.0.1:6379> set num 3
      OK
      127.0.0.1:6379> incr num
      (integer) 4
      127.0.0.1:6379> incrby num 5
      (integer) 9
      127.0.0.1:6379> incrbyfloat num 1.5
      "10.5"
      127.0.0.1:6379>

    • 设置数值数据减少指定范围的值
      # 对key所代表的数值减1 ,key所代表的数值必须是整型
      decr key
      # 对key所代表的数值减increment ,key所代表的数值必须是整型
      decrby key increment
      示例:
      127.0.0.1:6379> set num 10
      OK
      127.0.0.1:6379> decr num
      (integer) 9
      127.0.0.1:6379> decrby num 2
      (integer) 7

    • 非数值类型值会报错
      127.0.0.1:6379> set num test
      OK
      127.0.0.1:6379> incr num
      (error) ERR value is not an integer or out of range

    2.4.2、string类型时效操作

    命令格式:

    # 秒
    setex key seconds value
    # 毫秒
    psetex key milliseconds value
    

    代码示例:

    # 设置key为num的数据的有效时间为10秒
    127.0.0.1:6379> setex num 10 zhangsan
    OK
    127.0.0.1:6379> get num
    "zhangsan"
    127.0.0.1:6379> get num
    "zhangsan"
    127.0.0.1:6379> get num
    "zhangsan"
    127.0.0.1:6379> get num
    (nil)
    
    # 设置key为num的数据的有效时间为5000毫秒
    
    127.0.0.1:6379> psetex num 5000 20
    OK
    127.0.0.1:6379> get num
    "20"
    127.0.0.1:6379> get num
    "20"
    127.0.0.1:6379> get num
    (nil)
    

    2.5、string 类型数据操作的注意事项

    • 数据操作不成功的反馈与数据正常操作之间的差异

      • 表示运行结果是否成功
        (integer) 0 → false 失败
        (integer) 1 → true 成功
      • 表示运行结果值
        (integer) 3 → 3 3个
        (integer) 1 → 1 1个
    • 数据未获取到(nil)等同于null

    • 数据最大存储量512MB

    • 数值计算最大范围(java中的long的最大值)9223372036854775807

    2.6、redis中key的约定

    数据库中的热点数据key命名惯例: 表名:主键名:主键值:字段名

  • 相关阅读:
    TYPE_SCROLL_INSENSITIVE is not compatible with CONCUR_UPDATABLE
    with admin option /with grant option
    通过动态SQL语句创建游标
    Vue:在vue-cli中使用Bootstrap
    Vue:$set和$delete
    Vue:如何在vue-cli中创建并引入自定义组件
    MVC教程四:Controller向View传值的几种方式
    Vue:生命周期
    Vue.js常用指令:v-model
    vue:过滤器
  • 原文地址:https://www.cnblogs.com/cplinux/p/15058801.html
Copyright © 2020-2023  润新知