string
以下是基于图片中 redis string类型命令 的提取与优化整理,结合实用场景和注意事项,便于快速掌握核心用法:
redis string类型命令详解与优化指南
1. 基础操作
命令 | 语法示例 | 作用 | 场景说明 |
set | set key value | 添加/修改键值对 | 缓存、简单数据存储 |
get | get key | 获取key对应的value | 读取缓存或配置 |
setnx | setnx key value | key不存在时才设置(原子操作) | 分布式锁、防重复提交 |
set get setnx
- setnx 如果key值不存在 才添加 如果存在 就不添加 这才是 真正的新增操作
- set 后面 跟nx 也可以实现
2. 批量操作
命令 | 语法示例 | 优势 |
mset | mset k1 v1 k2 v2 | 减少网络开销,批量写入 |
mget | mget k1 k2 | 批量读取,提升效率 |
mset
多量 添加/修改mget
多量 获取
3. 数字增减
命令 | 语法示例 | 说明 |
incr | incr key | 整数+1(如计数器) |
incrby | incrby key 5 | 指定步长(如+5) |
incrbyfloat | incrbyfloat key 0.5 | 浮点数增减(如库存调整) |
incr (auto-increment)
incrby
值改成 负的 就 是自减了incrbyfloat
浮点数增减
4. 有效期控制
命令 | 语法示例 | 用途 |
setex | setex key 60 "value" | 设置键值对并指定有效期(秒) |
psetex | psetex key 10000 "value" | 毫秒级有效期(精准控制) |
setex (ex =expire)
添加一个key 并且 设置有效期
同样在后面加 ex 可以实现
psetex
命令对比速查表
需求 | 应选命令 | 替代方案 |
设置值并过期 | setex | set +expire |
防覆盖写入 | setnx | set +nx 参数 |
浮点数计算 | incrbyfloat | 客户端计算后set |
key的层级模式
在这里面就形成了层级结构
hash类型
redis hash类型常见命令速查表
命令格式 | 功能描述 | 示例用法 |
hset key field value | 设置/修改hash键中指定字段的值 | hset user:100 name "张三" |
hget key field | 获取hash键中指定字段的值 | hget user:100 name → "张三" |
hmset key field1 value1 [field2 value2...] | 批量设置多个字段值(redis 4.0+建议改用hset) | hmset product:500 price 2999 stock 100 |
hmget key field1 [field2...] | 批量获取多个字段的值 | hmget user:100 name age |
hgetall key | 获取hash键中所有字段和值(返回交替显示的字段/值列表) | hgetall user:100 |
hkeys key | 获取hash键中所有字段名 | hkeys product:500 → ["price", "stock"] |
hvals key | 获取hash键中所有字段值 | hvals product:500 → ["2999", "100"] |
hincrby key field increment | 对指定字段值进行整数递增/递减(支持负数) | hincrby product:500 stock -5 |
hsetnx key field value | 仅当字段不存在时设置值(原子操作) | hsetnx user:100 email "a@test.com" |
- hset
相当于 一个 key 可以存放 多个哈希key 和 哈希value
- hget
要同时指定 key 和 哈希key 才可以获得 哈希value
hmset 输入一个key 和一次性添加多个 哈希key 和 哈希value
hmget 输入一次key 一次性输入 多个 哈希key 去获得 多个 哈希value
hgetall 输入一次key 获得所有 的哈希key 哈希value 依次返回
hkeys 获得所有的哈希key
hvals 获得所有的哈希value
hincrby 指定 key 指定哈希key 选择增加的 数值
hsetnx 指定key 和 哈希key 如果哈希key不存在 则添加 value 如果 存在 则添加失败
link类型
list接近于 java中的linkedlist
lpush 向左推入元素 l是 left
先推入1 后 2 后3 所以顺序是 321
rpush 向右推入元素 r是 right
lpop 向左取出元素 并且删除该元素
rpop 向右取出元素 并且删除该元素
lrange 从左到右取出 范围内的数 并且不删除
blpop 左 延迟等待 删除
阻塞方式 第三个参数是时间
如果表内不存在数据 就会等100s 去等
打开第二个客户端去添加数据 然后第一个客户端就会 接收到然后删除
brpop 右 延迟等待删除
阻塞方式 第三个参数是时间
如果表内不存在数据 就会等100s 去等
打开第二个客户端去添加数据 然后第一个客户端就会 接收到然后删除
set类型
list接近于 java中的linkedlist
lpush 向左推入元素 l是 left
先推入1 后 2 后3 所以顺序是 321
rpush 向右推入元素 r是 right
lpop 向左取出元素 并且删除该元素
rpop 向右取出元素 并且删除该元素
lrange 从左到右取出 范围内的数 并且不删除
blpop 左 延迟等待 删除
阻塞方式 第三个参数是时间
如果表内不存在数据 就会等100s 去等
打开第二个客户端去添加数据 然后第一个客户端就会 接收到然后删除
brpop 右 延迟等待删除
阻塞方式 第三个参数是时间
如果表内不存在数据 就会等100s 去等
打开第二个客户端去添加数据 然后第一个客户端就会 接收到然后删除
sortset类型
zadd 添加 注意的是 第一个是 key 然后 前面的数据是 score 后面的值是 value
它会自动按照score 分数排名 升序
zrem (rem remove) key 为 stus 就是把value 为 tom 的删除掉
zrank (rank 排名)
它返回的排名 是从 0 开始的 0 1 2 所以 就是 2
zrevrank (rev = reverse rank 排名)
倒序排序 从0开始 0 1 2 3 所以是 3
zcard 获取所有元素总个数
zcount 0 82 范围查询个数
zincrby (选择自增多少分 改成负的就减分了)
zrange (查出这个范围的所有数据) 起始为0
zrevrange 通过排序个数 范围查询 (rev = reverse range 范围) )
zrangebyscore 通过分数范围查询 value
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论