来自文章集合:
一文带你搞懂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"