目录

前言

一、String字符串数据类型

1、set / get / append / strlen

2、 INCR/DECR/INCRBY/DECRBY

3、getset

4、setex

5、setnx

6、mset / mget / msetnx

二、List列表数据类型

1、lpush / lpushx / lrange

2、lpop / llen

3、lrem / lset / lindex / ltrim

4、linsert

5、rpush / rpushx / rpop / rpoplpush

三、Hash数据类型 (散列类型)

1、hset / hget / hdel / hexists / hlen / hsetnx

2、hincrby

3、hmset / hmget / hgetall / hkeys / hvals

四、set数据类型(无序集合)

1、sadd / smembers / scard / sismember

2、spop / srem / srandmember / smove

五、Sorted Set数据类型 (zset、有序集合)

1、zadd / zcard / zcount / zrem / zincrby / zscore / zrank

2、zrangebyscore / zremrangebyrank / zremrrangebyscore

3、zrevrange / zrevrangebyscore / zrevrank

总结


前言

key和value即键值对的的方式存储

一、String字符串数据类型

概述:String是 redis 最基本的类型,最大能存储 512MB 的数据,String类型是二进制安全的,即

可以存储任何数据、比如数字、图片、序列化对象等

1、set / get / append / strlen

set key value  #存放数据

get key value  #获取数据

append key value   #Redis的append命令是往一个key追加value。如果没有key,则创建一个并且设置value

strlen key     #获取指定Key的字符长度

……
redis 127.0.0.1:6379> exists mykey             #判断该键是否存在,存在返回1,否则返回0。
(integer) 0
redis 127.0.0.1:6379> append mykey "hello"     #该键并不存在,因此append命令返回当前Value的长度。
(integer) 5
redis 127.0.0.1:6379> append mykey " world"    #该键已经存在,因此返回追加后Value的总长度。
(integer) 11
redis 127.0.0.1:6379> get mykey                #通过get命令获取该键,以判断append的结果。
"hello world"
redis 127.0.0.1:6379> set mykey "this is a test"   #通过set命令为键设置新值,并覆盖原有值。
OK
redis 127.0.0.1:6379> get mykey
"this is a test"
redis 127.0.0.1:6379> strlen mykey             #获取指定Key的字符长度。
(integer) 14
127.0.0.1:6379>
……

2、 INCR/DECR/INCRBY/DECRBY

incr key              #key值递增加1(key值必须为整数)

decr key              #key值递减减1(key值必须为整数)

incrby key increment          #增加指定的整数

decrby key increment    #减少指定的整数

……
127.0.0.1:6379> set myk 20   #设置Key的值为20
OK
127.0.0.1:6379> incr myk   #该Key的值递增1
(integer) 21
127.0.0.1:6379> decr myk    #该Key的值递减1
(integer) 20
127.0.0.1:6379> del myk  #删除已有键。返回1说明删除成功
(integer) 1
127.0.0.1:6379> decr myk    #对空值执行递减操作,其原值被设定为0,递减后的值为-1
(integer) -1
127.0.0.1:6379> del myk    #删除已有键。返回1说明删除成功
(integer) 1
127.0.0.1:6379> incr myk   #对空值执行递增操作,其原值被设定为0,递增后的值为1
(integer) 1
127.0.0.1:6379> set myk hello     #将该键的Value设置为不能转换为整型的普通字符串。
OK
127.0.0.1:6379> incr myk    #该Key的值为普通字符串,不能转换成整数
(error) ERR value is not an integer or out of range
127.0.0.1:6379> set myk 10
OK
127.0.0.1:6379> decrby myk 5        #减少指定的整数
(integer) 5
127.0.0.1:6379> incrby myk 3         #增加指定的整数
(integer) 8
127.0.0.1:6379>
……

3、getset

getset key value #获取计数器原有值的同时,并将其设置为新值,这两个操作原子性的同时完成

……
127.0.0.1:6379> incr mycounter   #将计数器的值原子性的递增1
(integer) 1
127.0.0.1:6379> getset mycounter 0  #在获取计数器原有值的同时,并将其设置为新值,这两个操作原子性的方式同时完成。
"1"
127.0.0.1:6379> get mycounter     #查看设置后的结果。
"0"
"0"
127.0.0.1:6379>
……

4、setex

setex key seconds value  #设置指定Key的过期时间为xx秒

ttl key     #查看键的剩余存活时间

ttl返回值:

其它值是剩余存活时间

