redis五种数据类型及操作

92 阅读5分钟

redis五种数据类型

redis里的string、hash、list、set结构其实与我们熟悉的string、hash、list、set很相似,不同的是redis多了key来方便进行操作,实际就是key string/hash/list/set。如果存储数据时,该key已有数据,如果该数据类型与新数类型一致则会修改原本所存储的数据为新的数据,不一致则存储失败

string

  1. string类型数据结构为:key value

  2. 基本操作

    存数据:set name '张三'

    读数据:get name

    删数据:del name

    一次存储多个key:mset name1 '张三' name2 '李四' name3 '王五'

    一次读取多个key:mget name1 name2 name3

    获取字符个数(1个中文=3个字符):strlen name

    追加字符串:append name '爱吃鱼'

  3. 扩展操作

    set num 10

    自增1:incr num

    自增指定值:incrby num 5

    自增小数:incrbyfloat num 0.3

    自减1:decr num

    自减指定值:decrby num 5

    (注:incr不可自增为小数的value值,decrby也一样)

  4. 控制数据时效性

    超过指定秒后自动删除:setex name 5 '张三'

    超过指定毫秒后自动删除:psetex name 5000 '张三'

hash

  1. hash类型数据结构为:key hash (即:key field value)

  2. 基本操作

    存数据:

    hset user name '张三'

    hset user password 123

    读数据:

    hget user name

    hget user password

    删数据:

    hdel user name

    hdel user password

    一次性存储/修改指定key的多个field

    hmset user name '张三' password 123

    一次性读取指定key的多个field

    hmget user name password

    获取指定key中的field数:

    hlen user

    判断指定数据(key)中是否包含指定的字段(field) (返回1[有]或0[无]):

    hexists user username

    获取指定数据中的所有字段以及value值:

    hgetall user

  3. 扩展操作

    获取key中所有的field:hkeys user

    获取key中所有的value:hvals user

    给指定key中的指定field增加指定的值:

    hincrby user age 1

    hincrbyfloat user ago 0.2

    存数据的扩展hsetnx

    hsetnx用法与hset一样,但hsetnx会判断key中是否有对应的field,有返回0,没有返回 1并存对应的值进去

list

  1. lsit类型数据结构为:key lsit (即key value1 value2 value3 ...)

  2. 基本操作

    lpush namelist '二河'

    添加数据:

    添加到队列左侧:lpush namelist '张三' '李四'

    添加到队列右侧:rpush namelist '王五' '赵六'

    获取数据:

    lrange key start stop 从左到右读取,start开始到stop结束(start从0开始)

    lrange namelist 0 3 #从左到右查询,

    lrange namelist 0 -2 #从左到右查询,在((总数+1)-2)处停下

    lrange namelist 0 -1 #从左到右查询,在((总数+1)-1)处停下,即查询全部数据

    lindex key index 根据index查询

    lindex namelist 3 #从左到右第(3+1)个(index以0为开始)

    移除数据(会返回被移除的数据):

    lpop namelist #从队列左边移除第一个元素并返回该元素

    rpop namelist #从队列右边移除第一个元素并返回该元素

  3. 扩展操作

    限时移除数据:

    blpop namelist 5 #5秒内从队列左边移除第一个元素并返回该元素

    brpop namelist 5 #5秒内从队列右边移除第一个元素并返回该元素

    移除指定数据

    lrem namelist 2 '王五' 从左边开始移除2个王五

set

  1. set类型数据结构为:key set(即key member1 member2 member3 ...)

  2. 基本操作

    添加数据:sadd myset 1 a '王五' 2 4 5 b c x d

    读取全部数据:smembers myset

    删除数据:srem myset 1

    获取集合中元素的个数:scard myset

    判断集合中是否包含指定的数据 (返回1[有]或0[无]):sismember myset a

  3. 扩展操作

    随机获取指定key中随机值:

    srandmember myset 3 从myset 中随机获取3个值

    随机删除指定key中的随机值(返回被移除的值):

    spop myset3

    获取两个集合的交、并、差集:

    sadd myset2 1 a '王五' 4 6 7 0 b k f p 添加一个集合

    sinter myset myset2 #交集 sunion myset myset2 #并集 sdiff myset myset2 #差集

    获取两个集合的交、并、差集存储到指定集合中

    sinterstore myset3 myset myset2 #交集 sunionstore myset3 myset myset2 #并集 sdiffstore myset3 myset myset2 #差集

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

    smove myset myset2 '王五' 移动myset中的 '王五'myset2

sorted_set

  1. sorted_set的数据结构与set相似,但多了一个分值(即key score1 member1 score2 member2 score3 member3)

  2. 基本操作

    添加数据:

    zadd students 80 ls 85 ww 60 zl 70 tq

    读取数据:

    zrange students 0 -1 withscores #withscores显示分值,可写可不写

    zrevrange students 0 -1 withscores #zrevrange反转查询结果

    删除数据:

    zrem students zs zl

    根据分值筛选:

    zrangebyscore students 60 80 withscores

    zrevrangebyscore students 60 80 withscores #反转查询

    zrangebyscore students 60 80 withscores limit 0 2 #从0开始查询2条数据

    查询集合总数量:

    zcard students

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

    zcount student 60 80

  3. 扩展操作

    取多个集合中的交集、并集到指定集合(分值会累加):

    zadd num1 1 a 4 b 7 c 10 d 13 e #添加集合num1

    zadd num2 2 a 5 b 8 c 11 e 14 r #添加集合num2

    zadd num3 3 a 6 b 9 c 12 q 15 w #添加集合num3

    zinterstore temp1 3 num1 num2 num3 #交集,temp1后面的数字是要取集合的数量

    zunionstore temp1 3 num1 num2 num3 #并集,temp1后面的数字是要取集合的数量