• reids学习redis的五种基本数据类型


    前言

    前面学习了redis的安装,今天来学习redis的基本数据类型。

    基本数据类型

    redis有5种基本数据类型:String、Hash、List、Set、ZSet,下文将对5种基本数据类型的特性和常用方法进行学习。

    String

    String类型是包含很多种数据类型的特殊类型,并且是二进制安全的。可以是简单的字符串、数值等,也可以是序列化对象或者图片的二进制存储。基本操作包含以下方法,更多方法参考官方文档

    • get/set/del

      设置值:set key value

      获取值:get key

      删除值:del key

      127.0.0.1:6379> keys *
      (empty list or set)
      127.0.0.1:6379> set name zmc
      OK
      127.0.0.1:6379> get name
      "zmc"
      127.0.0.1:6379> del name
      (integer) 1
      127.0.0.1:6379> keys *
      (empty list or set)
      
    • setnx key value ()

      即set not exist 设定未存在,后设定的值会替换先设定的值。使用setxn,当key不存在时进行设置,存在时返回0 。

      127.0.0.1:6379> set name zmc
      OK
      127.0.0.1:6379> get name 
      "zmc"
      127.0.0.1:6379> set name RzZ
      OK
      127.0.0.1:6379> get name
      "RzZ"
      127.0.0.1:6379> get name 
      "RzZ"
      127.0.0.1:6379> setnx name zmc
      (integer) 0
      127.0.0.1:6379> get name
      "RzZ"
      127.0.0.1:6379> 
      
    • setex key seconds value

      即expired 设置过期时间,超过过期时间后返回nil

      127.0.0.1:6379> setex name 10 zmc
      OK
      127.0.0.1:6379> get name
      "zmc"
      #等10秒
      127.0.0.1:6379> get name
      (nil)
      
    • setrange key offset value

      替换字符串,从下标offset开始替换为value值(下标从0 开始)

      127.0.0.1:6379> set id_no 412728202008031234 
      OK
      127.0.0.1:6379> get id_no
      "412728202008031234"
      127.0.0.1:6379> setrange id_no 6 ********
      (integer) 18
      127.0.0.1:6379> get id_no
      "412728********1234"
      127.0.0.1:6379>
      
    • mset/mget

      一次性设置或获取多个值

      127.0.0.1:6379> mset name zmc age 0 id_no 1234567
      OK
      127.0.0.1:6379> keys *
      1) "id_no"
      2) "age"
      3) "name"
      127.0.0.1:6379> mget name age id_no
      1) "zmc"
      2) "0"
      3) "1234567"
      
    • getset key value

      获取旧值并设置新值(理解不到有什么使用场景?)

      127.0.0.1:6379> set name RzZ
      OK
      127.0.0.1:6379> get name
      "RzZ"
      127.0.0.1:6379> getset name zmc
      "RzZ"
      127.0.0.1:6379> get name
      "zmc"
      
    • incr/decr/incr by/decr by

      incr/decr key数值递增/递减。

      incr by/decr by key increment/decrement带步长的递增/递减。

      127.0.0.1:6379> incr age
      (integer) 1
      127.0.0.1:6379> decr age
      (integer) 0
      
      127.0.0.1:6379> incrby age 10
      (integer) 10
      127.0.0.1:6379> decrby age 10
      (integer) 0
      
    • append

      字符串追加方法。

      127.0.0.1:6379> append id_no ch
      (integer) 9
      127.0.0.1:6379> get id_no
      "1234567ch"
      
    • strlen

      获取字符串长度。

      127.0.0.1:6379> strlen id_no
      (integer) 9
      

    Hash

    Hash可以理解为Java中的Map类型,是一种String类型的字段field和值value的映射表。基本操作包含以下方法,更多方法参考官方文档

    • hset/hget

      和String数据类型一样,设定和获取值。

      #hset key field value设定对象key的field字段值为value。
      127.0.0.1:6379> hset usr1 name zmc
      (integer) 1
      127.0.0.1:6379> hset usr1 age 10
      (integer) 1
      
      #hget key field 获取对象key的field字段值。
      127.0.0.1:6379> hget usr1 name
      "zmc"
      127.0.0.1:6379> hget usr1 age
      "10"
      
    • hmset/hmget

      同上,使用hmset和hmget批量操作Hash数据。

      #hmset key field value [field value ... ]
      127.0.0.1:6379> hmset usr2 name RzZ age 9
      OK
      
      #hmget key field [field ... ]
      127.0.0.1:6379> hmget usr2 name age
      1) "RzZ"
      2) "9"
      
    • hincrby/hdecrby key field increment/decrement 字段递增/递减,用法同String。

    • hsetnx key field value 不存在则设定值,用法同String。

    • hexists key field 判断该字段是否存在。

    • hlen key 获取hash值对数。

    • hdel key field [field ... ]删除指定hash的指定field,可批量删除。

    • hkeys key 返回hash的键集合。

    • hvals key 返回hash的值集合。

    • hgetall key 返回hash的所有键值对,注意查询结果奇数结果为键,偶数为值。

      127.0.0.1:6379> hgetall usr1
      1) "name"
      2) "zmc"
      3) "age"
      4) "10"
      

    List

    list是一个链表结构的集合,类似于Java中的Queue,主要有push、pop、获取元素等操作。list中元素是可以重复的。基本操作包含以下方法,更多用法参考官方文档

    • lrange key start stop

      获取list的指定元素。lrange 0 -1可以获取list所有元素。

    • lpush key value [value ... ]

      从头部插入元素,先进后出(栈)。

    • rpush key value [value ...]

      从尾部插入元素,先进先出(队列)。

      # lpush,先进后出
      127.0.0.1:6379> lpush list1 one
      (integer) 1
      127.0.0.1:6379> lpush list1 two
      (integer) 2
      
      # lrange,查看元素
      127.0.0.1:6379> lrange list1 0 -1
      1) "two"
      2) "one"
      
      # rpush,先进先出
      127.0.0.1:6379> rpush list2 one
      (integer) 1
      127.0.0.1:6379> rpush list2 two
      (integer) 2
      127.0.0.1:6379> lrange list2 0 -1
      1) "one"
      2) "two"
      
    • linsert key [before|after] pivot vlue

      在指定元素之前或之后插入元素。

      127.0.0.1:6379> rpush list3 one
      (integer) 1
      127.0.0.1:6379> rpush list3 two
      (integer) 2
      127.0.0.1:6379> lrange list3 0 -1
      1) "one"
      2) "two"
      # 在two之前插入three
      127.0.0.1:6379> linsert list3 before two three
      (integer) 3
      127.0.0.1:6379> lrange list3 0 -1
      1) "one"
      2) "three"
      3) "two"
      # 在three之后插入four
      127.0.0.1:6379> linsert list3 after three four
      (integer) 4
      127.0.0.1:6379> lrange list3 0 -1
      1) "one"
      2) "three"
      3) "four"
      4) "two"
      
    • lset key index value

      将指定下标的元素进行替换。

    • lrem key count value

      删除元素,返回受影响个数。

      127.0.0.1:6379> lrange list4 0 -1
      1) "4"
      2) "3"
      3) "2"
      4) "1"
      127.0.0.1:6379> 
      
      # lset 元素替换,将下标为3的元素替换成2
      127.0.0.1:6379> lset list4 3 2
      OK
      127.0.0.1:6379> lrange list4 0 -1
      1) "4"
      2) "3"
      3) "2"
      4) "2"
      
      # lrem,删除前两个数字2
      127.0.0.1:6379> lrem list4 2 2
      (integer) 2
      127.0.0.1:6379> lrange list4 0 -1
      1) "4"
      2) "3"
      
    • ltrim key start stop

      保留指定范围内的元素。

    • lpop

      从list的头部删除元素。

    • rpop

      从list的尾部删除元素。

    • rpoplpush source destination

      从source 尾部删除元素并从destination首部追加该元素。

      127.0.0.1:6379> lrange list5 0 -1
      1) "0"
      2) "1"
      3) "2"
      4) "3"
      5) "4"
      6) "5"
      7) "6"
      8) "7"
      # ltrim 保留下标1-6的元素
      127.0.0.1:6379> ltrim list5 1 6
      OK
      127.0.0.1:6379> lrange list5 0 -1
      1) "1"
      2) "2"
      3) "3"
      4) "4"
      5) "5"
      6) "6"
      # lpop 删除list的第一个元素:1
      127.0.0.1:6379> lpop list5
      "1"
      # rpop 删除list的最后一个元素:6
      127.0.0.1:6379> rpop list5
      "6"
      127.0.0.1:6379> lrange list5 0 -1
      1) "2"
      2) "3"
      3) "4"
      4) "5"
      # rpoplpush 删除最后一个元素5,并在头部插入该元素
      127.0.0.1:6379> rpoplpush list5 list5
      "5"
      127.0.0.1:6379> lrange list5 0 -1
      1) "5"
      2) "2"
      3) "3"
      4) "4"
      
    • lindex

      返回list中index位置的元素。

    • llen

      返回list长度,即元素个数。

    # llen获取list长度
    127.0.0.1:6379> llen list5
    (integer) 4
    # lindex 获取第0个元素
    127.0.0.1:6379> lindex list5 0
    "5"
    

    set

    set是string数据类型的一个无序集合,set是通过hashtable实现的,可以对集合取交集、并集、差集等。基本操作包含以下方法,更多用法参考官方文档

    • smembers key

      查看集合内容

    • sadd key member [member ... ]

      添加元素。

    • srem key member [member ... ]

      删除元素。

    • spop key [count]

      随机返回删除的key。

      # sadd
      127.0.0.1:6379> sadd set1 1 2 3 4 5 6 7 8 9 10
      (integer) 10
      # smembers 
      127.0.0.1:6379> smembers set1
       1) "1"
       2) "2"
       3) "3"
       4) "4"
       5) "5"
       6) "6"
       7) "7"
       8) "8"
       9) "9"
      10) "10"
      # srem 移出元素1
      127.0.0.1:6379> srem set1 1
      (integer) 1
      127.0.0.1:6379> smembers set1
      1) "2"
      2) "3"
      3) "4"
      4) "5"
      5) "6"
      6) "7"
      7) "8"
      8) "9"
      9) "10"
      # spop移出一个元素
      127.0.0.1:6379> spop set1
      "5"
      # spop移出两个元素
      127.0.0.1:6379> spop set1 2
      1) "10"
      2) "8"
      127.0.0.1:6379> smembers set1
      1) "2"
      2) "3"
      3) "4"
      4) "6"
      5) "7"
      6) "9"
      
      
    • sdiff(差集)

      返回两个集合的不同元素,以前一个集合为基准。

    • sdiffstore destination

      将返回的不同元素存储在另一个集合里。

      127.0.0.1:6379> smembers set1
      1) "2"
      2) "3"
      3) "4"
      4) "6"
      5) "7"
      6) "9"
      127.0.0.1:6379> smembers set2
      1) "2"
      2) "4"
      3) "6"
      4) "8"
      5) "10"
      127.0.0.1:6379> sdiff set1 set2
      1) "3"
      2) "7"
      3) "9"
      127.0.0.1:6379> sdiff set2 set1
      1) "8"
      2) "10"
      
      127.0.0.1:6379> sdiffstore set3 set1 set2
      (integer) 3
      127.0.0.1:6379> smembers set3
      1) "3"
      2) "7"
      3) "9"
      
      
    • sinter(交集)

      取set的交集。

    • sinterstore destination key [key]

      取set的交集并存放在destination集合中。

      127.0.0.1:6379> sadd set3 1 2 3 4 5 6
      (integer) 6
      127.0.0.1:6379> sadd set4 2 4 6
      (integer) 3
      # sinter取交集
      127.0.0.1:6379> sinter set3 set4
      1) "2"
      2) "4"
      3) "6"
      # sinterstore
      127.0.0.1:6379> sinterstore set5 set3 set4
      (integer) 3
      127.0.0.1:6379> smembers set5
      1) "2"
      2) "4"
      3) "6"
      
    • sunion(并集)

      取set的并集。

    • sunionstore destination key [key]

      取set的并集,并存放在另外一个集合中。

      127.0.0.1:6379> sadd set6 1 2 3
      (integer) 3
      127.0.0.1:6379> sadd set7 4 5 6
      (integer) 3
      # sunion取set6 和set7的并集
      127.0.0.1:6379> sunion set6 set7
      1) "1"
      2) "2"
      3) "3"
      4) "4"
      5) "5"
      6) "6"
      # sunionstore将set6和set7的并集访入set8中
      127.0.0.1:6379> sunionstore set8 set6 set7
      (integer) 6
      127.0.0.1:6379> smembers set8
      1) "1"
      2) "2"
      3) "3"
      4) "4"
      5) "5"
      6) "6"
      
    • smove source destination member

      移动元素,从set1移动到set2中。

    • scard

      查看集合里元素个数。

    • sismember

      判读某元素是否为集合内的元素,是返回1,否返回0。

    • srandmember

      随机返回一个元素。

      # scard查看set8中的元素个数
      127.0.0.1:6379> scard set8
      (integer) 6
      127.0.0.1:6379> smembers set8
      1) "1"
      2) "2"
      3) "3"
      4) "4"
      5) "5"
      6) "6"
      # smove 将set6中的元素1转移到set7中
      ## 移动前
      127.0.0.1:6379> smembers set6
      1) "1"
      2) "2"
      3) "3"
      127.0.0.1:6379> smembers set7
      1) "4"
      2) "5"
      3) "6"
      
      127.0.0.1:6379> smove set6 set7 1
      (integer) 1
      ## 移动后
      127.0.0.1:6379> smembers set6
      1) "2"
      2) "3"
      127.0.0.1:6379> smembers set7
      1) "1"
      2) "4"
      3) "5"
      4) "6"
      # sismember判断元素1在哪个set内
      127.0.0.1:6379> sismember set6 1
      (integer) 0
      127.0.0.1:6379> sismember set7 1
      (integer) 1
      # srandmember
      127.0.0.1:6379> srandmember set7
      "5"
      127.0.0.1:6379> smembers set7
      1) "1"
      2) "4"
      3) "5"
      4) "6"
      
      

    zset

    zset是set集合的有序版本,每个元素关联一个double类型的分数,通过分数对集合元素进行排序,元素不可重复,分数可以重复。

    zset的特性可以轻松实现按权重排序,可以实现结果排序、rank值等功能,基本操作包含以下方法,通过前面的学习可以很容易推测出用法,在此不再逐一测试。更多用法参考官方文档

    • zadd

      zset中插入元素,指定序号及分数,在重复插入时会根据分数属性更新。

    • zrem

      删除元素。

    • zincrby

      已指定步长递增。

    • zrangebyscore

      获取指定区间的元素。

    • zremrangebyrank

      删除索引为1的元素。

    • zremrangebyscore

      删除指定序号的元素。

  • 相关阅读:
    深入浅出JSONP--解决ajax跨域问题
    Apache与Tomcat的区别
    项目终于接近尾声了
    交互设计[小插曲]--网站UI配色
    使用 Jasmine 进行测试驱动的 JavaScript 开发
    javascript单元测试
    MySQL查询当前数据库中所有记录不为空的表
    cannot be resolved to a type的错误
    oracle 表空数据导出dmp ,空表导出失败
    Iterable<E> Iterator<E>
  • 原文地址:https://www.cnblogs.com/bcomll/p/13441915.html
Copyright © 2020-2023  润新知