• 02【Redis数据类型】


    二、Redis数据类型

    2.1 String数据类型

    2.2.1 String基本操作

    • String类型数据结构如下:

    在这里插入图片描述

    • set:存数据

      • 格式:

      • SET key value
        
        • 1
      • 示例:

      • WindowsServer:0>set name zhangsan
        "OK"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
    • get:取数据

      • 格式:

      • GET key
        
        • 1
      • 示例:

      • WindowsServer:0>get name
        "zhangsan"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
    • del:删除数据

      • 格式:

      • DEL key [key ...]
        
        • 1
      • 示例:

      • WindowsServer:0>del name
        "1"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
    • mset:一次性存储多个key

      • 格式:

      • MSET key value [key value ...]
        
        • 1
      • 语法:

      • WindowsServer:0>mset a zhangsan b lisi c wangwu
        "OK"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
    • mget:一次性取多个key

      • 格式:

      • MGET key [key ...]
        
        • 1
      • 语法:

      • WindowsServer:0>mget a b c
        1) "zhangsan"
        2) "lisi"
        3) "wangwu"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
        • 4
        • 5
    • strlen:获取字符个数

      • 格式:

      • STRLEN key
        
        • 1
      • 语法:

      • WindowsServer:0>strlen a
        "8"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
    • append:追加字符串(如果没有则新增)

      • 格式:

      • APPEND key value
        
        • 1
      • 语法:

      • WindowsServer:0>append a 88
        "10"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
    • setnx:存入key,如果这个key存在则返回0(false),代表存入失败,如果不存在则返回1(true),代表存入成功;

      • 格式:

      • setnx key value
        
        • 1
      • 语法:

      • WindowsServer:0>setnx flag 0
        "1"
        WindowsServer:0>setnx flag 0
        "0"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
        • 4
        • 5

    2.2.2 自增自减操作

    • 自增:

      • 语法:

      • incr key
        
        • 1
      • 格式:

      • WindowsServer:0>set num 10
        "OK"
        WindowsServer:0>incr num
        "11"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
        • 4
        • 5
    • 控制步长自增:

      • 语法:

      • incrby key increment
        
        • 1
      • 格式:

      • WindowsServer:0>incrby num 10
        "21"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
    • float类型自增:

      • 格式:

      • incrbyfloat key increment		# 自增小数
        
        • 1
      • 语法:

      • WindowsServer:0>set num2 0.5
        "OK"
        WindowsServer:0>incrbyfloat num2 0.5
        "1"
        WindowsServer:0>incrbyfloat num2 0.5
        "1.5"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
    • 自减

      • 语法:

      • decr key
        
        • 1
      • 示例:

      • WindowsServer:0>set num 10
        "OK"
        WindowsServer:0>decr num
        "9"
        WindowsServer:0>decr num
        "8"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
    • 控制步长自减:

      • 语法:

      • decrby key increment
        
        • 1
      • 示例:

      decrby a 10
      
      • 1

    2.2.3 控制时效性

    • 语法:
    setex key seconds value		# 秒
    
    psetex key milliseconds value		# 毫秒
    
    • 1
    • 2
    • 3
    • 示例:
    WindowsServer:0>setex name 5 zhangsan
    "OK"
    WindowsServer:0>psetex name 5000 zhangsan
    "OK"
    WindowsServer:0>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.2 Hash数据类型

    • hash类型的存储结构如下:

    在这里插入图片描述

    hash类型的数据结构,底层采用hash表存储。

    1.2.1 hash基本操作

    • hset:添加/修改数据

      • 格式:

      • HSET key field value
        
        • 1
      • 示例:

      • WindowsServer:0>hset user username zs
        "1"
        WindowsServer:0>hset user password admin
        "1"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
        • 4
        • 5
    • hegt:添加/修改数据

      • 格式:

      • HGET key field
        
        • 1
      • 示例:

      • WindowsServer:0>hget user username
        "zs"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
    • hdel:删除数据

      • 格式:

      • HDEL key field [field ...]
        
        • 1
      • 示例:

      • WindowsServer:0>hdel user password
        "1"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
    • hmset:一次性添加/修改多个字段

      • 格式:

      • HMSET key field value [field value ...]
        
        • 1
      • 示例:

      • WindowsServer:0>hmset user username zs password admin age 20
        "OK"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
    • hmget:一次性取多个数据

      • 格式:

      • HMGET key field [field ...]
        
        • 1
      • 示例:

      • WindowsServer:0>hmget user username password age
        1) "zs"
        2) "admin"
        3) "20"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
        • 4
        • 5
    • 获取指定key的field的数量

      • 格式:

      • HLEN key
        
        • 1
      • 示例:

      • WindowsServer:0>hlen user
        "3"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
    • hexists:判断指定的key中是否包含有指定的field(返回1[有]或0[没有])

      • 格式:

      • HEXISTS key field
        
        • 1
      • 示例:

      • WindowsServer:0>hexists user username
        "1"
        WindowsServer:0>hexists user xxx
        "0"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
        • 4
        • 5

    1.2.2 hash扩展操作

    • hkeys:获取key中所有的field

      • 格式:

      • HKEYS key
        
        • 1
      • 示例:

      • WindowsServer:0>hkeys user
        1) "username"
        2) "password"
        3) "age"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
        • 4
        • 5
    • hvals:获取key中所有的value

      • 格式:

      • HVALS key
        
        • 1
      • 示例:

      • WindowsServer:0>hvals user
        1) "zs"
        2) "admin"
        3) "20"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
        • 4
        • 5
    • hgetall:获取指定key中所有的field以及value值

      • 格式:

      • HGETALL key
        
        • 1
      • 示例:

      • WindowsServer:0>hgetall user
        1) "username"
        2) "zs"
        3) "password"
        4) "admin"
        5) "age"
        6) "20"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
    • hsetnx:如果指定key中有对应的field则返回0(false),如果没有则存对应的值进去

      • 格式:

      • HSETNX key field value
        
        • 1
      • 示例:

      • WindowsServer:0>hsetnx user flag 1
        "1"
        WindowsServer:0>hsetnx user flag 1
        "0"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
        • 4
        • 5

    2.3 List数据类型

    在Redis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素。在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。Redis中的list类型采用的是双向链表。

    Redis存储结构如下:

    在这里插入图片描述

    2.3.1 list基本操作

    • 添加/修改数据

      • 格式:

      • LPUSH key value [value ...]		# 添加到队列左侧
        RPUSH key value [value ...]		# 添加到队列右侧
        
        • 1
        • 2
      • 示例:

      • WindowsServer:0>lpush fruits apple pear
        "2"
        WindowsServer:0>rpush fruits banana tomato
        "4"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
        • 4
        • 5

    fruits链表的变化如下:

    在这里插入图片描述

    • 获取数据

      • 格式:

      • LRANGE key start stop		# 从左边开始读取数据,从start索引查询到stop索引
        
        • 1
      • 示例:

      • WindowsServer:0>lrange fruits 0 3	# 从0开始查询到3索引
        1) "pear"
        2) "apple"
        3) "banana"
        4) "tomato"
        WindowsServer:0>lrange fruits 0 -2	# 从0开始查询到-2索引
        1) "pear"
        2) "apple"
        3) "banana"
        WindowsServer:0>lrange fruits 0 -1	# 从0开始查询到-1索引(倒数第二),通常用此命令来查询全部数据
        1) "pear"
        2) "apple"
        3) "banana"
        4) "tomato"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
    • 根据指定的索引查询(从0开始)

      • 格式:

      • LINDEX key index
        
        • 1
      • 示例:

      • WindowsServer:0>lindex fruits 3
        "tomato"
        WindowsServer:0>lindex fruits -1
        "tomato"
        
        • 1
        • 2
        • 3
        • 4

    Tips:lindex不支持反向查询(没有rindex)

    • 获取并移除数据

      • 格式:

      • LPOP key		# 从队列左边移除一个元素并返回
        
        RPOP key		# 从队列右边移除一个元素并返回
        
        • 1
        • 2
        • 3
      • 示例:

      • WindowsServer:0>lpop fruits
        "pear"
        WindowsServer:0>rpop fruits
        "tomato"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
        • 4
        • 5

    2.3.2 list扩展操作

    • 规定时间内获取并移除数据

      • 格式:

      • BLPOP key [key ...] timeout		# 在timeout时间内取出key中的值
        BRPOP key [key ...] timeout
        
        • 1
        • 2
      • 示例:

      • WindowsServer:0>blpop fruits 3
        1) "fruits"
        2) "apple"
        WindowsServer:0>blpop fruits 3
        1) "fruits"
        2) "banana"
        WindowsServer:0>blpop fruits 3		# 3秒内取出fruits中的值并删除,如果没取到则一直处于等待状态
        
        WindowsServer:0>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
    • 规定时间内移除list右边的一个元素到另一个list的左边,并将此元素返回

      • 格式:

      • BRPOPLPUSH source destination timeout
        
        • 1
      • 示例:

      • WindowsServer:0>flushdb			# 清空数据库
        "OK"
        WindowsServer:0>lpush fruits apple
        "1"
        WindowsServer:0>lpush fruits pear
        "2"
        WindowsServer:0>brpoplpush fruits temp 3
        "apple"
        WindowsServer:0>lrange temp 0 -1
        1) "apple"
        WindowsServer:0>brpoplpush fruits temp 3
        "pear"
        WindowsServer:0>lrange temp 0 -1
        1) "pear"
        2) "apple"
        WindowsServer:0>lrange fruits 0 -1 # fruits链表中已经没有了数据
        
        WindowsServer:0>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
    • 移除指定数据

      • 格式:

      • LREM key count value		# 从list左边开始移除元素
        
        • 1
        • count:移除多少个
        • value:移除什么元素
      • 示例:

      • WindowsServer:0>rpush data a b c d e a b c k o
        "10"
        WindowsServer:0>lrange data 0 -1
        1)  "a"
        2)  "b"
        3)  "c"
        4)  "d"
        5)  "e"
        6)  "a"
        7)  "b"
        8)  "c"
        9)  "k"
        10) "o"
        WindowsServer:0>lrem data 2 a 
        "2"
        WindowsServer:0>lrange data 0 -1
        1) "b"
        2) "c"
        3) "d"
        4) "e"
        5) "b"
        6) "c"
        7) "k"
        8) "o"
        WindowsServer:0>
        
        • 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

    2.4 Set数据类型

    在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我们也可以在该类型的数据值上执行添加、删除或判断某一元素是否存在等操作。需要说明的是,这些操作的时间是常量时间。Set可包含的最大元素数是4294967295。

    和List类型不同的是,Set集合中不允许出现重复的元素。和List类型相比,Set类型在功能上还存在着一个非常重要的特性,即在服务器端完成多个Sets之间的聚合计算操作,如sintersdiffsunion等操作。由于这些操作均在服务端完成, 因此效率极高,而且也节省了大量的网络IO开销

    2.4.1 set基本操作

    • 添加数据

      • 格式:

      • sadd key member [member ...]
        
        • 1
      • 示例:

      • WindowsServer:0>sadd cities changsha wuhan nanchang hefei hangzhou fuzhou
        "6"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
    • 读取全部数据

      • 格式:

      • smembers key
        
        • 1
      • 示例:

      • WindowsServer:0>smembers cities
        1) "nanchang"
        2) "wuhan"
        3) "changsha"
        4) "hefei"
        5) "hangzhou"
        6) "fuzhou"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8

    set存取无序;

    • 删除数据

      • 格式:

      • srem key member [member ...]
        
        • 1
      • 示例:

      • WindowsServer:0>srem cities fuzhou hangzhou
        "2"
        WindowsServer:0>smembers cities
        1) "changsha"
        2) "nanchang"
        3) "hefei"
        4) "wuhan"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
    • 获取集合中元素的个数

      • 格式:

      • scard key
        
        • 1
      • 示例:

      • WindowsServer:0>scard cities
        "4"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
    • 判断集合中是否包含指定的数据

      • 格式:

      • sismember key member
        
        • 1
      • 示例:

      • WindowsServer:0>sismember cities nanchang
        "1"
        WindowsServer:0>
        
        • 1
        • 2
        • 3

    2.4.2 set扩展操作

    • 移动集合中的指定元素到另一个集合

      • 格式:

      • smove source destination member
        
        • 1
      • 示例:

      • WindowsServer:0>sadd fruits1 apple pear
        "2"
        WindowsServer:0>sadd fruits2 banana tomato
        "2"
        WindowsServer:0>smove fruits1 fruits2 apple
        (integer) 1
        WindowsServer:0>smembers fruits1
        1) "pear"
        WindowsServer:0>smembers fruits2
        1) "apple"
        2) "banana"
        3) "tomato"
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
    • 在指定的key中随机获取几个值

      • 格式:

      • srandmember key [count]
        
        • 1
      • 示例:

      • WindowsServer:0>srandmember cities 2
        1) "hefei"
        2) "changsha"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
        • 4
    • 在指定的key中随机获取几个值,并将这几个值移除

      • 格式:

      • SPOP key [count]
        
        • 1

      count默认为1

      • 示例:

      • WindowsServer:0>spop cities
        "hefei"
        WindowsServer:0>smembers cities
        1) "changsha"
        2) "nanchang"
        3) "wuhan"
        WindowsServer:0>spop cities 2 
        1) "changsha"
        2) "wuhan"
        WindowsServer:0>smembers cities 
        1) "nanchang"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12

    2.4.3 交集差集并集

    在这里插入图片描述

    • 取两个集合的交集:

      • 格式:

      • sinter key [key ...]			# 交集
        
        • 1
      • 示例:

      • WindowsServer:0>sadd cities1 lanzhou guangzhou fuzhou hangzhou zhengzhou
        "5"
        WindowsServer:0>sadd cities2 meizhou guangzhou quanzhou fuzhou ganzhou
        "5"
        WindowsServer:0>sinter cities1 cities2
        1) "guangzhou"
        2) "fuzhou"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
    • 取两个集合的差集:

      • 格式:

      • sdiff key [key ...]				# 差集
        
        • 1
      • 示例:

      • WindowsServer:0>sdiff cities1 cities2
        1) "zhenghzhou"
        2) "hangzhou"
        3) "lanzhou"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
        • 4
        • 5
    • 取两个集合的并集:

      • 格式:

      • sunion key [key ...]			# 并集
        
        • 1
      • 示例:

      • WindowsServer:0>sunion cities1 cities2
        1) "quanzhou"
        2) "meizhou"
        3) "zhenghzhou"
        4) "lanzhou"
        5) "guangzhou"
        6) "hangzhou"
        7) "fuzhou"
        8) "ganzhou"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
    • 获取两个集合的交、差、并集存储到指定集合中

      • 格式:

      • sinterstore destination key1 [key2]		# 交集
        sdiffstore destination key1 [key2]		# 差集
        sunionstore destination key1 [key2]		# 并集
        
        • 1
        • 2
        • 3
      • sinterstore-案例:

      • WindowsServer:0>sinterstore sinter_temp cities1 cities2
        "2"
        WindowsServer:0>smembers sinter_temp
        1) "guangzhou"
        2) "fuzhou"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
      • sdiffstore-案例:

      • WindowsServer:0>sdiffstore sdiff_temp cities1 cities2
        "3"
        WindowsServer:0>smembers sdiff_temp
        1) "zhenghzhou"
        2) "hangzhou"
        3) "lanzhou"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
      • sunionstore-案例:

      • WindowsServer:0>sunionstore sunion_temp cities1 cities2
        "8"
        WindowsServer:0>smembers sunion_temp
        1) "quanzhou"
        2) "meizhou"
        3) "zhenghzhou"
        4) "lanzhou"
        5) "guangzhou"
        6) "hangzhou"
        7) "fuzhou"
        8) "ganzhou"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12

    2.5 Sorted_set数据类型

    Sorted-Sets和Sets类型极为相似,它们都是字符串的集合,都不允许重复的成员出现,在一个Set中。它们之间的主要差别是Sorted-Sets中的每一个成员都会有一个分数(score)与之关联,Redis正是通过分数来为集合中的成员进行从小到大的排序。然而需要额外指出的是,尽管Sorted-Sets中的成员必须是唯一的,但是分数(score) 却是可以重复的。

    2.5.1 sorted_set基本操作

    • 添加数据

      • 格式:

      • zadd key score1 member1 [score2 member2]
        
        • 1
      • 示例:

      • WindowsServer:0>zadd students 90 xiaohui 80 xiaolan 85 xiaoming 
        "3"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
    • 读取数据

      • 格式:

      • zrange key start stop [WITHSCORES]
        zrevrange key start stop [WITHSCORES]		
        
        • 1
        • 2
        • start:起始索引
        • stop:终止索引
        • withscores:是否显示分值
        • zrevrange:将查询结果反转
      • 示例:

      • WindowsServer:0>zrange students 0 0
        1) "xiaolan"
        WindowsServer:0>zrange students 0 1
        1) "xiaolan"
        2) "xiaoming"
        WindowsServer:0>zrange students 0 2
        1) "xiaolan"
        2) "xiaoming"
        3) "xiaohui"
        WindowsServer:0>zrange students 0 -1
        1) "xiaolan"
        2) "xiaoming"
        3) "xiaohui"
        WindowsServer:0>zrange students 0 -1 withscores			# 默认正序排序
        1) "xiaolan"
        2) "80"
        3) "xiaoming"
        4) "85"
        5) "xiaohui"
        6) "90"
        WindowsServer:0>zrevrange students 0 -1 withscores 		# 倒序排序
        1) "xiaohui"
        2) "90"
        3) "xiaoming"
        4) "85"
        5) "xiaolan"
        6) "80"
        WindowsServer:0>
        
        • 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
    • 根据分值筛选

      • 格式:

      • zrangebyscore key min max [WITHSCORES] [LIMIT offset count]
        zrevrangebyscore key max min [WITHSCORES] [LIMIT offset count]
        
        • 1
        • 2
        • min:最小分值(包含)
        • max:最大分值(包含)
        • limit:限定查询结果(分页查询)
          • offset:起始索引(从0开始)
          • count:查询几条数据
        • zrevrangebyscore:根据分值反转查询
      • 示例:

      • WindowsServer:0>zrangebyscore students 80 85
        1) "xiaolan"
        2) "xiaoming"
        WindowsServer:0>zrangebyscore students 80 85 withscores 
        1) "xiaolan"
        2) "80"
        3) "xiaoming"
        4) "85"
        WindowsServer:0>zrangebyscore students 80 85 withscores limit 0 2
        1) "xiaolan"
        2) "80"
        3) "xiaoming"
        4) "85"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
    • zrevrangebyscore:根据分值反转查询

    WindowsServer:0>zrevrangebyscore students 100 0
    1) "xiaohui"
    2) "xiaoming"
    3) "xiaolan"
    WindowsServer:0>zrevrangebyscore students 100 0 withscores
    1) "xiaohui"
    2) "90"
    3) "xiaoming"
    4) "85"
    5) "xiaolan"
    6) "80"
    WindowsServer:0>zrevrangebyscore students 100 0 withscores limit 0 2
    1) "xiaohui"
    2) "90"
    3) "xiaoming"
    4) "85"
    WindowsServer:0>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    2.5.2 sorted_set其他操作

    • 根据分值范围查询集合总数量

      • 格式:

      • zcount key min max
        
        • 1
      • 示例:

      • WindowsServer:0>zcount students 80 85
        "2"
        WindowsServer:0>
        
        • 1
        • 2
        • 3
    • 取多个集合中的交集、并集

    zinterstore destination numkeys key [key ...]
    zunionstore destination numkeys key [key ...]
    
    • 1
    • 2
    • destination:目标集合
    • numkeys:有几个集合需要操作

    交集示例:

    WindowsServer:0>zadd fruits1 100 apple 80 pear 70 banana
    "3"
    WindowsServer:0>zadd fruits2 50 apple 60 tomato 70 banana
    "3"
    WindowsServer:0>zinterstore zinter_temp 2 fruits1 fruits2
    "2"
    WindowsServer:0>zrange zinter_temp 0 -1
    1) "banana"
    2) "apple"
    WindowsServer:0>zrange zinter_temp 0 -1 withscores
    1) "banana"
    2) "140"
    3) "apple"
    4) "150"
    WindowsServer:0>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    Tips:zinterstore首先取交集,然后把分数累加

    并集示例:

    WindowsServer:0>zunionstore zunion_temp 2 fruits1 fruits2
    "4"
    WindowsServer:0>zrange zunion_temp 0 -1 withscores
    1) "tomato"
    2) "60"
    3) "pear"
    4) "80"
    5) "banana"
    6) "140"
    7) "apple"
    8) "150"
    WindowsServer:0>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    Tips:zunionstore首先取并集,然后把分数累加

    2.6 通用指令

    2.6.1 key的类型

    redis的key 值是二进制安全的,这意味着可以用任何二进制序列作为key值,从形如”abc”的简单字符串到一个JPEG文件的内容都可以。Redis建议使用字符串做为key的类型

    注意:空字符串也是有效key值。

    • key取值规范

      • (1)键值不需要太长,消耗内存,在数据中查找这类键值的计算成本较高
      • (2)键值不宜过短,可读性较差,通常建议见名知意。
    • 取值举例:

    将如下数据库表中的数据,转换为redis的key-value存储

    idusernamepasswordemail
    1lisi111111lisi@163.com

    建议格式:

    obj名:id:id值
    
    • 1
    127.0.0.1:6379> set user:id:1:username lisi 
    OK 
    127.0.0.1:6379> set user:id:1:password 111111
    OK 
    127.0.0.1:6379> set user:id:1:email lisi@163.com 
    OK
     
    127.0.0.1:6379> keys user:id:1* 					# 查找有几个属性
    1) "user:id:1:password" 
    2) "user:id:1:username" 
    3) "user:id:1:email" 
    127.0.0.1:6379>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2.6.2 key基本操作

    • 删除key
    del key
    
    • 1
    • 判断key是否存在
    exists key
    
    • 1
    • 获取key的类型
    type key
    
    • 1
    • key改名
    rename key newkey
    
    • 1

    2.6.3 控制key的时效性

    • 为指定key设置有效期
    expire key seconds
    pexpire key milliseconds
    
    • 1
    • 2
    • 获取key的有效时间
    ttl key			# 返回key的有效时间,单位秒
    pttl key		# 返回key的有效时间,单位毫秒
    
    • 1
    • 2

    如果key没有设置有效期(永久存在),返回-1

    如果key不存在返回-2

    如果key存在返回key的有效时间

    • 切换key从时效性转换为永久性
    persist key
    
    • 1

    2.6.4 key的查询操作

    • 查询key
    keys pattern 
    
    • 1

    查询匹配规则:

    • *:匹配任意数量的任意符号
    • ?:匹配任意一个符号
    • []:匹配一个指定符号
    keys * 查询所有
    keys java* 查询所有以java开头
    keys *java 查询所有以java结尾
    keys ??java 查询所有前面两个字符任意,后面以java结尾
    keys user:? 查询所有以user:开头,最后一个字符任意
    keys j[av]a 查询所有以j开头,以a结尾,中间包含一个字母,a或v
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.6.5 key排序

    • 对所有key排序:只能对集合进行排序(listsetsorted-set
    SORT key [BY pattern] [LIMIT offset count] [ASC|DESC] [ALPHA] [STORE destination]
    
    • 1
    • list排序示例:
    WindowsServer:0>lpush list 22 33 11 44 88 77 55
    "7"
    WindowsServer:0>sort list 
    1) "11"
    2) "22"
    3) "33"
    4) "44"
    5) "55"
    6) "77"
    7) "88"
    WindowsServer:0>sort list desc
    1) "88"
    2) "77"
    3) "55"
    4) "44"
    5) "33"
    6) "22"
    7) "11"
    WindowsServer:0>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • set排序示例:
    WindowsServer:0>sadd set 22 33 11 44 88 77 55
    "7"
    WindowsServer:0>sort set 
    1) "11"
    2) "22"
    3) "33"
    4) "44"
    5) "55"
    6) "77"
    7) "88"
    WindowsServer:0>sort set desc
    1) "88"
    2) "77"
    3) "55"
    4) "44"
    5) "33"
    6) "22"
    7) "11"
    WindowsServer:0>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • zset排序示例:
    WindowsServer:0>sort zset_key alpha			# zset排序需要加上alpha参数
    1) "apple"
    2) "pear"
    3) "tomato"
    WindowsServer:0>sort zset_key alpha desc
    1) "tomato"
    2) "pear"
    3) "apple"
    WindowsServer:0>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2.6.6 数据库通用操作

    在一个redis中会有16个数据库,分别为db0、db1、db2…

    • 切换数据库
    select num
    
    select 0 		# 切换到0数据库
    select 1		# 切换到1数据库
    
    • 1
    • 2
    • 3
    • 4
    • 数据清除
    dbsize			# 查看当前数据库共有多少个key
    flushdb			# 清除当前数据库的所有数据
    flushall		# 清除所有数据库的所有数据
    
    • 1
    • 2
    • 3
  • 相关阅读:
    流媒体传输 - RTSP 协议认证过程
    修炼k8s+flink+hdfs+dlink(四:k8s(一)概念)
    【干货】微信私域运营打法和案例拆解(附78页pdf下载链接)
    vue 使用 创建二维数组响应数据 渲染 echarts图标
    Leetcode 399. 除法求值
    BOM系列之localStorage
    2.物联网射频识别,RFID通信原理,RFID读写器与标签无线交互方式、数据反馈方式,RFID调制与解调、编码方式,不同RFID标签与读写器
    (LeetCode C++)盛最多水的容器
    51单片机学习:DS18B20温度传感器实验
    TYUT太原理工大学2022需求工程考试填空题
  • 原文地址:https://blog.csdn.net/Bb15070047748/article/details/125433666