您的位置:首页 > 数据库 > Redis

redis的常用命令及数据类型

2017-03-21 11:31 447 查看

1常用命令

redis-serverredis.conf             启动redis服务

redis-cli                           启动redis客户端

redis-cli shutdown                  停止redis服务

set foo bar                         添加或修改foo的值为bar

get foo                             获取foo的值

del foo                             删除key为foo的记录

select 3                                切换到3号数据库,默认有16个数据库,默认使用0号数据库,每个数据库都有属于自己的空间,不必担心之间的key冲突

flushdb                             清除当前数据库下的数据,不会影响到其他数据库

flushall                                清除所有数据库的数据。在执行这个命令前要格外小心

2数据类型

2.1 String(字符串)

Strings是Redis value的最基本类型。Redis String是二进制安全的,意思是一个Redis字符串能够包含任何类型的数据,包括JPEG图片或者是序列化Ruby对象。一个String长度最多可以达到512M。

 

你可以用redis的string类型做一些事情:

对于整型的字符串可以使用INCR(递增), DECR(递减), INCRBY(递增)命令

set num 1

INCR num

get num                #结果为2

DECR num           

get num                #结果为1

INCRBY num 5

get num                 #结果为6

可以使用APPEND命令在String后面追加

APPEND foo hello               #假如key不存在,则添加,相当于set

get foo                               #结果为hello

APPEND foo World             #假如key已存在,则追加

get foo                                #结果为helloWorld

可以使用GETRANGESETRANGE来作为一个随机访问向量

set foo hello

GETRANGE foo 0 2            #截取其中一段,结果为hel

SETRANGE foo 3 k

get foo                                #设置其中一段,结果为helko

 

 

其他命令:

       BITCOUNTmykey              #获取字符串的位长度,假如不存在,返回0

BITOP AND destkeysrckey1 srckey2 srckey3 ... srckeyN   #按位与运算,结果放在destkey

BITOP OR destkeysrckey1 srckey2 srckey3 ... srckeyN     #按位或运算,结果放在destkey

BITOP XORdestkey srckey1 srckey2 srckey3 ... srckeyN   #按位异或运算,同上

BITOP NOTdestkey srckey                                             #按位非运算,同上

       BITPOSmykey 0                                             #返回字符串的第一个位是1或0的位置

       SETBITmykey 7 1                                                 #设置字符串的第七位为1

       GETBITmykey 0                                             #返回字符串的第一位的值

GETSET mycounter "0"                                          #设置值为"0",并返回旧的值;若旧值不存在,返回null

DECRBY mykey 3                                                  #每次递减3

       INCRBYFLOATmykey 0.1                               #按浮点数递增

MGET key1 key2                                             #返回所有指定key的值

MSET key1 "Hello" key2 "World"                            #设置所有指定key的值,若key已存在,则覆盖

MSETNX key1 "Hello" key2 "there"                  #设置所有指定key的值;若其中任意一个key存在,则不会执行。

PSETEX mykey 1000 "Hello"                                  #设置key的值以及过期时间,单位:毫秒

SETEX mykey 10 "Hello"                                       #设置key的值以及过期时间,单位:秒

SETNX mykey "Hello"                                     #设置key的值,若key已存在,不执行操作

STRLEN mykey                                                      #返回值的长度

 

      

2.2 Hash(哈希表)

Redis Hashes是由字段和与其对应的值组成的。不管是字段,还是字段的值,都是string。所以很适合表示对象的数据类型。

 

例如,由name, password,age组成的user信息:

       HMSETuser:1000 username antirez password P1pp0 age 34      #设置user各个字段的值

HGETALLuser:1000                                                             #获取user信息

HSET user:1000password 12345                                            #修改信息

HGETALLuser:1000                                                             #获取信息

 

拥有少量字段的哈希表(少量意味着大概100左右)存储会占用很小的空间,因此你可以在一个小的Redis实例中存储上百万个对象。

由于Hashes主要用来表示对象,而且能够存储很多元素,因此你也可以用来完成很多其他任务。

每个hash可以最多存储232 – 1个键值对(超过40亿)

