• Redis数据结构:字符串


    字符串格式的存储表示存储的值是字符串格式的。

    新增数据(SET)

    1. 使用SET可以新增数据,例如,新增key 为hello,value为world的数据

    注意:key无需使用引号,value需要使用引号包裹起来。

    SET  hello  "world"

    执行下列语句,可以设置两个键值对:

    SET  number  "10086"

    SET  book  "The Design and Implementation of Redis"

    2. 默认情况下,我们使用SET的时候,如果已经存在键值对,则会覆盖

    如果原来有数据

    SET  book  "english"

    再次执行新的语句时,新值覆盖旧值,此时存储的不再是english,而是最新的math

    SET  book  "math" 

    3. NX只有当键值对不存在时候才会执行成功,已经存在时返回nil 

    SET  book  "english"

    -- success here

    SET  book  "math"  NX

    -- nil returned 因为book已经存在了

    NX其实是Not Exists的简写

    4. XX只有键值对已经存在的时候才会执行成功,如果键值对不存在则返回nil

    SET  book  "english"

    SET  book  "math"  XX

    -- success here, book exists

    多个键值对一起添加(MSET)

    使用MSET可以多个键值对一起添加,减少与服务端之间的交互次数:

    MSET  key1  value1  key2   value2  key3  value3

    例如,设置teacher,class,grade三个值

    MSET  teacher  "zhangsan"  class  "1"  grade  "1" 

    读取数据(GET)

    放入数据后,我们就是要使用的,获取数据使用GET

    GET  key

     例如,获取book的内容

    GET  book

    如果获取的键不存在,则返回nil

    多个键一起读(MGET)

    使用MGET可以实现多个键一起读取,减少IO次数

    MGET  key1  key2  key3

    例如获取teacher,class,grade三个键对应的值

    MGET  teacher  class  grade

    读取旧值,设置新值(GETSET)

    读取旧值,设置新值是把GET和SET集中到一起做了,先GET返回旧值,然后SET新值。 

    GETSET  key  new_value

     例如,原来book的值是english,我们获取旧值的同时,设置新值math

    GETSET  book  "math"

    -- 返回english

    如果原来的键不存在,那么GETSET也会成功写入新值,但返回nil(因为旧值不存在)

    -- 假如book不存在,执行下列语句会设置成math,但是返回nil

    GETSET  book  "math"

    多个键均不存在时,才可以插入成功(MSETNX)

    MSETNX适用于批量操作SET... NX,所有键均不存在时,执行成功,至少一个存在了,则执行失败

    MSETNX  teacher  "zhangsan"  class "2"  grade  "5"

    删除键(DEL)

    使用DEL可以删除键

    DEL  book

    获取值的长度(STRLEN)

    获取键对应的字符串值的长度,例如teacher存储的是zhangsan,  则值的长度为8

    STRLEN  key

    读取teacher对应的字符串的长度 

    STRLEN  teacher

    -- 8

    针对不存在的键,返回值为0.

    STRLEN  xxx

    -- xxx 不存在时,返回0

    获取指定位置的子字符串(GETRANGE)

    使用GETRANGE可以获取指定范围的值

    GETRANGE  key  start  end

    例如,获取teacher键值对的0-3范围的字符

    GETRANGE  teacher  0  3 

    设置指定范围的子字符串(SETRANGE)

    使用SETRANGE可以设置指定位置开始的值,并进行新长度为基准覆盖

    SETRANGE  key  start  new_value

    例如,我们把teacher对应的zhangsan改为zhangliu

    SETRANGE  teacher  5  liu

     注意:如果开始替换的位置比整个长度大,则会自动补空字符。

    追加文本到末尾(APPEND)

    使用APPEND可以追加文本到值的末尾,如果key不存在则作为set使用

    APPEND  key  value

    给teacher追加年龄信息

    APPEND  teacher  "age is 20"

    数字的处理

    存储数字:

    SET  price  100 

    自增1(INCR)

    INCR  price

    -- 如果price不存在,则赋值为0再自增

    自减1(DECR)

    DECR  price

    -- 如果price不存在,则赋值为0再自减 

    自增N(INCRBY)

    INCRBY  key  crement 

    -- 如果price不存在,则赋值为0再自增

    自减N(DECRBY)

    DECRBY  key  crement 

    -- 如果price不存在,则赋值为0再自减 

     浮点数操作(INCRBYFLOAT)

    INCRBYFLOAT  key  5.6

    -- 自增"5.6",保存最多17位小数

    INCRBYFLOAT  key  -5.6

    -- 自减"5.6"

    适用场景1:缓存

    将频繁读取的页面、数据缓存到字符串中,存储在Redis中完成高速读取。 

    适用场景2:锁

    锁的场景是,

    1. 有唯一的客户端可以获取到锁

    2. 获取锁的客户端才能释放锁

    3. 锁被占用时,其他客户端需要等待锁释放后才能获取。

    acquire:

    SET  lock  "locking"  NX

    -- 只有lock不存在时,才会执行成功

    release:

    DEL  lock

    -- 删除键

  • 相关阅读:
    【BOOST C++ 12 函数式编程】(4) Boost.Ref
    【算法系列 | 8】深入解析查找算法之—二分查找
    二、EFCore 数据库表的创建和迁移
    IDOC-外围系统发送客户银行数据,SAP生成入站IDOC
    国际站、速卖通、Lazada店铺运营技巧?如何提升销量?
    2022.08.08_每日一题
    公开的mqtt服务器如何获得等问题
    赛普拉斯CYpress,初接触之一电磁感应触摸按键demo
    (免费领源码)python#flask#mysql旅游数据可视化81319-计算机毕业设计项目选题推荐
    Spring之日志
  • 原文地址:https://blog.csdn.net/Day_and_Night_2017/article/details/126457136