Redis基本类型与常用命令

Posted 一响贪欢

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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];取并集,与上一条类型。

 

以上是关于Redis基本类型与常用命令的主要内容,如果未能解决你的问题,请参考以下文章

redis常用基本命令

redis数据类型及常用命令

Redis的常用命令和8大数据类型常用操作大全

Redis的常用命令和8大数据类型常用操作大全

redis基本操作命令

深入了解Redis操作五大数据类型常用命令