-1 往往代表的是一个上限,表示所有的意思

-2 表示的失效/过期

……
127.0.0.1:6379> setex mykk 15 "hello"    #设置指定Key的过期时间为15秒。
OK
127.0.0.1:6379> ttl mykk  #通过tt1命令查看指定Key的剩余存活时间(秒数),0表示已经过期,-1表示永不过期。
(integer) 2
127.0.0.1:6379> ttl mykk   #该ttl命令的返回值显示,该Key已经过期。
(integer) -2
127.0.0.1:6379> get mykk
(nil)
127.0.0.1:6379>
……

5、setnx

SETNX key value:不存在键的话执行set操作,存在的话不执行。

setnx key value #创建指定键,若该键存在则不执行,不存在则执行

……
127.0.0.1:6379> del mykey   #删除该键,以便于下面的测试验证。
(integer) 1
127.0.0.1:6379> setnx mykey "hello"   #该键并不存在,因此setnx命令执行成功。
(integer) 1
127.0.0.1:6379> setnx mykey "world"    #该键已经存在,因此本次设置没有产生任何效果。
(integer) 0
127.0.0.1:6379> get mykey       #从结果可以看出,返回的值仍为第一次设置的值。
"hello"
127.0.0.1:6379>
……

6、mset / mget / msetnx

mset key value          #批量设置键-值对

mget key                #批量获取键-值对

msetnx key value      #批量设置键值,都不存在就执行并返回1;只要有一个存在就不执行并返回0

……
127.0.0.1:6379> mset key1 "hello" key2 "world"  #批量设置了key1和key2两个键。
OK
127.0.0.1:6379> mget key1 key2    批量获取了key1和key2两个键的值。
1) "hello"
2) "world"
127.0.0.1:6379> msetnx key3 "zhang" key4 "san"   #批量设置了key3和key4两个键,因为之前他们并不存在,所以msetnx命令执行成功并返回1。
(integer) 1
127.0.0.1:6379> mget key3 key4
1) "zhang"
2) "san"
127.0.0.1:6379> msetnx key3 "hello" key5 "world"  #批量设置了key3和key5两个键,但是key3已经存在,所以msetnx命令执行失败并返回0。
(integer) 0
127.0.0.1:6379> mget key3 key5   #批量获取key3和key5,由于key5没有设置成功,所以返回nil
1) "zhang"
2) (nil)
127.0.0.1:6379>

二、List列表数据类型

概述:列表的元素类型为string,按照插入顺序排序,在列表的头部或尾部添加元素。

1、lpush / lpushx / lrange

lpush key value        #该命令会创建该键及与其关联的List,之后在将参数中的values从左到右依次插入到表头

lpushx key value    #该命令仅当key存在时执行, 在头部插入元素值并返回并返回列表元素数量

lrange key start stop   #返回列表中指定区间内的元素,0表示第一个元素,1表示第二个元素。取从位置索引start到位置索引stop的所有元素(所以以0开始)

……
127.0.0.1:6379> del mykey
(integer) 1
127.0.0.1:6379> lpush mykey a b c d
#mykey键并不存在,该命令会创建该键及与其关联的List,之后在将参数中的values从左到右依次插入。
(integer) 4
(integer) 4
127.0.0.1:6379> lrange mykey 1 2    #取从位置1开始到位置2结束的2个元素。
1) "c"
2) "b"
127.0.0.1:6379> lrange mykey 1 -1  #取从位置1开始到最后一个元素。
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> lrange mykey 0 -1
#取链表中的全部元素,其中0表示第一个元素,-1表示最后一一个元素。
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> lpushx mykey2 e #mykey2键此时并不存在,因此lpushx命令将不会进行任何操作,其返回值为0。
(integer) 0
127.0.0.1:6379> lrange mykey2 0 -1  #可以看到mykey2没有关联任何List Value。
(empty list or set)
127.0.0.1:6379> lpushx mykey e
#mykey键此时已经存在,所以lpushx命令插入成功,并返回链表中当前元素的数量。
(integer) 7
127.0.0.1:6379> lrange mykey 0 0    #获取该键的List Value的头部元素。
1) "e"
127.0.0.1:6379>
……

2、lpop / llen

lpop key      #移除并返回第一个元素,从头开始

llen key #查看列表中元素个数

