zoukankan      html  css  js  c++  java
  • Redis基本类型与常用命令

    Redis基本类型一共有五类:

    • 字符串类型(string);
    • 散列类型(hash);
    • 列表类型(list);
    • 集合类型(sort);
    • 有序集合类型(zset);

    在redis中,所有的类型都是被以键值对形式存放,类型只体现在键值对的值上。

    如列表类型,数据格式如下。它的整体存放仍然是key-value的格式,只不过它的value里面是一个列表类型。

    如散列类型,数据格式如下。它的整体存储也是遵照key-value的格式,但是它的value存放是散列类型。

    其他的几种数据类型类似,都是将各自的特点体现在了value里面。且每一种数据类型不能存在互相包含的关系。如Java中可以如下方式定义集合,在List对象中保存Map对象,Map对象中又可以保存List对象。

    List<Map<String, List<String>>> list;

    而在Redis中,不能存在如上那样的数据类型互相包含的关系,如列表类型的列表中,只能存放字符串,如散列类型的键值对的键和值,也都只能存放字符串。

    字符串类型

    字符串类型是Redis里面最简单地一种数据类型。它的值部分只存放一个字符串。

    常用命令:

    set key value;添加或修改一个字符串类型。如果key存在,则是修改,如果不存在,则是添加。

    get key;获取一个字符串类型的value。

    mset key value [key1 value1...];添加或修改一个或多个字符串类型。

    mget key [key1...];获取多个字符串类型的value,以列表形式返回。

    strlen key;返回字符串长度,不存在返回0。

    append key value;向指定字符串后面添加字符串,如果key不存在,该命令等同set。

    setnx key value;如果key不存在,则添加,如果key已存在,则不做任何操作。

    由于Redis中没有数字类型,因此如果我们要计算数字类型,可以在字符串类型中进行处理。

    整数型

    incr key;自增1,如果key不存在,会先自动创建并设置它的value为0,然后进行incr key操作。

    decr key;自减1,如果不存在,处理如上。

    incrby key incrememt;增加incrememt,值增加前和增加后都必须是整数。如果key不存在,处理如上。

    decrby key decrememt;减去decrememt,值减去前和减去后都必须是整数。如果key不存在,处理如上。

    浮点型

    incrbyfloat key incrememt;增加incrememt。这里的值和incrememt可以是整数也可以是浮点数。如果key不存在,同样处理。

    散列类型

    散列类型是以散列表存放的数据,它的时间复杂度是0(1),如果发生hash碰撞,会以单向链表的形式进行处理。

    也因此,可以将散列类型的内部重新当成是一个字符串类型的key-value,许多常用命令与字符串类型差异不大。

    常用命令:

    hset key field value;添加

    hget key field;获取

    hmset key field value [field1 value1...];批量添加

    hmget key field [field...];批量获取

    hsetnx key field value;如果key不存在,则添加,如果key已存在,则不做任何操作

    hincrby key field increment;对字段field的值增加整数increment。要求field原本对应的值也必须是整数。

    上面六个命令在字符串类型中有类似的命令,因为散列的数据格式也是key-value,和字符串类型的格式十分相似,因此处理方法也大多相似。

    hgetall key;获取所有的字段与值

    hexists key field;判断某个字段是否存在

    hlen key;获取字段数量。

    hkeys key;获取所有字段名

    hvals key;获取所有的字段值

    列表类型

    列表类型是一个有序可重复的双向链表,它对两头的操作是非常快速的,但是越往中间速度越慢。

    常用命令:

    lpush key value [value1...];从左边添加一个或多个值

    rpush key value [value1...];从右边添加一个或多个值

    lpop key;从左边弹出一个值。

    rpop key;从右边弹出一个值。

    llen key;获取列表长度。和散列类型一样,都通过*len key返回value中的元素数量。

    lrange key start stop;获取从下标start到stop所有的元素(包括了start和stop)。下标按从左到右的顺序,0作为第一个下标。如果是按照从右到左的顺序,则是-1作为第一个下标。

    lrem key count value;删除|count|个等于指定value的元素。如果count大于0,从左边开始,如果count小于0,从右边开始。当count等于0时,会删除所有等于value的元素。

    lindex key index;获取列表中指定位置的值,如果index大于等于0,从左边开始,第一个元素下标是0。如果index小于0,则从右边开始,第一个元素下标是-1。

    lset key index value;更新下标为index的元素的value,index可以为正为负。

    ltrim key start stop;只保留start到stop的元素,其余全部删除。

    linsert key before|after value1 value2;从左到右,在第一次出现的value1值的前面或后面插入value2值,只会插入一个元素。

    rpoplpush source destination;将source中最右的元素弹出并添加到destination的左边。可以对source和destination使用同一个列表,用作轮训功能。

    集合类型

    集合类型具有无序性和唯一性。它是采用散列形式实现,添加的元素作为散列的key,值都是空。

     常用命令:

    sadd key member [member...];添加一个或多个元素

    srem key member [member...];删除一个或多个元素。不写member默认删除所有元素。

    smembers key;返回集合中所有的元素。

    sismember key member;判断元素是否在集合中

    scard key;返回集合中元素的个数。

    spop key;从集合中随机弹出一个元素,并删除。

    srandmember key [count];从集合中随机获取|count|个元素。假如count不存在,获取1个元素。如果count为正数,获取count个不重复元素。如果count为负数,获取-count个可重复元素。

    PS:在集合中的随机并不是每个元素的概率相等。由于它是使用散列加链表的形式存放数据,因此会先在有元素的hash值中进行一个随机,找到对应的hash位置,hash位置存放的是链表,再次对链表上的元素进行随机。有的链表元素多,里面元素的选中概率就低,有的链表元素少,里面元素的选中概率就高。因此集合中每一个元素的随机概率并不相等。

    集合的计算:

    sdff key1 [key2..];计算key1与一个或多个集合的差集。

    sinter key1 [key2...];计算多个集合的交集。

    sunion key1 [key2...];计算多个集合的并集。

    sdiffstore|sinterstore|sunionstore destination key [key2...];计算多个集合的差集|交集|并集,并将结果存放在新集合destination中。

    有序集合类型

    有序集合类型是在集合类型的基础上,增加了一个数字类型的分数score用来对元素进行排序,元素是有序不可重复的,分数可以重复,可以是整数也可以是浮点数。

    常用命令:

    zadd key score member [score member...];添加一个或多个元素和它们的分数。

    zrem key member [member...];删除一个或多个元素。不写member默认删除所有元素。

    zremrangebyrank key start stop;删除从小到大排序的下标从start到stop的元素。

    zremrangebyscore key min max;删除从小到大排序的分数在min到max的元素。

    scard key;返回集合中有多少个元素

    zrank key member;返回元素从小到大的排名。

    zrevrank key member;返回元素从大到小的排名。

    zscore key member;返回元素的分数。

    zincrby key incrememt member;给元素加分

    zcount key min max;返回分数范围在[min,max]里的元素个数。

    排序:

    zrange key start stop [withscore];返回按从小到大顺序排列的下标从start到stop的元素,如果添加了withscore,还会返回它们的分数。

    zrevrange key start stop [withscore];返回按从大到小熟悉怒排序的下标从start到stop的元素,添加withscore会返回分数。

    zrangebyscore key min max [withscore] [limit offset count];返回按从小到大顺序排列的分数从min到max的元素,添加withscore会返回分数,添加limit

    会从第offset个元素开始,返回count个元素。

    zrevrangebyscore key max min [withscore] [limit offset count];返回按从大到小顺序排列的分数从max到min的元素,其余与上条类似,这里要注意的是max参数在min参数之前。

    有序集合运算:

    zinterstore destination numberkey key [key...] [weight] [aggregate sum|min|max];取多个集合的交集保存在新集合destination中,不添加aggregate参数时,分数会默认进行sum,weight代表每个集合的分数权重,范围从0到1,默认是1,会在aggregate之前将分数乘以权重。

    zunionstore destination numberkey key [key...] [weight] [aggregate sum|min|max];取并集,与上一条类型。

  • 相关阅读:
    微服务
    flume
    mongodb
    Java 代理学习笔记
    HttpClient连接池
    一起写RPC
    spring boot cloud
    .NET MVC 表主外键关系 JSON 无限循环 方案二(推荐)
    EF提示“序列化类型为XXX的对象时检测到循环引用”
    Handlebars.js registerHelper
  • 原文地址:https://www.cnblogs.com/yxth/p/11498538.html
Copyright © 2011-2022 走看看