其他命令:

       HDELmyhash field1                                 #删除key的指定字段

       HEXISTSmyhash field1                            #检查key的指定字段是否存在

       HGETmyhash field1                                 #获取key的指定字段的值

       HINCRBYmyhash field 1                          #递增key的指定字段,值为负,则递减

       HINCRBYFLOATmykey field 0.1              #递增key的指定字段,浮点数

       HKEYSmyhash                                        #获取key的所有字段

       HLENmyhash                                          #获取key的所有字段的数量

       HMGETmyhash field1 field2 nofield          #获取key的多个字段的值

       HMSETmyhash field1 "Hello" field2 "World"    #设置key的多个字段的值

HSETNX myhash field "Hello"                         #设置key的指定字段的值,若key不存在,则创建;若字段已存在,则不操作

HSTRLEN myhash f1                                       #获取key的指定字段的值的长度

HVALS myhash                                               #获取key的所有的值

 

2.3 List(列表)

List是string的列表,是根据数据插入的顺序排序的。它是基本的链表。可以向list的头部或者尾部添加元素。LPUSH 向头部插数据,RPUSH 向尾部插数据。当执行这些操作时,会创建一个新的list。

 

例子:

       LPUSHmylist a   # 目前list的值"a"

LPUSH mylistb   # 目前list的值"b","a"

RPUSH mylistc   # 目前list的值"b","a","c"

LRANGE mylist 0-1     # 获取list的所有数据

 

list的最大长度是232 – 1 (4294967295, 每个list可以有超过40亿的元素)

Redis List从时间复杂度的角度来看,它的主要特征是,当在头部和尾部附近插入和删除元素的时候,是常数级别的,即使是插入好几百万的条目。当访问的元素在list的两端时,速度是非常快的,但是如果访问list中间的数据就会变慢,因为它是一个O(N)操作。

 

你可以使用Redis的List做很多有趣的事情:

在一个社交网络中建立一个时间轴模型,使用LPUSH 在用户时间轴中添加新元素,使用LRANGE来检索最近插入的元素。
你可以将LPUSH 和LTRIM 一起使用来创建一个list,让list只保留指定区间内的元素,不在指定区间之内的元素都将被删除,这样仅保存最新的N个元素。
List可以用作原始消息传递。
你可以用list做更多的事情,这种数据类型支持很多命令,包括阻塞命令比如BLPOP

其他命令:

       LINDEXmylist 0                        #获取list的指定索引处的元素

       LSETmylist 0 "four"                  #设置list的指定索引处的元素

       LINSERTmylist BEFORE "World" "There"              #在list的"World"值前面插入"There"

       LLENmylist                               #获取list的长度

       LPOPmylist                               #移除和返回list的第一个元素

RPOP mylist                               #移除和返回list的最后一个元素

       LPUSHmylist "hello"                 #向list头部插入指定的值,假如list不存在,则创建

       LPUSHXmylist "Hello"                     #向list头部插入指定的值,假如list不存在,则不操作

       LREMmylist -2 "hello"               #删除指定个数的"hello",若为负数,则从尾向头删

       LTRIMmylist 1 -1                      #截取list指定范围的数据,从0开始,-1最后一个

RPOPLPUSH mylist myotherlist   #移除第一个list的最后元素,添加到第二个list的头部,并返回该元素

RPUSHX mylist "World"             #向list尾部添加元素,若list不存在,则不操作

BLPOP list1 list2 list3 0                      #移除和返回list第一个元素,或者阻塞直到可用为止

BRPOP list1 list2 0                             #移除和返回list最后一个元素,或者阻塞直到可用为止

 

2.4 Set(集合)

唯一的,无序的string元素的集合。可以在时间复杂度为O(1)的情况下添加,删除,和测试成员是否存在(无论Set包含了多少元素,都是常数时间)。

Redis Sets有可以去除重复元素的特征。在一个set中多次插入同样的元素,只会有一个元素的副本。实际上这意味着,添加一个元素不需要先检查它是否存在然后再添加的操作。