……
127.0.0.1:6379> del mykey
(integer) 1
127.0.0.1:6379> lpush mykey a b c d
(integer) 4
127.0.0.1:6379> lpop mykey  #移除并返回mykey键的第一个元素,即从右往左第一个
"d"
127.0.0.1:6379> lpop mykey
"c"
127.0.0.1:6379> llen mykey
#获取表中元素数量,在执行lpop命令两次后,链表头部的两个元素已经被弹出,此时链表中元素的数量是2。
(integer) 2
127.0.0.1:6379>
……

3、lrem / lset / lindex / ltrim

lrem key count value         #从头部开始删除count个值为value的元素,并返回实际删除数量。

lset key index value    #将索引值为index的元素值设置为新值value。

lindex key index           #获取索引值为index的元素值。

ltrim key start stop   #仅保留索引值start到stop的元素。

……
127.0.0.1:6379> del mykey
(integer) 1
127.0.0.1:6379> lpush mykey a b c d a c
(integer) 6
127.0.0.1:6379> lrem mykey 2 a   #从头部(left)向尾部(right)变量链表,删除2个值等于a的元素,返回值为实际删除的数量。
(integer) 2
127.0.0.1:6379> lrange mykey 0 -1  #查看删除后链表中的全部元素。
1) "c"
2) "d"
3) "c"
4) "b"
127.0.0.1:6379> lindex mykey 1   #获取索引值为1(头部的第二个元素)的元素值。
"d"
127.0.0.1:6379> lset mykey 1 e  #将索引值为1(头部的第二个元素)的元素值设置为新值e。
OK
127.0.0.1:6379> lindex mykey 1   #查看是否设置成功。
"e"
127.0.0.1:6379> lindex mykey 6    #索引值6超过了链表中元素的数量,该命令返回nil。
(nil)
127.0.0.1:6379> lset mykey 6 hh  #设置的索引值6超过了链表中元素的数量,设置失败,该命令返回错误信息。
(error) ERR index out of range
127.0.0.1:6379> ltrim mykey 0 2  #仅保留索引值0到2之间的3个元素,注意第0个和第2个元素均被保留。
OK
127.0.0.1:6379> lrange mykey 0 -1    #查看ltrim后的结果。
1) "c"
2) "e"
3) "c"
127.0.0.1:6379>

4、linsert

linsert key BEFORE|AFTER pivot value       #在键的元素pivot前/后插入新元素元素

……
127.0.0.1:6379> del mykey   #删除该键便于后面的测试。
(integer) 1
127.0.0.1:6379> lpush mykey a b c d e   #为后面的示例准备测试数据。
(integer) 5
127.0.0.1:6379> linsert mykey before a a1   #在a的前面插入新元素a1。
(integer) 6
127.0.0.1:6379> lrange mykey 0 -1   #查看是否插入成功,从结果看已经插入
1) "e"
2) "d"
3) "c"
4) "b"
5) "a1"
6) "a"
127.0.0.1:6379> linsert mykey after e e2  #在e的后面插入新元素e2,从返回结果看已经插入成功。
(integer) 7
127.0.0.1:6379> lindex mykey 1  #再次查看是否插入成功。
"e2"
127.0.0.1:6379> linsert mykey after k a  #在不存在的元素之前或之后插入新元素,linsert 命令操作失败,并返回-1。
(integer) -1
127.0.0.1:6379> linsert mykey1 after a a2  为不存在的Key插入新元素,linsert命 令操作失败,返回0。
(integer) 0
127.0.0.1:6379>
……

5、rpush / rpushx / rpop / rpoplpush

rpush key value        #将值从左往右依次插入,在列表的尾部依次插入value

rpushx key value       #key必须存在才可执行,将value从尾部插入,并返回所有元素数量

rpop key    #移除并返回键的第一个元素,从尾开始

rpoplpush source destination      #将键1尾部元素xxx弹出并返回,同时再将它插入到键2的头部(原子性的完成这两步操作)

……
127.0.0.1:6379> del mykey   #删除该键,以便于后而的测试。
(integer) 1
127.0.0.1:6379> rpush mykey a b c d   #从链表的尾部插入参数中给出的values,插入顺序是从右到左依次插入。
(integer) 4
127.0.0.1:6379> lrange mykey 0 -1  通过lrange命令可以获悉rpush在插入多值时的插入顺序。
1) "a"
2) "b"
3) "c"
4) "d"
127.0.0.1:6379> rpushx mykey e   #该键已经存在并且包含4个元素,rpushx命令将执行成功,并将元素e插入到链表的尾部。
(integer) 5
127.0.0.1:6379> lindex mykey 4   #通过lindex命令可以看出之前的rpushx命令确实执行成功,因为索引值为4的元素已经是新元素了。
"e"
127.0.0.1:6379> rpushx mykey2 e    #由于mykey2键并不存在,因此rpushx命令不会插入数据,其返回值为0。
(integer) 0
127.0.0.1:6379> lrange mykey 0 -1    #在执行rpoplpush命令前,先看一下 mykey中链表的元素有哪些,注意他们的位置关系。
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
127.0.0.1:6379> rpop mykey    #移除并返回mykey键的第一个元素,从右取
"e"
127.0.0.1:6379> lrange mykey 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
127.0.0.1:6379> rpoplpush mykey mykey2   #将mykey的尾部元素e弹出,同时再插入到mykey2的头部(原子性的完成这两步操作)。
"d"
127.0.0.1:6379> lrange mykey 0 -1       #通过lrange命令查看mykey在弹出尾部元素后的结果。
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> lrange mykey2 0 -1  #通过lrange命令查看mykey2在插入元素后的结果。
1) "d"
127.0.0.1:6379> rpoplpush mykey mykey  #将source和destination设为同一键,将mykey中的尾部元素移到其头部。
"c"
127.0.0.1:6379> lrange mykey 0 -1   #查看移动结果。
1) "c"
2) "a"
3) "b"
127.0.0.1:6379>

三、Hash数据类型 (散列类型)

概述:hash用于存储对象。可以采用这样的命名方式(hash格式):对象类别和ID构成键名,使用字

段表示对象的属性,而字段值则存储属性值。

如:存储ID为2的汽车对象。

如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash可以存

储4294967295个键值对。

1、hset / hget / hdel / hexists / hlen / hsetnx

hset key field value     #给xxx键设置字段为xxx,值为xxx

hget key field                 #获取xxx键,字段为xxx的值

hdel key field                 #删除xxx键的xxx字段,成功返回1

hexists key field      #判断xxx键中的xxx字段是否存在,存在返回1

hlen key                       #获取xxx键的字段数量

hsetnx key field value      #给xxx键添加新字段,是否执行基于此字段是否存在,不管键是否存在,返回1表示执行成功

……
127.0.0.1:6379> hset myhash field1 "zhang"  #给键值为myhash的键设置字段为field1,值为zhang。
(integer) 1
127.0.0.1:6379> hget myhash field1   #获取键值为myhash,字段为field1的值。
"zhang"
127.0.0.1:6379> hget myhash field2  #myhash键中不存在field2字段,因此返回nil.
(nil)
127.0.0.1:6379> hset myhash field2 "san"  #给myhash添加一个新的字段field2,其值为san。
(integer) 1
127.0.0.1:6379> hlen myhash    #hlen命令获取myhash键的字段数量。
(integer) 2
127.0.0.1:6379> hexists myhash field1
#判断myhash键中是否存在字段名为field1的字段,由于存在,返回值为1。
(integer) 1
127.0.0.1:6379> hdel myhash field1
#删除myhash键中字段名为field1的字段,删除成功返回1。
(integer) 1
127.0.0.1:6379> hdel myhash field1
#再次删除myhash键中字段名为field1的字段,由于上一条命令已经将其删除,因为没有东西可删除,返回0
(integer) 0
127.0.0.1:6379> hexists myhash field1
#判断myhash键中是否存在field1字段,由于上一条命令已经将其删除,因为返回0。
(integer) 0
127.0.0.1:6379> hsetnx myhash field1 zhang
#通过hsetnx命令给myhash添加新字段field1,其值为zhang,因为该字段已经被删除,所以该命令添加成功并返回1
(integer) 1
127.0.0.1:6379> hsetnx myhash field1 zhang
#由于myhash的field1字段已经通过上一条命令添加成功,因为本条命令不做任何操作后返回0。
(integer) 0
127.0.0.1:6379>
……

2、hincrby

hincrby key field increment          #给xxx键的xxx字段值加x

……
127.0.0.1:6379> del myhash    #删除该键,便于后面示例的测试。
(integer) 1
127.0.0.1:6379> hset myhash field 5  #准备测试数据,该myhash的field字段设定值5。
(integer) 1
127.0.0.1:6379> hincrby myhash field 1  #hincrby命令给myhash的field字段的值加1,返回加后的结果。
(integer) 6
127.0.0.1:6379> hincrby myhash field -2  hincrby命令给myhash的field字段的值加-2,返回加后的结果。
(integer) 4
127.0.0.1:6379> hincrby myhash field -9  #hincrby命令给myhash的field字段的值加-9,返回加后的结果。
(integer) -5
127.0.0.1:6379>
……

3、hmset / hmget / hgetall / hkeys / hvals

hmset key field value   #批量为xxx键创建字段和赋值

hmget key field            #获取指定多个字段值

hgetall key                 #返回xxx键的所有字段及其值,是逐对列出的

hkeys key                   #仅获取xxx键中所有字段名

hvals key                    #仅获取xxx键中所有字段值

……
127.0.0.1:6379> del myhash  #删除该键,便于后面示例测试。
(integer) 1
127.0.0.1:6379> hmset myhash field1 "hello" field2 "world"
#hmset命令为该键myhash,一次性设置多个字段,分别是field1="hello",field2="world"。
OK
127.0.0.1:6379> hmget myhash field1 field2 field3
#hmget命令获取myhash键的多个字段,其中field3并不存在,因为在返回结果中与该字段对应的值为nil。
1) "hello"
2) "world"
3) (nil)
127.0.0.1:6379> hgetall myhash
#hgetall命令返回myhash键的所有字段及其值,从结果中可以看出,他们是逐对列出的。
1) "field1"
2) "hello"
3) "field2"
4) "world"
127.0.0.1:6379> hkeys myhash
#hkeys命令仅获取myhash键中所有字段的名字。
1) "field1"
2) "field2"
127.0.0.1:6379> hvals myhash
#hvals命令仅获取myhash键中所有字段的值。
1) "hello"
2) "world"
127.0.0.1:6379>
……

四、set数据类型(无序集合)

概述:无序集合,元素类型为string类型,元素具有唯一性, 不允许存在重复的成员。多个集合类

型之间可以进行并集、交集和差集运算

应用范围:

)、可以使用Redis的Set数据类型跟踪一些唯一性数据,比如访问某一博客的唯一IP地址信息。对

于此场景,我们仅需在每次访问该博客时将访问者的IP存入Redis中,Set数据类型会自动保证IP地

址的唯一性。

)、充分利用Set类型的服务端聚合操作方便、高效的特性,可以用于维护数据对象之间的关联关

系。比如所有购买某–电子设备的客户ID被存储在一个指定的Set中,而购买另外一种电子产品的客

户ID被存储在另外一个Set中,如果此时我们想获取有哪些客户同时购买了这两种商品时,Set的

intersections 命令就可以充分发挥它的方便和效率的优势了。

1、sadd / smembers / scard / sismember

sadd key member                  #将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。假如集合 key 不存在,则创建一个只包含添加的元素作成员的集合

smembers key                 #通过smembers命令查看插入的结果,输出的顺序与插入顺序无关

scard key                       #获取集合中成员的数量

sismember key member #判断键中xxx成员是否存在,返回0表示不存在,1表示存在

……
127.0.0.1:6379> sadd myset a b c  #插入测试数据,由于该键myset之前并不存在,因此参数中的三个成员都被正常插入。
(integer) 3
127.0.0.1:6379> sadd myset a d e
#由于参数中的a在myset中已经存在,因此本次操作仅仅插入了d和e两个新成员。
(integer) 2
127.0.0.1:6379> sismember myset a   #判断a是否已经存在,返回值为1表示存在。
(integer) 1
127.0.0.1:6379> sismember myset f   #判断f是否已经存在,返回值为0表示不存在。
(integer) 0
127.0.0.1:6379> smembers myset
#通过smembers命令查看插入的结果,从结果可以看出,输出的顺序和插入顺序无关。
1) "c"
2) "b"
3) "a"
4) "d"
5) "e"
127.0.0.1:6379> scard myset        #获取Set集合中元素的数量
(integer) 5
127.0.0.1:6379>
……

2、spop / srem / srandmember / smove

spop key                                #随机的移除并返回键中的某一成员

srem key member1 member1 ... #从键中移出member成员,并返回移出成员个数

srandmember key                        #该命令随机的返回某一成员

smove source destination member  #将source的member成员移到destination,成功返回1,失败返回0

