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"

 应用场景之自增主键 

需求商品编号、订单号采用INCR命令生成。

设计key命名要有一定的设计

实现定义商品编号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
posted @   Caoner  阅读(193)  评论(0编辑  收藏  举报
编辑推荐:
· 如何打造一个高并发系统?
· .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 简明教程
点击右上角即可分享
微信分享提示