zoukankan      html  css  js  c++  java
  • Redis的String类型

    Redis 字符串命令

    下表列出了常用的 redis 字符串命令:

    序号命令及描述
    1 SET key value 
    设置指定 key 的值
    2 GET key 
    获取指定 key 的值。
    3 GETRANGE key start end 
    返回 key 中字符串值的子字符
    4 GETSET key value
    将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
    5 GETBIT key offset
    对 key 所储存的字符串值,获取指定偏移量上的位(bit)。
    6 MGET key1 [key2..]
    获取所有(一个或多个)给定 key 的值。
    7 SETBIT key offset value
    对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。
    8 SETEX key seconds value
    将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。
    9 SETNX key value
    只有在 key 不存在时设置 key 的值。
    10 SETRANGE key offset value
    用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。
    11 STRLEN key
    返回 key 所储存的字符串值的长度。
    12 MSET key value [key value ...]
    同时设置一个或多个 key-value 对。
    13 MSETNX key value [key value ...] 
    同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
    14 PSETEX key milliseconds value
    这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。
    15 INCR key
    将 key 中储存的数字值增一。
    16 INCRBY key increment
    将 key 所储存的值加上给定的增量值(increment) 。
    17 INCRBYFLOAT key increment
    将 key 所储存的值加上给定的浮点增量值(increment) 。
    18 DECR key
    将 key 中储存的数字值减一。
    19 DECRBY key decrement
    key 所储存的值减去给定的减量值(decrement) 。
    20 APPEND key value
    如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾。

    测试了常用的命令

    [root@iZbp143t3oxhfc3ar7jey0Z redis-4.0.12]# redis-cli
    127.0.0.1:6379>
    127.0.0.1:6379>
    127.0.0.1:6379> set key1 value1
    OK
    127.0.0.1:6379> get key1
    "value1"
    127.0.0.1:6379> MSET s1 v1 s1 v2
    OK
    127.0.0.1:6379> mget s1 key1
    1) "v2"
    2) "value1"
    127.0.0.1:6379> STRLEN s1
    (integer) 2
    127.0.0.1:6379> APPEND s1 aabbcc
    (integer) 8
    127.0.0.1:6379> get s1
    "v2aabbcc"
    127.0.0.1:6379> incr s1
    (error) ERR value is not an integer or out of range
    127.0.0.1:6379> set num 1
    OK
    127.0.0.1:6379> incr num
    (integer) 2
    127.0.0.1:6379> get num
    "2"
    127.0.0.1:6379> incr num
    (integer) 3
    127.0.0.1:6379> get num
    "3"
    127.0.0.1:6379> help INCRBY
    
      INCRBY key increment
      summary: Increment the integer value of a key by the given amount
      since: 1.0.0
      group: string
    
    127.0.0.1:6379> SETEX t1 20 v2
    OK
    127.0.0.1:6379> get t1
    "v2"
    127.0.0.1:6379> get t1
    (nil)
    127.0.0.1:6379>

    说几个String类型常用的场景

    1.可以当自增主键,具有原子性

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

    适用:

    • redis用于控制数据库表主键id,为数据库表主键提供生成策略,保障数据库表的主键唯一性
    • 此方案适用于所有数据库,且支持数据库集群

    2.时效性

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

    127.0.0.1:6379> SETEX t1 20 v2
    OK
    127.0.0.1:6379> get t1
    "v2"
    127.0.0.1:6379> get t1
    (nil)
    127.0.0.1:6379>

    如果发现存在redis中,则无法进行操作 

    3.存储信息

    在redis中为大V用户设定用户信息,以用户主键和属性值作为key,后台设定定时刷新策略即可

    eg: user:id:3506728370:fans → 12210947
    eg: user:id:3506728370:blogs → 6164
    eg: user:id:3506728370:focuss → 83

    在redis中以json格式存储大V用户信息,定时刷新(也可以使用hash类型)
    eg: user:id:3506728370 →

    {"id":3506728370,"name":"春晚","fans":12210862,"blogs":6164, "focus":83}

    注:上面2种各有优缺点,第一种改的方便,第二个查的方便

    redis应用于各种结构型和非结构型高热度数据访问加速 

     4.注意事项

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

              ① 表示运行结果是否成功
                  (integer) 0 → false 失败
                  (integer) 1 → true 成功
             ② 表示运行结果值
                  (integer) 3 → 3 3个
                  (integer) 1 → 1 1个

    • 数据未获取到

                ( nil)等同于null

    • 数据最大存储量

                  512MB

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

                  9223372036854775807

  • 相关阅读:
    Win10使用VMware虚拟机安装ubuntu
    算法资源清单
    JAVA Synchronized (三) volatile 与 synchronized 的比较
    JAVA Synchronized (二)
    Java多线程:线程状态以及wait(), notify(), notifyAll()
    Java中断机制
    Java throw与throws
    Java(Android)线程池
    JAVA interrupte中断线程的真正用途
    Java 守护线程
  • 原文地址:https://www.cnblogs.com/dalianpai/p/12482509.html
Copyright © 2011-2022 走看看