redis基础之二(五大常用数据类型)

redis数据类型

字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets)

redis五大常用数据类型

字符串类型(string)

string是redis最基本的类型,一个key对应一个value;可以包含任何数据,比如jpg图片或者序列化的对象 ;一个redis中字符串value最多可以是512M。

哈希(hash)

hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。类似Java里面的Map<String,Object>。

列表(list)

list列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)

无序不重复集合(set)

set是string类型的无序不重复集合。它是通过HashTable实现实现的。

有序不重复集合(zset)

zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数,但是分数是可以重复的。


redis常见数据类型操作命令查询参考网址www.redis.cn/commands.ht…


redis 键(key) 命令

image.png

键(key)一些常用的命令

  • 查看当前库所有key
    keys *  #age、name、hello是先使用set命令保存的string字符串的key
复制代码

image.png

  • 判断某个key是否存在
   exists age    #key存在,返回1
   exists kkkk   #key不存在,返回0
复制代码

image.png

  • 给key设置过期时间和查看过期时间
   set e1 test    #保存e1
   expire e1 10   #设置e1过期时间10s
   ttl e1         #查看e1剩余过期时间,当为-2时代表已过期, -1代表永不过期
复制代码

image.png

  • 查看key类型
   type key    #返回key对应的数据类型
复制代码

image.png

redis 字符串(String) 命令

image.png

字符串(String)一些常用的命令

  • 增加、查看、删除
    set str01 s1    #设置str01的值为s1
    get str01       #获取str01的值
    del str01       #删除str01
复制代码

image.png

  • 追加、查看长度
   append str02 333    #从字符串尾部追加字符串
   strlen str02        #查看字符串长度
复制代码

image.png

  • 数字字符串加、减
   set num 1    #保存key为num,value为1
   incr num     #累加1
   decr num     #减1
   incrby num 3 #加3,数字代表要加多少
   decrby num 2 #减2 数字代表要减多少
复制代码

image.png

  • 根据下标区间显示字符、替换字符
    getrange str03 0 -1  #起始下标从0开始,结尾下标为-1时查看所有字符
    getrange str03 0 2   #查看起始下标从02的字符
    setrange str03 1 333  #替换从下标为1开始的后面的字符串,333为替换的字符串
复制代码

image.png

  • 特殊命令
    setex str04 30 abc    #设置key有效期,并设置vaule值,30秒为过期时间
复制代码

image.png

    setnx str03 abc    #不存在的key可以创建成功,如果存在则创建不成功
    setnx str05 aaa    #不存在创建成功
复制代码

image.png

  • 多key操作命令
    mset str06 v06 str07 v07 str08 v08  #可以同时为多个key-vlue赋值
    mget str06 str08      #可以查询多个key对应的value
复制代码

image.png

    msetnx str06 v066 str09 v09 str10 v10    #所有key中不存在才创建成功,否则创建失败。str06存在,所以都不创建成功。
复制代码

image.png

    getset str06 v066    #存在的key的value值会被覆盖(先get再set,先获取原先key的value值)
    getset str11 v11     #不存在的key直接创建
复制代码

image.png

redis 列表(List) 命令

image.png

列表(list)一些常用的命令

  • 左边进、右边进、查看列表
    lpush list01 a b c d    #左边进,先进的往后挪
复制代码

image.png

image.png

    rpush list02 a b c d    #右边进,先进的排前面
复制代码

image.png

image.png

  • 左边弹出、右边弹出
    lpop list01    #从左边第一位弹出
复制代码

image.png

    rpop list02    #从右边第一位弹出
复制代码

image.png

  • 根据下标获取字符
    lindex list01 1    #根据下标1获取对应的字符
复制代码

image.png

  • 查询list列表长度
    llen list01    
复制代码

image.png

  • 删除指定个数的字符
    lrem list03 2 a    #删除2个为a的字符
复制代码

image.png

  • 截取字段从新复制
    ltrim list01 1 3    #从下标为13截取的字符串,重新复制给key
复制代码

image.png

  • 右边弹出的值赋值给新的key
    rpoplpush list01 list01    #从右边弹出,左边加入。
    rpoplpush list01 list02    #不存在list会新创建,并把右边弹出的值加到新的list中
复制代码

image.png

  • 根据下标替换字符
    lset list01 1 java    #下标为1的字符替换成java
复制代码

image.png

  • 在某个字符前或者后插入字符
    linsert list01 before java c++    #在java前面插入c++
    linsert list01 after java go    #在java后面插入go
复制代码

image.png

redis 集合(Set) 命令

image.png

集合(set)一些常用的命令

  • 添加、查看、判断是否存在
    sadd s01 a a b c c d e f f    #添加set无序不重复集合
    smembers s01     #查看set集合元素
复制代码

image.png

    sismember s01 h    #不存在返回0
    sismember s01 a    #存在返回1
复制代码

image.png

  • 查看集合的长度
    scard s01    #查看集合的长度
复制代码