……
127.0.0.1:6379> sadd myset a b c d   #为后面的示例准备测试数据。
(integer) 4
127.0.0.1:6379> smembers myset       #查看Set中成员的位置。
1) "d"
2) "a"
3) "c"
4) "b"
127.0.0.1:6379> srandmember myset   #从结果可以看出,该命令确实是随机的返回了某一成员
"d"
127.0.0.1:6379> srandmember myset
"c"
127.0.0.1:6379> spop myset  #随机的移除并返回Set中的某一成员。
"a"
127.0.0.1:6379> spop myset
"d"
127.0.0.1:6379> smembers myset  #查看移出后set的成员信息。
1) "c"
2) "b"
127.0.0.1:6379> srem myset c f
#从myseet中移出c和f两个成员,其中f并不存在,因此只有c两个成员被移出,返回为1。
(integer) 1
127.0.0.1:6379> smembers myset   #查看移出后的输出结果。
1) "b"
127.0.0.1:6379> sadd myset a c d  #为后面的smove命令准备数据。
(integer) 3
127.0.0.1:6379> sadd myset2 c d   #为后面的smove命令准备数据。
(integer) 2
127.0.0.1:6379> smove myset myset2 a
#将a从myset移到myset2,从结果可以看出移动成功。
(integer) 1
127.0.0.1:6379> smove myset myset2 a
#再次将a从myset移到myset2,由于此时a已经不是myset的成员了,因此移动失败并返回0。
(integer) 0
127.0.0.1:6379> smembers myset
#分别查看myset和myset2的成员,确认移动是否真的成功。
1) "d"
2) "c"
3) "b"
127.0.0.1:6379> smembers myset2
1) "d"
2) "a"
3) "c"
127.0.0.1:6379>
……

五、Sorted Set数据类型 (zset、有序集合)

概述:

a、有序集合,元素类型为Sting,元素具有唯一性, 不能重复。

b、每个元素都会关联–个double类型的分数score(表示权重),可以通过权重的大小排序,元素的

score可以相同。

应用范围:

可以用于一个大型在线游戏的积分排行榜。每当玩家的分数发生变化时,可以执行ZADD命 令更新

玩家的分数,此后再通过ZRANGE命令获取积分TOP10的用户信息。当然我们也可以利用ZRANK

命令通过username来获取玩家的排行信息。最后我们将组合使用ZRANGE和ZRANK命令快速的获

取和某个玩家积分相近的其他用户的信息。

Sorted-Set类型还可用于构建索引数据。

1、zadd / zcard / zcount / zrem / zincrby / zscore / zrank

zadd key [NX|XX] [CH] [INCR] score member [score member ...]    #将一个或多个成员元素及其分数值加入到有序集当中

zrange key start stop [withscores]   #查看成员;加withscores可显示成员加分数

zcard key                            #获取键中成员的数量

zcount key min max                #分数满足表达式x <= score <= x的成员的数量

zrem key member [member ...]   #删除成员xxx、xxx,返回实际删除成员的数量

zincrby key increment member   #成员xxx不存在,zincrby命令将添加该成员并假设其初始分数为0

zscore key member                 #获取成员xxx的分数

zrank key member                  #获取成员xxx的位置索引值

……
127.0.0.1:6379> zadd myzset 1 "one"    #添加一个分数为1的成员。
(integer) 1
127.0.0.1:6379> zadd myzset 2 "two" 3 "three"   #添加两个分数分别是2和3的两个成员。
(integer) 2
127.0.0.1:6379> zrange myzset 0 -1 WITHSCORES   #0表示第一个成员,-1表示最后一个成员。WITHSCORES选 项表示返回的结果中包含每个成员及其分数,否则只返回成员。
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
127.0.0.1:6379> zrank myzset one   #获取成员one在Sorted-Set中的位置索引值。0表示第一个位置。
(integer) 0
127.0.0.1:6379> zrank myzset four   #成员four并不存在,因此返回nil。
(nil)
127.0.0.1:6379> zcard myzset        #获取myzset键中成员的数量。
(integer) 3
127.0.0.1:6379> zcount myzset 1 2    #zcount key min max,分数满足表达式1 <= score <= 2的成员的数量。
(integer) 2
127.0.0.1:6379> zrem myzset one two   #删除成员one和two,返回实际删除成员的数量
(integer) 2
127.0.0.1:6379> zcard myzset           #查看是否删除成功。
(integer) 1
127.0.0.1:6379> zscore myzset three    #获取成员three的分数。返回值是字符串形式。
"3"
127.0.0.1:6379> zscore myzset two      #由于成员two已经被删除,所以该命令返回nil。
(nil)
127 .0.0.1:6379> zincrby myzset 2 one   #成员one不存在,zincrby命令将添加该成员并假设其初始分数为0,将成员one的分数增加2,并返回该成员更新后的分数。
"2"
127.0.0.1:6379> zincrby myzset -1 one    #将成员one的分数增加-1,并返回该成员更新后的分数。
"1"
127.0.0.1:6379> zrange myzset 0 -1 WITHSCORES   #查看在更新了成员的分数后是否正确。
1) "one"
2) "1'
3) "three"
4) "3"
127.0.0.1:6379>
……