关于Redis Set的非常有意思的一件事,是它支持很多服务器端的命令在已存在的set中去计算set,这样一来你可以在很短的时间内做并集,交集,和获取set中的不同元素。

Set的成员最多有232 – 1个(4294967295,每个set可以有超过40亿的元素)

 

例子:

       SADDmyset a              #向myset中添加a

       SADDmyset b              #向myset中添加b

       SMEMBERSmyset       #获取myset的所有成员,包括"a", "b"

       SREMmyset b              #删除myset中的b成员

 

你可以使用Redis的Set做很多有趣的事情:

你可以使用Redis Sets来追踪唯一的事情。想知道所有访问指定博客的唯一IP地址吗?只需要每次处理页面的时候使用SADD就行了。可以确保重复的IP不会被插入。
Redis Set用来表示关系是非常不错的选择。你可以使用Redis Set来创建一个标签系统,每一个Set表示一个标签。你可以使用SADD命令把所有给定标签的对象放进一个表示该特定标签的Set里。你想获取同时拥有3个不同标签的所有对象的ID吗?只需要使用SINTER就行了。
你可以使用SPOP 或者 SRANDMEMBER命令,随机提取set中的数据。

其他命令:

       SCARDmyset                                   #返回set中元素的个数

       SDIFFkey1 key2                        #返回第一个set和其他set的不同元素

SDIFFSTORE key key1 key2              #和SDIFF类似,只不过把结果保存在key2中;若key2存在,则覆盖

SINTER key1 key2                            #返回所有给定set的交集

SINTERSTORE key key1 key2    #和SINTER类似,只不过把结果保存在key2中;若key2存在,则覆盖

SISMEMBER myset "one"           #"one"是否是set的成员

SMOVE myset myotherset "two"  #将"two"从源set转移到目的set

SPOP myset 3                                    #从set中移除或返回一个或多个随机的元素

SRANDMEMBER myset 2          #从set中返回一个或多个随机的元素

SUNION key1 key2                           #返回所有给定set的并集

SUNIONSTORE key key1 key2   ##和SUNION类似,只不过把结果保存在key2中;若key2存在,则覆盖

 

2.5 SortedSet(有序集合)

Redis Sorted Sets是类似于Redis Sets,非重复的字符串的集合。不同之处在于Sorted Set的每个成员都关联一个score,用来将sorted set按照score从小到大进行排序的。成员是唯一的,score可以重复。

使用sorted sets,你可以非常快速的添加,删除或者更新元素(与元素的数量的对数成正比)。由于元素是按顺序放入的,之后就不是有序的,但是你可以很快速的通过score或者排名来获取范围。访问sorted set的中间部分速度也很快,因此你可以把Sorted Sets当成一个无重复元素的list,你可以快速的访问任何你需要的东西:有序的元素,快速测试元素是否存在,快速的访问中间的元素!

简而言之,使用sortedsets你可以很高效的完成很多其他类型的数据库难以完成的任务。

 

例子:

       ZADDsset 1 35                   #score为1,值为35

       ZADDsset 2 90       
cd21
            #score为2,值为90

       ZADDsset 2 80                   #score重复,可添加成功

       ZRANGEsset 0 -1               #显示所有数据

       ZADDsset 3 80                   #值重复,添加失败

 

用sorted sets你可以:

在大规模的网络游戏排行榜,每次一个新的分数提交进来你都使用ZADD来更新。你可以很容易的用ZRANGE来获取前几名用户,你也可以用ZRANK根据用户名来返回他的排名。ZRANK和ZRANGE一起使用,你可以根据分数获取用户。
Sorted Sets经常用来索引存储在Redis内部的数据。比如说,如果你有很多表示用户的哈希表,你可以使用Sorted Sets,用用户的年龄作为score,用用户的ID作为值。这样的话,使用ZRANGEBYSCORE 就可以很简单而且快速的检索到某个年龄段的用户了。
Sorted Sets也许是Redis最高级的数据类型了。

其他命令:

       ZCARDmyzset                    #返回sorted set的元素数量

       ZCOUNT myzset (1 3           #返回sorted set中,score在min 和max之间的元素数量
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: