当前位置:   article > 正文

一文详解 Redis 常见数据类型_redis数据格式

redis数据格式

1.Redis 数据类型

Redis支持五种基本数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

3 种特殊数据结构 :HyperLogLogs(基数统计)、Bitmap (位存储)、Geospatial (地理位置)。


2.String

在这里插入图片描述

命令演示:

批量添加查看键值对:

127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 k4 v4
OK
127.0.0.1:6379> mget k1 k2 k3 k4
1) "v1"
2) "v2"
3) "v3"
4) "v4"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

数值递增:

127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> incr age
(integer) 19
127.0.0.1:6379> get age
"19"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3.key的层级格式

Redis没有类似MySQL中的Table的概念,我们该如何区分不同类型的key呢?

例如,需要存储用户、商品信息到redis,有一个用户id是1,有一个商品id恰好也是1

Redis的key允许有多个单词形成层级结构,多个单词之间用’:'隔开,格式如下:

在这里插入图片描述

在这里插入图片描述

尝试插入:

127.0.0.1:6379> set klza:user:1 dahezhiquan
OK
127.0.0.1:6379> set klza:user:2 pipijiang
OK
127.0.0.1:6379> set klza:video:1 weiqiang
OK
127.0.0.1:6379> set klza:video:2 huanghun
OK
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

之后打开客户端,会以层级的方式展开数据:

在这里插入图片描述


4.Hash

Hash类型,也叫散列,其value是一个无序字典,类似于到Java中的HashMap结构。

在这里插入图片描述

插入一个hash值:

127.0.0.1:6379> hset page name qian
(integer) 1
127.0.0.1:6379> hset page age 18
(integer) 1
127.0.0.1:6379> hmget page name
1) "qian"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述

字段自增演示:

127.0.0.1:6379> hincrby page age 2
(integer) 20
127.0.0.1:6379> hincrby page age 2
(integer) 22
127.0.0.1:6379> hmget page age
1) "22"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

5.List

Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索。

特征也与LinkedList类似:

  • 有序
  • 元素可以重复
  • 插入和删除快
  • 查询速度一般

在这里插入图片描述

添加元素演示:

127.0.0.1:6379> lpush users xiaoqian dahe wuwu
(integer) 3
127.0.0.1:6379> rpush users zhangsan lisi wangwu
(integer) 6
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

取出元素:(剔除并返回)

127.0.0.1:6379> lpop users
"wuwu"
  • 1
  • 2

6.Set

Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。因为也是一个hash表,因此具备与HashSet类似的特征:

  • 无序
  • 元素不可重复
  • 查找快
  • 支持交集、并集、差集等操作

在这里插入图片描述

演示:添加元素,查看元素:

127.0.0.1:6379> sadd s1 a b c
(integer) 3
127.0.0.1:6379> smembers s1
1) "b"
2) "c"
3) "a"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

添加重复元素,会添加失败:

127.0.0.1:6379> sadd s1 a d e
(integer) 2
127.0.0.1:6379> smembers s1
1) "b"
2) "c"
3) "d"
4) "a"
5) "e"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

类似的,Set数据结构还支持多个集合的运算:

在这里插入图片描述

演示交集操作:

127.0.0.1:6379> sadd s2 a c g h
(integer) 4
127.0.0.1:6379> smembers s1
1) "b"
2) "c"
3) "d"
4) "a"
5) "e"
127.0.0.1:6379> smembers s2
1) "g"
2) "c"
3) "h"
4) "a"
127.0.0.1:6379> sinter s1 s2
1) "c"
2) "a"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

7.SortedSet

Redis的SortedSet是一个可排序的set集合,与Java中的TreeSet有些类似,但底层数据结构却差别很大。SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加hash表。

SortedSet具备下列特性:

  • 可排序
  • 元素不重复
  • 查询速度快

因为SortedSet的可排序特性,经常被用来实现排行榜这样的功能

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/942964
推荐阅读
相关标签