Redis基础(Hash)
Redis数据类型:
Redis中存储数据是通过key-value格式存储数据的,其中value可以定义五种数据类型:
- String(字符类型)
- Hash(散列类型)
- List(列表类型)
- Set(集合类型)
- SortedSet(有序集合类型,简称zset
注意:在redis中的命令语句中,命令是忽略大小写的,而key是不忽略大小写的。
赋值
语法:SET key value
1 2 | 127.0 . 0.1 : 6379 > set test 123 OK |
取值
语法:GET key
1 2 | 127.0 . 0.1 : 6379 > get test " 123 “ |
取值并赋值
语法:GETSET key value
1 2 3 4 | 127.0 . 0.1 : 6379 > getset s2 222 "111" 127.0 . 0.1 : 6379 > get s2 "222" |
数值增减
注意实现:
1、 当value为整数数据时,才能使用以下命令操作数值的增减。
2、 数值递增都是原子操作。
1 2 3 4 | 非原子性操作示例: int i = 1 ; i++; System.out.println(i) |
递增数字
语法:INCR key.
1 2 3 4 5 6 | 127.0 . 0.1 : 6379 > incr num (integer) 1 127.0 . 0.1 : 6379 > incr num (integer) 2 127.0 . 0.1 : 6379 > incr num (integer) 3 |
增加指定的整数
语法:INCRBY key increment
1 2 3 4 5 6 | 127.0 . 0.1 : 6379 > incrby num 2 (integer) 5 127.0 . 0.1 : 6379 > incrby num 2 (integer) 7 127.0 . 0.1 : 6379 > incrby num 2 (integer) 9 |
递减数值
语法:DECR key
1 2 3 4 | 127.0 . 0.1 : 6379 > decr num (integer) 9 127.0 . 0.1 : 6379 > decr num (integer) 8 |
减少指定的整数
语法:DECRBY key decrement
1 2 3 4 5 6 7 8 | 127.0 . 0.1 : 6379 > decr num (integer) 6 127.0 . 0.1 : 6379 > decr num (integer) 5 127.0 . 0.1 : 6379 > decrby num 3 (integer) 2 127.0 . 0.1 : 6379 > decrby num 3 (integer) - 1 |
仅当不存在时赋值:
使用该命令可以实现分布式锁的功能
语法:setnx key value
redis> EXISTS job # job 不存在
(integer) 0
redis> SETNX job "programmer" # job 设置成功
(integer) 1
redis> SETNX job "code-farmer" # 尝试覆盖 job ,失败
(integer) 0
redis> GET job # 没有被覆盖
"programmer"
向尾部追加值:
APPEND命令,向键值的末尾追加value。如果键不存在则将该键的值设置为value,即相当于 SET key value。返回值是追加后字符串的总长度。
语法:APPEND key value
1 2 3 4 5 6 | 127.0 . 0.1 : 6379 > set str hello OK 127.0 . 0.1 : 6379 > append str " world!" (integer) 12 127.0 . 0.1 : 6379 > get str "hello world!" |
获取字符串长度:
STRLEN命令,返回键值的长度,如果键不存在则返回0。
语法:STRLEN key
1 2 3 4 5 6 | 127.0 . 0.1 : 6379 > strlen str (integer) 0 127.0 . 0.1 : 6379 > set str hello OK 127.0 . 0.1 : 6379 > strlen str (integer) 5 |
同时设置/获取多个键值:
语法:
MSET key value [key value …]
MGET key [key …]
1 2 3 4 5 6 7 | 127.0 . 0.1 : 6379 > mset k1 v1 k2 v2 k3 v3 OK 127.0 . 0.1 : 6379 > get k1 "v1" 127.0 . 0.1 : 6379 > mget k1 k3 1 ) "v1" 2 ) "v3" |
应用场景之自增主键
l 需求:商品编号、订单号采用INCR命令生成。
l 设计:key命名要有一定的设计
l 实现:定义商品编号key:items:id
192.168.101.3:7003> INCR items:id
(integer) 2
192.168.101.3:7003> INCR items:id
(integer) 3
hash介绍
hash叫散列类型,它提供了字段和字段值的映射。字段值只能是字符串类型,不支持散列类型、集合类型等其它类型。如下:
命令:
赋值
HSET命令不区分插入和更新操作,当执行插入操作时HSET命令返回1,当执行更新操作时返回0。
一次只能设置一个字段值
语法:HSET key field value
1 2 | 127.0 . 0.1 : 6379 > hset user username zhangsan (integer) 1 |
一次可以设置多个字段值
语法:HMSET key field value [field value ...]
1 2 | 127.0 . 0.1 : 6379 > hmset user age 20 username lisi OK |
当字段不存在时赋值,类似HSET,区别在于如果字段存在,该命令不执行任何操作
语法:HSETNX key field value
1 2 | 127.0 . 0.1 : 6379 > hsetnx user age 30 如果user中没有age字段则设置age值为 30 ,否则不做任何操作 (integer) 0 |
取值
一次只能获取一个字段值
语法:HGET key field
1 2 | 127.0 . 0.1 : 6379 > hget user username "zhangsan“ |
一次可以获取多个字段值
语法:HMGET key field [field ...]
1 2 3 | 127.0 . 0.1 : 6379 > hmget user age username 1 ) "20" 2 ) "lisi" |
获取所有字段值
语法:HGETALL key
1 2 3 4 5 | 127.0 . 0.1 : 6379 > hgetall user 1 ) "age" 2 ) "20" 3 ) "username" 4 ) "lisi" |
删除字段
可以删除一个或多个字段,返回值是被删除的字段个数
语法:HDEL key field [field ...]
1 2 3 4 5 6 | 127.0 . 0.1 : 6379 > hdel user age (integer) 1 127.0 . 0.1 : 6379 > hdel user age name (integer) 0 127.0 . 0.1 : 6379 > hdel user age username (integer) 1 |
增加数字
语法:HINCRBY key field increment
1 2 3 4 | 127.0 . 0.1 : 6379 > hincrby user age 2 将用户的年龄加 2 (integer) 22 127.0 . 0.1 : 6379 > hget user age 获取用户的年龄 " 22 “ |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· Winform-耗时操作导致界面渲染滞后
· Phi小模型开发教程:C#使用本地模型Phi视觉模型分析图像,实现图片分类、搜索等功能
· 语音处理 开源项目 EchoSharp
· drools 规则引擎和 solon-flow 哪个好?solon-flow 简明教程