Redis的字符串(String)使用

84 阅读4分钟

来自文章集合:一文带你搞懂redis使用过程(持续更新中)

字符串(String)

场景

  • 缓存数据:缓存,存储经常访问的数据,加快读取速度
  • 计数器:记录用户点击次数、文章阅读量
  • 数据存储:存储小的数据结构:用户个人信息、配置信息等
  • 分布式锁:使用redis字符串来实现分布式锁
  • 回话存储:存储用户会话信息,提高网站性能和可扩展性
  • 位图操作:记录每天用户状态:离线、在线等。

位图是一种数据结构,用于存储位的集合或序列。它由一系列按顺序排列的位组成,每个位只能是 0 或 1。在计算机科学中,位图经常用于表示布尔值数组或位向量。在 Redis 中,位图可以用作位操作的数据结构,例如用于跟踪用户在线状态、统计用户行为等。

用法示例

//  创建(设置)key:SET <key_name> <key_value>
    127.0.0.1:6379> set redis_text_1 redis
    OK

//  查询key:GET <key_name>
    127.0.0.1:6379> get redis_text_1
    "redis"

//  范围查看指定key中字符串的子字符串:GETRANGE <key_name> <start_index> <end_index>
    127.0.0.1:6379> get redis_text_1
    "redis"
    127.0.0.1:6379> GETRANGE redis_text_1 0 3
    "redi"
    127.0.0.1:6379> GETRANGE redis_text_1 2 8
    "dis"
    127.0.0.1:6379> GETRANGE redis_text_1 0 -1
    "redis"
    127.0.0.1:6379> GETRANGE redis_text_1 2 -1
    "dis"
    127.0.0.1:6379> GETRANGE redis_text_1 2 -2
    "di"
    127.0.0.1:6379> GETRANGE redis_text_1 2 0
    ""
    127.0.0.1:6379> GETRANGE redis_text_1 2 1
""

//  获取多个给定 key 的值:MGET key [key...]
    127.0.0.1:6379> get redis_text_1
    "new_redis"
    127.0.0.1:6379> set redis_text_2 redis_2
    OK
    127.0.0.1:6379> set redis_text_3 redis_3
    OK
    127.0.0.1:6379> MGET redis_text_1 redis_text_2 redis_text_3
    1) "new_redis"
    2) "redis_2"
    3) "redis_3"

//  同时设置一个或多个给定key中的值:MSET key value [key value...]
    127.0.0.1:6379> flushDB
    OK
    127.0.0.1:6379> MSET redis_text_1 redis_1 redis_text_2 redis_2 redis_text_3 redis_3
    OK
    127.0.0.1:6379> keys *
    1) "redis_text_2"
    2) "redis_text_1"
    3) "redis_text_3"
    127.0.0.1:6379> MGET redis_text_1 redis_text_2 redis_text_3
    1) "redis_1"
    2) "redis_2"
    3) "redis_3"

//  同时设置一个或多个给定的key-value,当且仅当所有给定的key都不存在
127.0.0.1:6379> flushDB
OK
127.0.0.1:6379> MSETNX redis_text_1 redis_1 redis_text_2 redis_2 redis_text_3 redis_3
(integer) 1
127.0.0.1:6379> MSETNX redis_text_1 redis_1 redis_text_2 redis_2 redis_text_3 redis_3
(integer) 0
127.0.0.1:6379> MSETNX redis_text_1 redis_1 redis_text_2 redis_2 redis_text_3 redis_3 redis_text_4 reids_4
(integer) 0
127.0.0.1:6379> keys *
1) "redis_text_2"
2) "redis_text_1"
3) "redis_text_3"

//  SETBIT 和 GETBIT 是 Redis 中用于位操作的命令,可以用于处理字符串的二进制位。这些命令主要用于位图、布隆过滤器等场景。下面用来设置用户的登录状态,1表示在线,0表示离线
    127.0.0.1:6379> setbit online_users 1001 1
    (integer) 0
    127.0.0.1:6379> getbit online_users 1001
    (integer) 1
    127.0.0.1:6379> setbit online_users 1001 0
    (integer) 1
    127.0.0.1:6379> getbit online_users 1001
    (integer) 0

//  只有key不存在时设置key的值:SETNX <key_name> <key_value>
    127.0.0.1:6379> SETNX redis_text_1 redis
    (integer) 0
    127.0.0.1:6379> SETNX redis_text_4 redis_4
    (integer) 1
    127.0.0.1:6379> EXISTS redis_text_4
    (integer) 1


//  将value与key相关联,并设置key的过期时间(秒):SETEX <key_name> <seconds> <key_value>
    127.0.0.1:6379> SETEX expire_redis_text 10 expire_redis
    OK
    127.0.0.1:6379> keys *
    1) "redis_text_1"
    2) "redis_text_2"
    3) "redis_text_3"
    4) "expire_redis_text"
    5) "online_users
    "
    //  10秒之后查询所有key
    127.0.0.1:6379> keys *
    1) "redis_text_1"
    2) "redis_text_2"
    3) "redis_text_3"
    4) "online_users"

    //  关联一个原有的键
    127.0.0.1:6379> SETEX redis_text_1 10 redis_1
    OK
    127.0.0.1:6379> get redis_text_1
    "redis_1"
    127.0.0.1:6379> keys *
    1) "redis_text_1"
    2) "redis_text_2"
    3) "redis_text_3"
    4) "redis_text_4"
    5) "online_users"

    //  10秒后查询
    127.0.0.1:6379> keys *
    1) "redis_text_2"
    2) "redis_text_3"
    3) "redis_text_4"
    4) "online_users"

//  用法同上,将value与key相关联,并设置key的过期时间(毫秒):PSETEX <key_name> <millseconds> <key_value>
    127.0.0.1:6379> PSETEX expire_redis_text 10 expire_redis
    OK

//  用指定字符串覆盖key所存储offset索引后(包含offset索引)的字符串:SETRANGE <key_name> <offset> <value> 
127.0.0.1:6379> set redis_text_2 "Hello World"
OK
127.0.0.1:6379> get redis_text_2
"Hello World"
127.0.0.1:6379> SETRANGE redis_text_2 6 Redis
(integer) 11
127.0.0.1:6379> get redis_text_2
"Hello Redis"

//  查询字符串的长度
127.0.0.1:6379> STRLEN redis_text_2
(integer) 11

//  将key中存储的数字值增1(仅能用于数字)
127.0.0.1:6379> INCR redis_text_1
(error) ERR value is not an integer or out of range
127.0.0.1:6379> set redis_integer_1 10
OK
127.0.0.1:6379> INCR redis_integer_1
(integer) 11

//  将key中存储的数字加上给定的增加值
127.0.0.1:6379> INCRBY redis_integer_1 20
(integer) 31

//  将key中存储的数字值减1
127.0.0.1:6379> DECR redis_integer_1
(integer) 30

//  将key中存储的数字减去给定的减量值
127.0.0.1:6379> DECRBY redis_integer_1 20
(integer) 10

//  如果key已存在并且是一个字符串,APPEND命令将value追加到key的原值末尾
127.0.0.1:6379> append redis_integer_1 "+20"
(integer) 5
127.0.0.1:6379> get redis_integer_1
"10+20"