zoukankan      html  css  js  c++  java
  • Redis 5种数据结构及其使用场景举例--STRING

    String 数据结构是简单的 key-value 类型,value 不仅可以是 String,也可以是数字(当数字类型用 Long 可以表示的时候encoding 就是整型,其他都存储在 sdshdr 当做字符串)。

    一、应用场景举例

    String类型的是Redis所有数据结构中使用最为频繁的,也是最简单的数据结构,正所谓大道至简。

    1、使用key-value来缓存一些不常改变的数据或,以减轻数据库的压力,如缓存组织架构信息、缓存权限配置信息、缓存用户访问次数、单点登录缓存用户sessionKey等,这种方式比较简单。

    2、使用redis的原子性特性进行访问控制,如限制用户点击频率(每10秒可以点击一次)可用以下方式:

    127.0.0.1:6379> setnx "order:confirm:{userId}" 1
    (integer) 1

    127.0.0.1:6379> expire "order:confirm:{userId}" 10
    (integer) 1

    以上操作中只有setnx 成功的线程才允许继续执行下去,否则,将直接提示用户“点击频率过快”

    因为 setnx是原子操作,所以只有一个线程可以设置成功,其它线程设置失败,符合要求

    当线程setnx 成功后,将可以执行接下来的操作,并为缓存key设置过期时间,过期后刚才设置的缓存失效,可以进行下一次点击

    3、使用setbit和getbit命令来实现布隆过滤器,例如缓存所有商品id,防止缓存击穿问题

    将所有商品编号n存到bitmap的第n位,1表示存在,这里假设有两个商品(12345,12346)

    127.0.0.1:6379> setbit goodsIds 12345 1
    (integer) 0
    127.0.0.1:6379> setbit goodsIds 12346 1
    (integer) 0

    判断商品id是否存在

    127.0.0.1:6379> getbit goodsIds 12345
    (integer) 1
    127.0.0.1:6379> getbit goodsIds 12347
    (integer) 0
    127.0.0.1:6379> 
     

    二、下表列出了 redis string基本的相关命令:

    序号

    命令

    举例

    1

    SET key value 

    设置指定 key 的值

    127.0.0.1:6379> set name 'xiaoming'

    OK

    2

    GET key 

    获取指定 key 的值。

    127.0.0.1:6379> get name

    "xiaoming"

    3

    GETRANGE key start end 

    返回 key 中字符串值的子字符

    127.0.0.1:6379> getrange name 4 8

    "ming"

    4

    GETSET key value

    将给定 key 的值设为 value ,并返回 key 的旧值(old value)。

    127.0.0.1:6379> getset name 'xiaohong'

    "xiaoming"

    5

    GETBIT key offset

    对 key 所储存的字符串值,获取指定偏移量上的位(bit)。

    127.0.0.1:6379> setbit video 100 1

    (integer) 0

    127.0.0.1:6379> getbit video 100

    (integer) 1

    6

    MGET key1 [key2..]

    获取所有(一个或多个)给定 key 的值。

    127.0.0.1:6379> mget name name1

    1) "xiaoming"

    2) "xiaohong"

    7

    SETBIT key offset value

    对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。

    127.0.0.1:6379> setbit video 100 1

    (integer) 0

    127.0.0.1:6379> getbit video 100

    (integer) 1

    8

    SETEX key seconds value

    将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。

    127.0.0.1:6379> setex name 10 xiaoming

    OK

    9

    SETNX key value

    只有在 key 不存在时设置 key 的值。

    127.0.0.1:6379> setnx xiaoming_age 10

    (integer) 1

    127.0.0.1:6379> setnx xiaoming_age 18

    (integer) 0

    10

    SETRANGE key offset value

    用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。

    127.0.0.1:6379> setrange name 3 le

    (integer) 8

    127.0.0.1:6379> get name

    "xialeing"

    11

    STRLEN key

    返回 key 所储存的字符串值的长度。

    127.0.0.1:6379> strlen name

    (integer) 8

    12

    MSET key value [key value ...]

    同时设置一个或多个 key-value 对。

    127.0.0.1:6379> mset name xiaoming name1 xiaohong

    OK

    13

    MSETNX key value [key value ...] 

    同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。

    127.0.0.1:6379> msetnx name xiaoming name5 xiaogang

    (integer) 0

    127.0.0.1:6379> get name5

    (nil)

    14

    PSETEX key milliseconds value

    这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。

    127.0.0.1:6379> psetex name 1000 xiaoming

    OK

    15

    INCR key

    将 key 中储存的数字值增一。

    127.0.0.1:6379> set age 10

    OK

    127.0.0.1:6379> incr age

    (integer) 11

    16

    INCRBY key increment

    将 key 所储存的值加上给定的增量值(increment) 。

    127.0.0.1:6379> set age 10

    OK

    127.0.0.1:6379> incrby age 2

    (integer) 12

    17

    INCRBYFLOAT key increment

    将 key 所储存的值加上给定的浮点增量值(increment) 。

    127.0.0.1:6379> set weight 40

    OK

    127.0.0.1:6379> incrbyfloat weight 1.5

    "41.5"

    18

    DECR key

    将 key 中储存的数字值减一。

    127.0.0.1:6379> set age 10

    OK

    127.0.0.1:6379> decr age

    (integer) 9

    19

    DECRBY key decrement

    key 所储存的值减去给定的减量值(decrement) 。

    127.0.0.1:6379> set age 18

    OK

    127.0.0.1:6379> decrby age 8

    (integer) 10

    20

    APPEND key value

    如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾。

    127.0.0.1:6379> append name -xionghaizi

    (integer) 19

    127.0.0.1:6379> get name

    "xiaoming-xionghaizi"

  • 相关阅读:
    nginx负载均衡实现
    shiro 退出 清除缓存
    从零到实现Shiro中Authorization和Authentication的缓存
    Mysql 语句
    N! java
    大数java(pow)
    HDU_1548
    Mike and strings 798B
    Array Division 808D
    poj_1979(dfs)
  • 原文地址:https://www.cnblogs.com/cblogs/p/9720373.html
Copyright © 2011-2022 走看看