image.png

  • 删除集合中的元素
    srem s01 d    #删除单个d
    srem s01 c a    #删除字符c和a
复制代码

image.png

  • 随机返回集合中的某个元素
    srandmember s01    #随机返回集合中的某个元素(并不是删除集合的元素)
复制代码

image.png

  • 随机弹出集合里一个或者多个元素
    spop s01 1    #随机弹出集合里1个元素,将不在集合里
    spop s01 3    #随机弹出集合里3个元素,将不在集合里
复制代码

image.png

  • 将集合的某一个元素赋值到新的另一个集合中
    smove s01 s02 f    #将集合s01中f,赋值给集合s02
复制代码

image.png

  • 集合差集、交集、并集
    sdiff s01 s02    #集合s01和集合s02的差集,取值为s01与s02不同的值 1 2 3
    sdiff s02 s01    #集合s02和集合s01的差集,取值为s02与s01不同的值 6 7 8
复制代码

image.png

    sinter s01 s02    #集合s01和集合s02的交集相同 4 5
复制代码

image.png

    snuion s01 s02    #集合s01和集合s02的并集,两个集合全部元素
复制代码

image.png

redis 哈希(Hash) 命令

image.png

哈希(hash)一些常用的命令

  • 创建、查询
    hset h01 k1 v1 k2 v2    #创建hash散列
    hget h01 k1    #查询h01 k1的value
复制代码

image.png

  • 创建多个、查询多个
    hmset h02 k1 v1 k2 v2 k3 v3
    hmget h02 k1 k2 k3
复制代码

image.png

  • 查询hash散列的所有的key-value
    hgetall h02
复制代码

image.png

  • 删除hash散列中的某个key-value
    hdel h02 k2    #删除散列h02中k2
复制代码

image.png

  • hash散列中是否存在某个key
    hexists h02 k2    #不存在返回0
    hexists h02 k3    #存在返回1
复制代码

image.png

  • 查看hash散列中key个数
    hlen h02    #查看h02中key个数
复制代码

image.png

  • 查看hash散列的所有key、value
    hkeys h02    #查看h02中的所有key
    hvals h02    #查看h02中的所有value
复制代码

image.png

  • hash散列中数字的加上某个数
    hincrby h02 k1 1    #非数字的加法会报错
    hincrby h03 k1 1    #k1的值加1
复制代码

image.png

    hincrbyfloat h03 k1 2.5    #k1加上2.5小数
复制代码

image.png

  • 不存在才创建
    hsetnx h03 k1 2    #hash散列存在时无效
    hsetnx h04 k1 2    #不存在创建
复制代码

image.png

Redis 有序集合(sorted set) 命令

image.png

有序集合(zset)一些常用的命令

  • 添加、查看
    zadd z01 100 v1 200 v2 300 v3    #添加
    zrange z01 0 -1    #查看zset集合所有元素,不包括分数
    zrange z01 0 -1 withscores    #查看zset集合所有元素,包括分数
复制代码

image.png

  • 查询分数在某个区间
    zrangebyscore z02 70 90   #查询分数在7090之间的元素
    zrangebyscore z02 70 90 withscores   #查询分数在7090之间,并显示分数
复制代码

image.png

    zrangebyscore z02 (60 90    #查询分数大于60,小于等于90之间的元素
    zrangebyscore z02 60 (90    #查询分数大于等于60,小于90之间的元素
复制代码

image.png

    zrangebyscore z02 70 +inf withscores    #大于等于70以上的分数的元素
复制代码

image.png

    zrangebyscore z02 70 +inf withscores limit 0 2   #limit截取下标02 的元素
复制代码

image.png

  • 删除一个或者多个元素
    zrem z02 v1    #删除v1
    zrem z02 v2 v3    #删除v2、v3
复制代码

image.png

  • 获取集合中的元素个数
    zcard z03
复制代码

image.png

  • 获取在分数区间的个数
    zcount z03 300 500    #在300500之间的个数
复制代码

image.png

  • 获取value下标位置
    zrank z03 v5    #获取v5所在的下标
复制代码

image.png

  • 查看某个元素的分数
    zscore z03 v3    #查看v3的分数
复制代码

image.png

  • 获取元素的逆序下标
    zrevrank z03 v1    #获取v1逆序的下标
复制代码

image.png

  • 查看zset集合倒序排序
    zrevrange z03 0 -1    #集合z03倒序排序
复制代码

image.png

  • 分数区间倒序查找
    zrevrangebyscore z03 300 500 withscores    #查询为空,需要分数倒着查
    zrevrangebyscore z03 500 300 withscores    #查询分数300500之间的元素倒序
    
复制代码

image.png


小结

上面就是redis五大常用类型的一些基本操作命令,也只是一个简单的入门过程。后续还需要研究这五大类型的底层数据结构。另外还有三个扩展数据类型:bitmap、hyperloglgos、geo。

猜你喜欢

转载自juejin.im/post/7047306903923195911
今日推荐