2、zrangebyscore / zremrangebyrank / zremrrangebyscore

zrangebyscore key min max        #获取分数满足表达式x <= score <= x的成员

zremrangebyrank key start stop  #删除位置索引满足表达式x <= rank <= x的成员。

zremrangebyscore key min max #删除分数满足表达式x <= score <= x的成员,并返回实际删除的数量。

……
127.0.0.1:6379> del myzset
(integer) 1
127.0.0.1:6379> zadd myzset 1 one 2 two 3 three 4 four
(integer) 4
127.0.0.1:6379> zrangebyscore myzset 1 2
#zrangebyscore key min max,获取分数满足表达式1 <= score <= 2的成员。
1) "one"
2) "two"
127.0.0.1:6379> zrangebyscore myzset (1 2
#获取分数满足表达式1 < score <= 2的成员。
1) "two"
127.0.0.1:6379> zrangebyscore myzset -inf +inf limit 2 3   #-inf表示第一个成员(位置索引值最低的,即0),+inf表示最后一个成员(位置索引值最高的),limit后面的参数用于限制返回成员的值,2表示从位置索引等于2的成员开始,取后而3个成员。
1) "three"
2) "four"
127.0.0.1:6379> zrangebyscore myzset 0 4 limit 2 3
1) "three"
2) "four"
127.0.0.1:6379> zremrange byscore myzset 1 2
#删除分数满足表达式1 <= score <= 2的成员,并返回实际删除的数量。
(integer) 2
127.0.0.1:6379> zrange myzset 0 -1       #查看一下.上面的删除是否成功。
1) "three"
2) ”four"
127.0.0.1:6379> zremrangebyrank myzset 0 1    #删除位置索引满足表达式0 <= rank <= 1的成员。
(integer) 2……

3、zrevrange / zrevrangebyscore / zrevrank

zrevrange key start stop [withscores] #以位置索引从高到低的方式获取并返回此区间内的成员

zrevrangebyscore key max min   #获取分数满足表达式x >= score >= x 的成员,并以从高到底的顺序输出。

zrevrank key member                     #获取成员索引

……
127.0.0.1:6379> del myzset   #为后面的示例准备测试数据。
(integer) 1
127.0.0.1:6379> zadd myzset 1 one 2 tow 3 three 4 four
(integer) 4
127.0.0.1:6379> zrevrange myzset 0 -1 withscores
#以位置索引从高到低的方式获取并返回此区间内的成员。
1) "four"
2) "4"
3) "three"
4) "3"
5) "tow"
6) "2"
7) "one"
8) "1"
127.0.0.1:6379> zrevrange myzset 1 3
#由于是从高到低的排序,所以位置等于0的是four,1是three,并以此类推。
1) "three"
2) "tow"
3) "one"
127.0.0.1:6379> zrevrank myzset one   #由于是从高到低的排序,所以one的位置/索引下标是3。
(integer) 3
127.0.0.1:6379> zrevrank myzset four  #由于是从高到低的排序,所以four的位置是0。
(integer) 0
127.0.0.1:6379> zrevrangebyscore myzset 3 0
# zrevrangebyscore key max min,获取分数满足表达式3 >= score >= 0的成员,并以从高到底的顺序输出。
1) "three"
2) "tow"
3) "one"
127.0.0.1:6379> zrevrangebyscore myzset 4 0 limit 1 2
#zrevrangebyscore命令支持limit选项,其含义等同于zrangebyscore中的该选项,只是在计算位置时按照相反的顺序计算和获取。
1) "three"
2) "tow"
127.0.0.1:6379> zrevrangebyscore myzset +inf -inf limit 1 3
1) "three"
2) "tow"
3) "one"
127.0.0.1:6379>

总结

1、string字符串类型:get、mget

2、list列表类型:lrange、lindex

3、hash哈希类型:hget、hmget、hgetall、hkeys、hvals

