2. redis五种数据类型(慕课)
anlondon Lv6

来源:免费 redis的五种数据类型-慕课网
课程只是基础介绍,详细指令见官网

整体介绍

数据类型 存储的值 读写能力
String 可以是字符串、整数或浮点,统称为元素 对字符串操作对整数类型加减
List 一个序列集合且每个节点都包好了一个元素 序列两端推入、或弹出元素修剪、查找或移除元素
Set 各不相同的元素 从集合中插入或者删除元素
Hash 有key-value的散列组,其中key是字符串,value是元素 按照key进行增加删除
Sort Set 带分数的score-value有序集合,其中score为浮点,value为元素 集合插入,按照分数范围查找

string类型

  • string类型的键和值可以是 字符串(str)、整数(int)、浮点小数(float)

    key value(string/int/float)
  • 操作string类型元素
    设置一个string类型的元素# set key value
    获取一个string类型的元素# get key
    连接状态下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $ set string1 nihaoya~ #设置一个string类型的元素
    #ok
    $ get string1 #获取该元素的值
    #"nihaoya~"

    $ set string2 123 #设置一个整数值
    #ok
    $ get string2 #获取该元素的值
    #"123"

    $ set 1 123456 #设置一个key,value都为整数的元素
    #ok
    $ get 1 #获取该元素的值
    #"123456"

    string类型元素自增自减

    1
    2
    3
    4
    $ incr string2 5 #自增操作,表示string2+5,不写5默认为1
    #(int) 128
    $decrby string2 #自减操作,默认减一
    #(int) 127

list类型

  • list是一个有序的列表

  • list元素与string元素一样可以为:str,int,float,并且元素可以重复

  • 一个列表最多包含超40亿个元素

  • 对list操作需要说明方向:

    假设我们有个list数据
    list1=>[1,2,3,4]
    操作设置的方向,即设定从list的左l(left)/右r(right)操作为

    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ lpush list1 0 #从左边插入一位
    #(int) 5 #list1中元素个数为5
    #此时list1=>[0,1,2,3,4]
    $ rpop list1 #从右边弹出一位
    #(int) "4"
    #此时list1=>[0,1,2,3]

    $ llen list1 #查看元素个数(不分左右,没有rlen)
    #(int) 4

set类型

  • Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
    指令:s(set)-xxx

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    $ sadd set1 12 #给set1插入一个元素12
    #(int) 1 #表示插入成功
    $ sadd set1 13
    #(int) 1
    $ sadd set1 13
    #(int) 0 #表示插入失败

    #set1中有多少个元素
    $ scard set1
    #(int) 2

    #判断某个元素是否在列表内
    $ sismember set1 13
    #(int) 1

    #删除某个元素
    $ srem set1 13
    #(int) 1
  • Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

  • 每个集合可存储40多亿个成员。

hash类型

  • Redis hash 是一个 string 类型的 key-value(键值对)的映射表,hash 特别适合用于存储对象。
  • hash 的键值是一一对应的
  • Redis 中每个 hash 可以存储40多亿键值对。
    指令 h(hash)-xxx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#插入一个键值到hash表中,返回1表示插入成功
$ hset hash1 key1 12
#(int) 1
$ hset hash1 key2 13
#(int) 1
$ hset hash1 key3 13
#(int) 1
$ hlen hash1
#(int) 3

#hset的键(key)如果存在,且值(value)成功覆盖旧值就返回0
$ hset hash1 key3 14
#(int) 0

#根据键获取值
$ hmget hash1 key3 key1 key2
#1) "14"
#2) "12"
#3) "13"

#获取全部内容
$ hgetall hash1
#1) "key1"
#2) "12"
#3) "key12"
#4) "13"
#5) "key3"
#6) "14"

#插入多条内容
$ hmset hash2 name "redis tutorial" description "redis basic commands for caching" likes 20 visitors 23000
#OK
$ hgetall hash2
#1) "name"
#2) "redis tutorial"
#3) "description"
#4) "redis basic commands for caching"
#5) "likes"
#6) "20"
#7) "visitors"
#8) "23000"

sort set类型

  • 是一个有序集合,且不允许重复的value。

  • 可看做一个排行榜,score为热度(分数),value为内容(姓名),rank为隐藏部分属于排行,score值最小rank越靠前

  • 映射关系不同于hash的key-value,sortSet的映射为score-value,score为浮点数。
    ![RH3S5BR$YZNE0OIGHZZEU`0.png](/2022/08/21/2-redis五种数据类型(慕课)/2fca0ee6.png)

  • value是唯一的,重复时会覆盖之前那条数据的scorevalue

  • score相同时,排序根据value中字段的字典顺序

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    # 添加 table score value
    $ zadd zset1 10.1 val1
    #(int) 1
    $ zadd zset1 11.2 val2
    #(int) 1
    $ zadd zset1 12.3 val3
    #(int) 1


    #value相同时,覆盖之前的数据
    $ zadd zset1 9.1 val1
    #(int) 0

    $ zcard zset1 #查看元素个数
    #(int) 3

    $ zrange zset1 0 2 withscores #根据score查出0到2的排序
    #1) "val1"
    #2) "9.0999999999999996"
    #3) "val2"
    #4) "11.199999999999999"
    #5) "val3"
    #6) "12.300000000000001"


    #`score`相同时,排序根据`value`中字段的字典顺序
    $ zadd zset1 12.3 val0
    #(int) 1

    $ zrange zset1 0 3 withscores
    #1) "val1"
    #2) "9.0999999999999996"
    #3) "val2"
    #4) "11.199999999999999"
    #5) "val0"
    #6) "12.300000000000001"
    #7) "val3"
    #8) "12.300000000000001"

    #查看某个value排序
    $ zrank zset1 val2
    #(int) 1
 Comments