Redis 数据类型

Redis 支持七种数据类型

  1. string ( 字符串 )
  2. hash ( 哈希 )
  3. list ( 列表 )
  4. set ( 集合 )
  5. zset ( sorted set:有序集合 )
  6. Bitmaps ( 位图 )
  7. HyperLogLogs ( 基数统计 )

String(字符串)

  1. string 是 Redis 最基本的数据类型,key/value。
  2. string 类型的一个键最大能存储512 MB 数据。
  3. Redis 的 string 可以包含任何数据,比如 jpg 图片或者序列化的对象。
  4. string 类型是二进制安全的。

使用 Redis 的 SETGET 命令来进行设置和读取字符串。

1
2
3
4
5
6
7
127.0.0.1:6379> set name 面向加薪学习
OK
127.0.0.1:6379> get name
"\xe9\x9d\xa2\xe5\x90\x91\xe5\x8a\xa0\xe8\x96\xaa\xe5\xad\xa6\xe4\xb9\xa0"

使用工具查看
"面向加薪学习"

Hash(哈希)

  1. Redis Hash 是一个 string 类型的 field 和 value 的映射表。
  2. 每个 hash 可以存储 232-1 键值对(40 多亿)。
  3. Hash 适合用于存储对象。
1
2
3
4
5
6
7
8
9
127.0.0.1:6379> hmset account:1 name huanxi password 123456 fav travel
OK
127.0.0.1:6379> hgetall account:1
1) "name"
2) "huanxi"
3) "password"
4) "123456"
5) "fav"
6) "travel"

使用 Redis HMSET, HGETALL 命令, account:1 为键。

List(列表)

  1. List 是简单的字符串列表,按照插入顺序排序。
  2. 向列表中添加一个元素,可以从列表的头部 ( 左边 ) 或者尾部 ( 右边 )开始。
1
2
3
4
5
6
7
8
9
10
127.0.0.1:6379> rpush study Go语言极简一本通 Go语言微服务核心架构22讲 从0到Go语言微服务架构师
(integer) 3
127.0.0.1:6379> lrange study 0 10
1) "Go\xe8\xaf\xad\xe8\xa8\x80\xe6\x9e\x81\xe7\xae\x80\xe4\xb8\x80\xe6\x9c\xac\xe9\x80\x9a"
2) "Go\xe8\xaf\xad\xe8\xa8\x80\xe5\xbe\xae\xe6\x9c\x8d\xe5\x8a\xa1\xe6\xa0\xb8\xe5\xbf\x83\xe6\x9e\xb6\xe6\x9e\x8422\xe8\xae\xb2"
3) "\xe4\xbb\x8e0\xe5\x88\xb0Go\xe8\xaf\xad\xe8\xa8\x80\xe5\xbe\xae\xe6\x9c\x8d\xe5\x8a\xa1\xe6\x9e\xb6\xe6\x9e\x84\xe5\xb8\x88"

1 Go语言极简一本通
2 Go语言微服务核心架构22讲
3 从0到Go语言微服务架构师

Set(集合)

  1. Set 是 string 类型的无序集合

  2. Set 内元素不可重复,无论插入多少次,只会保留一份。

  3. Set 是通过哈希表实现的,所以添加,删除,查找的时间复杂度都是 O(1)。

sadd 命令

sadd 添加一个 string 元素到 set 集合中。

Redis sadd 语法

1
sadd key member

例子

1
2
3
4
5
6
7
8
9
10
11
12
13
127.0.0.1:6379> sadd gostudy Go语言极简一本通
(integer) 1
127.0.0.1:6379> sadd gostudy Go语言微服务核心架构22讲
(integer) 1
127.0.0.1:6379> sadd gostudy 从0到Go语言微服务架构师
(integer) 1
127.0.0.1:6379> sadd gostudy Go语言极简一本通
(integer) 0

127.0.0.1:6379> smembers gostudy
1) "\xe4\xbb\x8e0\xe5\x88\xb0Go\xe8\xaf\xad\xe8\xa8\x80\xe5\xbe\xae\xe6\x9c\x8d\xe5\x8a\xa1\xe6\x9e\xb6\xe6\x9e\x84\xe5\xb8\x88"
2) "Go\xe8\xaf\xad\xe8\xa8\x80\xe5\xbe\xae\xe6\x9c\x8d\xe5\x8a\xa1\xe6\xa0\xb8\xe5\xbf\x83\xe6\x9e\xb6\xe6\x9e\x8422\xe8\xae\xb2"
3) "Go\xe8\xaf\xad\xe8\xa8\x80\xe6\x9e\x81\xe7\xae\x80\xe4\xb8\x80\xe6\x9c\xac\xe9\x80\x9a"

Go 语言极简一本通 添加了两次,但最后只存储了一份。

zset ( sorted set:有序集合 )

zset 和 set 一样也是 string 类型元素的集合。不同的是 zset 中的每个元素都有自己的分数(double 类型),通过分数来对集合中的元素进行排序。这个分数是不重复的。

Redis zadd 命令

zset 添加元素到集合中,如果元素在集合中存在则更新对应分数(score)。

Redis zadd 命令语法格式

1
zadd key score member

例子

1
2
3
4
5
6
7
8
9
10
11
12
13
127.0.0.1:6379> zadd studymap 1 Go语言极简一本通
(integer) 1
127.0.0.1:6379> zadd studymap 2 Go语言微服务架构核心22讲
(integer) 1
127.0.0.1:6379> zadd studymap 3 从0到Go语言微服务架构师
(integer) 1
127.0.0.1:6379> zadd studymap 4 Go语言极简一本通
(integer) 0

zrangebyscore studymap 0 10
1) "Go\xe8\xaf\xad\xe8\xa8\x80\xe5\xbe\xae\xe6\x9c\x8d\xe5\x8a\xa1\xe6\x9e\xb6\xe6\x9e\x84\xe6\xa0\xb8\xe5\xbf\x8322\xe8\xae\xb2"
2) "\xe4\xbb\x8e0\xe5\x88\xb0Go\xe8\xaf\xad\xe8\xa8\x80\xe5\xbe\xae\xe6\x9c\x8d\xe5\x8a\xa1\xe6\x9e\xb6\xe6\x9e\x84\xe5\xb8\x88"
3) "Go\xe8\xaf\xad\xe8\xa8\x80\xe6\x9e\x81\xe7\xae\x80\xe4\xb8\x80\xe6\x9c\xac\xe9\x80\x9a"

golang 被添加 2 次,但是最后只存储了一份。

Redis Bitmap ( 位图 )

Bitmap 通过类似 map 结构存放 0 或 1 ( bit 位 ) 作为值。可以用来统计状态,如 日活,打卡,浏览量等。

setbit 命令

setbit 命令用于设置或者清除一个 bit 位

setbit 命令语法格式

1
SETBIT key offset value

例子

1
2
3
4
5
6
7
8
9
10
127.0.0.1:6379> setbit aa 10001 1 # 返回操作之前的数值
(integer) 0
127.0.0.1:6379> setbit aa 10001 2 # 如果值不是0或1就报错
(error) ERR bit is not an integer or out of range
127.0.0.1:6379> setbit aa 10001 0
(integer) 1
127.0.0.1:6379> setbit aa 10001 1
(integer) 0
127.0.0.1:6379> getbit aa 10001
(integer) 1

如何学以致用,在哪些场景中应用Redis

《Go语言+Redis实战课》

Go语言+Redis实战课-课程大纲 《Go语言+Redis实战课》课程+优惠券合并照片
添加微信 公众号更多内容
wechat gzh