4、set无序集合:smember

5、set有序集合:zrange

redis数据库数据类型(三)相关推荐

  1. Redis数据库(三)——Redis数据类型

    Redis数据库(三)--Redis数据类型 一.String类型 1.set / get / append / strlen 2.incr / decr / incrby / decrby 3.ge ...

  2. Redis数据库(三)——(主从复制、哨兵模式、集群)

    Redis数据库(三)--(主从复制.哨兵模式.集群) 一.Redis主从复制 1.Redis主从模式介绍 2.Redis主从复制的流程 3.Redis主从复制的作用 4.Redis主从复制的搭建 环 ...

  3. redis数据库数据类型 重点数据类型特点及操作

    set hset list:有序 ,可重复 1.list 查看所有数据命令 lrang 0 -1 lrang 0 x 当x大于数据库里的下标时,查看所有数据 lrang 0 -2       查看数据 ...

  4. 百度现场面试:JVM+算法+Redis+数据库!(三面)| CSDN博文精选

    戳蓝字"CSDN云计算"关注我们哦! 作者 |  中琦2513 转自 | CSDN博客 责编 | 阿秃 百度一面(现场) 自我介绍 Java中的多态 为什么要同时重写hashcod ...

  5. java连接操作redis数据库

    1.通过jedis连接操作redis数据库 第一步,导包 第二步,连接操作string类型和hashmap类型数据 结果如下 2.通过springdata Redis操作redis数据库 第一步,导包 ...

  6. redis mysql查询数据类型_linux 常见的标识与Redis数据库详解

    xxx@xxx:~$ : 第一个 xxx 只的是 用户名 第二个 xxx 代表的是 HOST主机 ~ : 当前用户的根, 根的位置在 /home/用户名 $ : 代表当前用户是一个普通用户 # : 代 ...

  7. Redis数据库(二)——数据类型

    Redis数据库(二)--数据类型 一.String数据类型 1.set / get / append / strlen 2.incr / decr / incrby / decrby 3.getse ...

  8. Redis实现之数据库(三)

    过期键删除策略 在Redis实现之数据库(二)一小节中,我们知道了数据库键的过期时间都保存在过期字典中,又知道了如果根据过期时间去判断一个键是否过期,现在剩下的问题是:如果一个键过期了,那么它什么时候 ...

  9. 【数据存储】【Redis】第三章: Redis五大数据类型实现原理

    Redis五大数据类型实现原理 对于五大数据类型(String,list,Hash,Set,Zset)实现原理,Redis在底层用到了多种数据结构,通过数据结构来实现键值对,将数据结构创建了一个对象r ...

最新文章

  1. Atitit.Java exe bat  作为windows系统服务程序运行
  2. 一个方框,文字在边框上
  3. pycharm 格式化代码
  4. AI和深度学习正在席卷医疗保健行业
  5. python任务调度框架_Python任务调度模块APScheduler
  6. jquery 延迟加载代码_延迟加载是一种代码气味
  7. [算法练习]Excel Sheet Column Title
  8. oracle中日期处理方法 汇总
  9. 华为服务器sn号查询网站,linux 查询服务器sn
  10. 怎么才能在百度上看到自己发布的博文?
  11. 给用户添加sudo功能
  12. 开源经济模型 MAKRO
  13. [2017.01.04] 经典排序算法思想及其实现
  14. 小菜找实习——阿里3月27日场笔试第一题
  15. hexo+next主题优化之加入网易云音乐、网易云跟帖、炫酷动态背景
  16. LPC2132驱动240X128的液晶
  17. 如何强制关闭mac后台程序
  18. 巴比特观察丨CryptoPunks再次爆火,幕后推手找到了!
  19. 【呕心总结!】Ubuntu安装Basilisk流体仿真软件
  20. vue中clearInterval()清除定时器报timeout.close is not a function错误?

热门文章

  1. wince5.0 2440 BSP之摄像头驱动分析
  2. 290. 单词规律。
  3. 作为安卓开发者必备的小软件(全是干货)
  4. Android各种好看吐司设计
  5. python中if判断语句的用法_Python if判断语句的用法详细介绍
  6. 网易云课堂数据分析师教程分享
  7. 为赋新词强说愁之五(兼职生活二)
  8. iOS 小技巧之单个 ViewController 旋转
  9. 虚拟机中安装Linux操作系统
  10. 美女体验小米无人机4K版:直接解锁新手模式