Redis 数据类型及命令操作

来源:互联网 发布:信用研究员 知乎 编辑:程序博客网 时间:2024/05/03 21:30

Redis 中支持五种数据类型

(1).String:字符串,类似与Java中的String类型,但是Redis中的String类型可以存放任意类型的数据,比如:String、Integer、Float、二进制等。

(2).List:列表,Redis中的列表就是简单的字符串列表,按照插入顺序排序。

(3).Hash:哈希存储,是一个键值对集合,哈希适用于存储对象。

(4).Set:无序集合,无序不重复,通过HashTable实现。

(5).ZSet:有序集合,和Set一样不允许有重复数据,不同的是每个元素都会关联一个double类型的分数,Redis正是通过分数来为集合中的成员从小到大进行排序,ZSet中的成员是唯一的,但分数(score)却可以重复。

下面会对每种数据类型以及对应的命令进行介绍,如果不清楚该命令如何使用及作用,可以使用help命令来查看,比如查看set命令的帮助

127.0.0.1:6379> help set  SET key value [EX seconds] [PX milliseconds] [NX|XX]  summary: Set the string value of a key  since: 1.0.0  group: string

Redis 有一个命令COMMAND,用于返回所有的Redis命令的详细信息,以数组形式展示,比如以havls 命令为例

 33) 1) "hvals"     2) (integer) 2     3) 1) readonly        2) sort_for_script     4) (integer) 1     5) (integer) 1     6) (integer) 1

Redis 命令参考:http://redisdoc.com/

一、Redis String 字符串


Redis String 常用命令

操作类型 常用命令 基础操作 set、get、del、getrange、getset、setex、setnx、psetex、setrange、strlen、append 整数型、浮点型运算 incr、decr、incrby、decrby、incrbyfloat 批量操作 mset、mget、msetnx 二进制操作 setbit、getbit

1.基础操作

1.set 命令

set 命令用于设置给定 key 的值。如果 key 已经存储其他值, SET 就覆写旧值,且无视类型。操作成功后返回OK

语法:

set key_name value

示例:

127.0.0.1:6379> set name "zhangsan"OK

2.get 命令

get 命令用于获取指定 key 的值。如果 key 不存在,返回 nil 。如果 key 不是字符串类型,那么返回一个错误。

语法:

get key_name

示例:

127.0.0.1:6379> get name"zhangsan"

3.del 命令

删除指定的key
语法:

del key_name

示例:

127.0.0.1:6379> del name(integer) 1127.0.0.1:6379> get name(nil)

4.getrange 命令

getrange 命令用于获取key对应value值中字符串的子字符串。字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。

语法:

getrange key_name start end

示例:

127.0.0.1:6379> set selfintro "My name is Tom."OK127.0.0.1:6379> get selfintro"My name is Tom."127.0.0.1:6379> getrange selfintro 0 1"My"127.0.0.1:6379> getrange selfintro 3 6"name"

5.getset 命令

getset命令用于设置指定 key 的值,并返回 key 旧的值,如果key不存在,返回nil

语法:

getset key_name value

示例:

127.0.0.1:6379> set address ShangHaiOK127.0.0.1:6379> get address"ShangHai"127.0.0.1:6379> getset address Beijing"ShangHai"

6.setex 命令

setex 命令用于为指定的key设置值及过期时间,如果key已经存在,则setex命令将会替换旧的值

语法:

setex key_name seconds value

示例:

127.0.0.1:6379> setex phone 10 18510287637OK127.0.0.1:6379> ttl phone(integer) 6127.0.0.1:6379> get phone"18510287637"127.0.0.1:6379> get phone(nil)

7.setnx 命令

setnx(set if not exists) 命令在指定的 key 不存在时,为 key 设置指定的值。设置成功,返回 1 。 设置失败,返回 0

语法:

setnx key_name value

示例:

127.0.0.1:6379> keys *1) "address"2) "selfintro"127.0.0.1:6379> get address"Beijing"127.0.0.1:6379> setnx address Hebei(integer) 0127.0.0.1:6379> get address # 如果key已经存在,则setnx不会任何操作"Beijing"127.0.0.1:6379> setnx name zhangsan(integer) 1127.0.0.1:6379> get name"zhangsan"

8.psetex 命令

psetex 命令以毫秒为单位设置 key 的生存时间
语法:

psetex key_name milliseconds value

示例:

127.0.0.1:6379> psetex key1 1000 value1OK127.0.0.1:6379> pttl key1(integer) -2127.0.0.1:6379> get key1(nil)

9.setrange 命令

setrange 命令用指定的字符串覆盖给定key所存储的字符串值,覆盖的位置从偏移量offset开始,返回被修改后的字符串长度

语法:

setrange key_name offset value

示例:

127.0.0.1:6379> set hello "hello world"OK127.0.0.1:6379> get hello"hello world"127.0.0.1:6379> setrange hello 6 "redis"(integer) 11127.0.0.1:6379> get hello"hello redis"

10.strlen 命令

strlen 命令用于获取指定key所存储字符串的长度

语法:

strlen key_name

示例:

127.0.0.1:6379> strlen hello(integer) 11

11.append 命令

append 命令用于为指定的 key 追加值
如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。
如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样

语法:

append key_name value

示例:

# key不存在127.0.0.1:6379> get key1(nil)127.0.0.1:6379> append key1 value1(integer) 6127.0.0.1:6379> get key1"value1"# key 存在127.0.0.1:6379> get address"Beijing"127.0.0.1:6379> append address " HaiDianQu"(integer) 17127.0.0.1:6379> get address"Beijing HaiDianQu"

2.整数型、浮点型运算

1.incr 命令

用于对int类型的数值进行自增操作,如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作

语法:

incr key_name

示例:

127.0.0.1:6379> get age"18"127.0.0.1:6379> incr age(integer) 19127.0.0.1:6379> get age"19"

2.decr 命令

用于对int类型的数值进行减1操作,如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作

语法:

decr key_name

示例:

127.0.0.1:6379> get age"19"127.0.0.1:6379> decr age(integer) 18127.0.0.1:6379> get age"18"

3.incrby 命令

incrby 命令将 key 中储存的数字加上指定的增量值。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令

语法:

incrby key_name increment

示例:

127.0.0.1:6379> get age"18"127.0.0.1:6379> incrby age 2(integer) 20127.0.0.1:6379> get age"20"

4.decrby 命令

decrby 命令将 key 所储存的值减去指定的减量值。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECRBY 操作

语法:

decrby key_name increment

示例:

127.0.0.1:6379> get age"20"127.0.0.1:6379> decrby age 2(integer) 18127.0.0.1:6379> get age"18"

5.incrbyfloat 命令

incrbyfloat 命令为 key 中所储存的值加上指定的浮点数增量值。
如果 key 不存在,那么 INCRBYFLOAT 会先将 key 的值设为 0 ,再执行加法操作

语法:

incrbyfloat key_name increment

示例:

127.0.0.1:6379> set num 3.14OK127.0.0.1:6379> get num"3.14"127.0.0.1:6379> incrbyfloat num 1.56"4.7"127.0.0.1:6379> get num"4.7"

3.批量操作

1.mset 命令

Mset 命令用于同时设置一个或多个 key-value 对

语法:

mset key value [key value ...]

示例:

127.0.0.1:6379> mset name "zhangsan" age 18 address "BeiJing"OK

2.mget 命令

mget 命令返回所有(一个或多个)给定 key 的值。 如果给定的 key 中某个 key 不存在,则这个 key 返回特殊值 nil

语法:

mget key [key ...]

示例:

127.0.0.1:6379> mget name age address1) "zhangsan"2) "18"3) "BeiJing"

3.msetnx 命令

msetnx命令用于所有给定 key 都不存在时,同时设置一个或多个 key-value 对。
当所有 key 都成功设置,返回 1 。 如果所有给定 key 都设置失败(至少有一个 key 已经存在),那么返回 0 。
语法:

msetnx key value [key value ...]

示例:

# 对不存在的key进行msetnx127.0.0.1:6379> msetnx rmdbs "mysql" nosql "redis"(integer) 1127.0.0.1:6379> mget rmdbs nosql1) "mysql"2) "redis"# 对存在key进行msetnx,键为nosql的key存在# language 没有被设置,nosql对应的value值也没有被修改127.0.0.1:6379> msetnx language "java" nosql "mongodb"(integer) 0127.0.0.1:6379> mget language nosql 1) (nil)2) "redis"

4.二进制操作

1.setbit 命令

setbit 命令用于对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。

语法:

setbit key offset value

示例:

127.0.0.1:6379> setbit bit 10086 1(integer) 0

2.getbit 命令

getbit 命令用于对 key 所储存的字符串值,获取指定偏移量上的位(bit)。
当偏移量 OFFSET 比字符串值的长度大,或者 key 不存在时,返回 0

语法:

getbit key offset

示例:

127.0.0.1:6379> getbit bit 10086(integer) 1

二、Redis List 列表


Redis List 常用命令

操作类型 常用命令 插入操作 lpush、rpush、linsert、lpushx、rpushx 弹出、删除操作 lpop、rpop、lrem、blpop、brpop、brpoplpush、ltrim 修改操作 lset 查询操作 lrange、llen、lindex

1.插入操作

1.lpush 命令

将一个或多个值插入到列表头部,列表不存在就创建

语法:

lpush key value [value ...]

示例:

127.0.0.1:6379> lpush dblist "mysql" "oracle" "sqlserver"(integer) 3127.0.0.1:6379> lrange dblist 0 -11) "sqlserver"2) "oracle"3) "mysql"

2.rpush 命令

用于将一个或多个值插入到列表的尾部(最右边),列表不存在就创建

语法:

rpush key value [value ...]

示例:

127.0.0.1:6379> rpush dblist "redis" "mongodb"(integer) 5127.0.0.1:6379> lrange dblist 0 -11) "sqlserver"2) "oracle"3) "mysql"4) "redis"5) "mongodb"

3.linsert 命令

用于在列表的元素前或者后插入元素
如果命令执行成功,返回插入操作完成之后,列表的长度。 如果没有找到指定元素 ,返回 -1 。 如果 key 不存在或为空列表,返回 0

语法:

linsert key BEFORE|AFTER pivot value

示例:

127.0.0.1:6379> lrange dblist 0 -11) "sqlserver"2) "oracle"3) "mysql"4) "redis"5) "mongodb"127.0.0.1:6379> linsert dblist before "redis" "db2"(integer) 6127.0.0.1:6379> lrange dblist 0 -11) "sqlserver"2) "oracle"3) "mysql"4) "db2"5) "redis"6) "mongodb"

4.lpushx 命令

将一个或多个值插入到已存在的列表头部,列表不存在时操作无效,返回插入完成后列表的长度

语法:

lpushx key_name value

示例:

127.0.0.1:6379> lpush list1 a b(integer) 2127.0.0.1:6379> lrange list1 0 -11) "b"2) "a"127.0.0.1:6379> lpushx list1 c(integer) 3127.0.0.1:6379> lrange list1 0 -11) "c"2) "b"3) "a"127.0.0.1:6379> lpushx list2 a      # list2 不存在,操作不成功(integer) 0

5.rpushx 命令

用于将一个或多个值插入到已存在的列表尾部(最右边)。如果列表不存在,操作无效

语法:

rpush key_name value

示例:

127.0.0.1:6379> rpush list2 a b(integer) 2127.0.0.1:6379> lrange list2 0 -11) "a"2) "b"127.0.0.1:6379> rpushx list2 c(integer) 3127.0.0.1:6379> lrange list2 0 -11) "a"2) "b"3) "c"127.0.0.1:6379> rpushx list3 d  # list3 不存在,操作不成功(integer) 0

2.弹出、删除操作

1.lpop 命令

用于移除并返回列表的第一个元素

语法:

lpop key_name

示例:

127.0.0.1:6379> lrange list1 0 -11) "c"2) "b"3) "a"127.0.0.1:6379> lpop list1"c"127.0.0.1:6379> lrange list1 0 -11) "b"2) "a"

2.rpop 命令

用于移除并返回列表的最后一个元素

语法:

rpop key_name

示例:

127.0.0.1:6379> lrange list2 0 -11) "a"2) "b"3) "c"127.0.0.1:6379> rpop list2"c"127.0.0.1:6379> lrange list2 0 -11) "a"2) "b"

3.lrem 命令

根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素,返回移除元素的数量,列表不存在返回0
COUNT 的值可以是以下几种:
(1).count > 0 : 从表头开始向表尾搜索,移除与VALUE相等的元素,数量为COUNT
(2).count < 0 : 从表尾开始向表头搜索,移除与VALUE相等的元素,数量为COUNT的绝对值
(3).count = 0 : 移除表中所有与VALUE相等的值

语法:

lrem key count value

示例:

127.0.0.1:6379> lrange dblist 0 -11) "db2"2) "sqlserver"3) "oracle"4) "mysql"5) "db2"6) "redis"7) "mongodb"8) "mysql"127.0.0.1:6379> lrem dblist 1 mysql(integer) 1127.0.0.1:6379> lrange dblist 0 -11) "db2"2) "sqlserver"3) "oracle"4) "db2"5) "redis"6) "mongodb"7) "mysql"127.0.0.1:6379> lrem dblist 0 db2(integer) 2127.0.0.1:6379> lrange dblist 0 -11) "sqlserver"2) "oracle"3) "redis"4) "mongodb"5) "mysql"

4.blpop 命令

移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值。如果列表不存在数据则返回nil

语法:

blpop key [key ...] timeout

示例:

127.0.0.1:6379> lrange dblist 0 -11) "sqlserver"2) "oracle"3) "redis"4) "mongodb"5) "mysql"127.0.0.1:6379> blpop dblist 51) "dblist"2) "sqlserver"127.0.0.1:6379> blpop mylist 5  (nil)(5.08s)

5.brpop 命令

移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值。如果列表不存在数据则返回nil

语法:

brpop key [key ...] timeout

示例:

127.0.0.1:6379> lrange dblist 0 -11) "oracle"2) "redis"3) "mongodb"4) "mysql"127.0.0.1:6379> brpop dblist 51) "dblist"2) "mysql"127.0.0.1:6379> brpop mylist 5(nil)(5.05s)127.0.0.1:6379> lrange dblist 0 -11) "oracle"2) "redis"3) "mongodb"

6.brpoplpush 命令

从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
如果在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。反之,返回一个含有两个元素的列表,第一个元素是被弹出元素的值,第二个元素是等待时长

语法:

brpoplpush source destination timeout

示例:

127.0.0.1:6379> lrange dblist 0 -11) "oracle"2) "redis"3) "mongodb"127.0.0.1:6379> brpoplpush dblist dblist_bak 5"mongodb"127.0.0.1:6379> lrange dblist 0 -11) "oracle"2) "redis"127.0.0.1:6379> lrange dblist_bak 0 -11) "mongodb"127.0.0.1:6379> brpoplpush mylist mylist_bak 5  # mylist不存在,空列表(nil)(5.04s)

7.ltrim 命令

对一个列表进行修剪(trim),即让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。下标 0 表示列表的第一个元素,1 表示列表的第二个元素,以此类推。 也可以使用负数下标,-1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推

语法:

ltrim key start stop

示例:

127.0.0.1:6379> lrange mylist 0 -11) "a"2) "b"3) "c"4) "d"5) "e"127.0.0.1:6379> ltrim mylist 0 2OK127.0.0.1:6379> lrange mylist 0 -11) "a"2) "b"3) "c"

3.修改操作

1.lset 命令

通过索引来设置元素的值,元素下标从0开始

语法:

lset key index value

示例:

127.0.0.1:6379> lrange mylist 0 -11) "a"2) "b"3) "c"127.0.0.1:6379> lset mylist 1 fOK127.0.0.1:6379> lrange mylist 0 -11) "a"2) "f"3) "c"

4.查询操作

1.lrange 命令

返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个素,1表示列表的第二个元素,以此类推。也可以使用负数下标,以 -1 表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推

语法:

lrange key start stop

示例:

127.0.0.1:6379> lrange mylist 0 -11) "a"2) "f"3) "c"127.0.0.1:6379> lrange mylist 0 11) "a"2) "f"

2.llen 命令

用于返回列表的长度

语法:

llen key_name
127.0.0.1:6379> lrange mylist 0 -11) "a"2) "f"3) "c"127.0.0.1:6379> llen mylist(integer) 3

3.lindex 命令

通过索引获取列表中的元素。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2表示列表的倒数第二个元素,以此类推

语法:

lindex key_name index

示例:

127.0.0.1:6379> lrange dblist 0 -11) "oracle"2) "redis"127.0.0.1:6379> lindex dblist 0"oracle"127.0.0.1:6379> lindex dblist -1"redis"

三、Redis Set 无序集合


Redis Set 常用命令

操作类型 常用命令 插入操作 sadd 弹出、删除操作 spop、srem 集合操作 sdiff、sinter、sunion、sdiffstore、sinterstore、sunionstore、sismember、smove、srandmember 查询操作 smembers、scard

1.插入操作

1.sadd 命令

将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略,返回被添加到集合中的新元素的数量,不包括被忽略的元素

语法:

sadd key_name member [member ...]

示例:

127.0.0.1:6379> sadd myset "peach" "pear" "banana"(integer) 3127.0.0.1:6379> sadd myset "banana"(integer) 0127.0.0.1:6379> smembers myset1) "pear"2) "banana"3) "peach"

2.弹出、删除操作

1.spop 命令

移除并返回集合中的一个随机元素,返回被移除的随机元素。 当集合不存在或是空集时,返回 nil

语法:

spop key_name [count]

示例:

127.0.0.1:6379> smembers myset1) "pear"2) "banana"3) "peach"127.0.0.1:6379> spop myset"peach"127.0.0.1:6379> spop myset"banana"127.0.0.1:6379> smembers myset1) "pear"

2.srem 命令

移除集合中的一个或多个成员元素,不存在的成员元素会被忽略,返回被成功移除的元素的数量,不包括被忽略的元素(在 Redis 2.4 版本以前, SREM 只接受单个成员值)

语法:

srem key_name member [member ...]

示例:

127.0.0.1:6379> smembers myset1) "pear"2) "banana"3) "peach"127.0.0.1:6379> srem myset pear(integer) 1127.0.0.1:6379> smembers myset1) "banana"2) "peach"127.0.0.1:6379> srem myset banana peach(integer) 2127.0.0.1:6379> smembers myset(empty list or set)

3.集合操作

1.sdiff 命令

返回给定集合之间的差集

语法:

sdiff key [key ...]

示例:

127.0.0.1:6379> sadd word1 "hello" "programmer" "world"(integer) 3127.0.0.1:6379> sadd word2 "teacher" "student" "hello"(integer) 3127.0.0.1:6379> sdiff word1 word21) "world"2) "programmer"127.0.0.1:6379> sdiff word2 word11) "teacher"2) "student"

2.sinter 命令

返回给定所有给定集合的交集

语法:

sinter key [key ...]

示例:

127.0.0.1:6379> smembers word11) "hello"2) "world"3) "programmer"127.0.0.1:6379> smembers word21) "hello"2) "student"3) "teacher"127.0.0.1:6379> sinter word1 word21) "hello"

3.sunion 命令

返回给定集合的并集

语法:

sunion key [key ...]

示例:

127.0.0.1:6379> smembers word11) "hello"2) "world"3) "programmer"127.0.0.1:6379> smembers word21) "hello"2) "student"3) "teacher"127.0.0.1:6379> sunion word1 word21) "student"2) "hello"3) "world"4) "programmer"5) "teacher"

4.sdiffstore 命令

将给定集合之间的差集存储在指定的集合中。如果指定的集合 key 已存在,则会被覆盖。返回集合中元素的数量

语法:

sdiffstore destination key [key ...]

示例:

127.0.0.1:6379> smembers word11) "hello"2) "world"3) "programmer"127.0.0.1:6379> smembers word21) "hello"2) "student"3) "teacher"127.0.0.1:6379> sdiffstore word3 word1 word2(integer) 2127.0.0.1:6379> smembers word31) "world"2) "programmer"

5.sinterstore 命令

将给定集合之间的交集存储在指定的集合中。如果指定的集合已经存在,则将其覆盖,返回集合中元素的数量

语法:

sinterstore destination key [key ...]

示例:

127.0.0.1:6379> smembers word11) "hello"2) "world"3) "programmer"127.0.0.1:6379> smembers word21) "hello"2) "student"3) "teacher"127.0.0.1:6379> sinterstore word4 word1 word2(integer) 1127.0.0.1:6379> smembers word41) "hello"

6.sunionstore 命令

将给定集合的并集存储在指定的集合 destination 中。如果 destination 已经存在,则将其覆盖

语法:

sunionstore destination key [key ...]

示例:

127.0.0.1:6379> smembers word11) "hello"2) "world"3) "programmer"127.0.0.1:6379> smembers word21) "hello"2) "student"3) "teacher"127.0.0.1:6379> sunionstore word5 word1 word2(integer) 5127.0.0.1:6379> smembers word51) "student"2) "hello"3) "world"4) "programmer"5) "teacher"

7.sismember 命令

判断某个元素是否是集合中的成员

语法:

sismember key_name member

示例:

127.0.0.1:6379> smembers myset1) "pear"2) "banana"3) "peach"127.0.0.1:6379> sismember myset pear(integer) 1127.0.0.1:6379> sismember myset apple(integer) 0

8.smove 命令

将指定成员 member 元素从 source 集合移动到 destination 集合。
SMOVE 是原子性操作。如果 source 集合不存在或不包含指定的 member 元素,则 SMOVE 命令不执行任何操作,仅返回 0。

否则,member 元素从 source 集合中被移除,并添加到 destination 集合中去。当 destination 集合已经包含 member 元素时, SMOVE 命令只是简单地将 source 集合中的 member 元素删除。

语法:

smove source destination member

示例:

127.0.0.1:6379> smembers myset1) "pear"2) "banana"3) "peach"127.0.0.1:6379> smove myset myset_bak peach(integer) 1127.0.0.1:6379> smembers myset1) "pear"2) "banana"127.0.0.1:6379> smembers myset_bak1) "peach"

9.srandmember 命令

返回集合中的一个随机元素
从 Redis 2.6 版本开始, srandmember 命令接受可选的 count 参数
● 如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合。

● 如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。

语法:

srandmember key_name [count]

示例:

127.0.0.1:6379> smembers myset1) "pear"2) "peach"3) "banana"127.0.0.1:6379> srandmember myset"banana"127.0.0.1:6379> srandmember myset"pear"127.0.0.1:6379> srandmember myset 11) "peach"127.0.0.1:6379> srandmember myset 21) "banana"2) "peach"

4.查询操作

1.smembers 命令

返回集合中的所有的成员

语法:

smembers key_name

示例:

127.0.0.1:6379> smembers myset1) "pear"2) "peach"3) "banana"

2.scard 命令

返回集合中元素的数量,当集合 key 不存在时,返回 0

语法:

scard key_name

示例:

127.0.0.1:6379> smembers myset1) "pear"2) "peach"3) "banana"127.0.0.1:6379> scard myset(integer) 3

四、Redis Hash 哈希


Redis Hash 常用命令

操作类型 常用命令 插入操作 hset、hmset、hsetnx 删除操作 hdel 查询操作 hgetall、hget、hmget、hkeys、hvals、hexists、hlen 整数型、浮点型操作 hincrby、hincrbyfloat

1.插入操作

1.hset 命令

用于为哈希表中的字段赋值
如果字段是哈希表中的一个新建字段,并且值设置成功,返回 1 。 如果哈希表中域字段已经存在且旧值已被新值覆盖,返回 0

语法:

hset key field value

示例:

127.0.0.1:6379> hset user name "zhangsan"(integer) 1127.0.0.1:6379> hset user age 18(integer) 1127.0.0.1:6379> hset user name "zhangsan"(integer) 0127.0.0.1:6379> hgetall user1) "name"2) "zhangsan"3) "age"4) "18"

2.hmset 命令

用于同时将多个 field-value (字段-值)对设置到哈希表中。此命令会覆盖哈希表中已存在的字段。
如果哈希表不存在,会创建一个空哈希表,并执行 HMSET 操作

语法:

hmset key field value [field value ...]

示例:

127.0.0.1:6379> hmset student name "lisi" age 18 sex 1OK127.0.0.1:6379> hgetall student1) "name"2) "lisi"3) "age"4) "18"5) "sex"6) "1"

3.hsetnx 命令

用于为哈希表中不存在的的字段赋值
设置成功,返回 1 。 如果给定字段已经存在且没有操作被执行,返回 0

语法:

hsetnx key field value

示例:

127.0.0.1:6379> hgetall user1) "name"2) "zhangsan"3) "age"4) "18"127.0.0.1:6379> hsetnx user address "ShangHai"(integer) 1127.0.0.1:6379> hgetall user1) "name"2) "zhangsan"3) "age"4) "18"5) "address"6) "ShangHai"

2.删除操作

1.hdel 命令

用于删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略

语法:

hdel key field [field ...]

示例:

127.0.0.1:6379> hgetall user1) "name"2) "zhangsan"3) "age"4) "18"5) "address"6) "ShangHai"127.0.0.1:6379> hdel user address(integer) 1127.0.0.1:6379> hgetall user1) "name"2) "zhangsan"3) "age"4) "18"

3.查询操作

1.hgetall 命令

用于返回哈希表中所有的字段和值

语法:

hgetall key_name

示例:

127.0.0.1:6379> hgetall user1) "name"2) "zhangsan"3) "age"4) "18"

2.hget 命令

用于返回哈希表中指定字段的值。
返回给定字段的值。如果给定的字段或 key 不存在时,返回 nil

语法:

hget key field

示例:

127.0.0.1:6379> hgetall user1) "name"2) "zhangsan"3) "age"4) "18"127.0.0.1:6379> hget user name"zhangsan"

3.hmget 命令

用于返回哈希表中,一个或多个给定字段的值。
如果指定的字段不存在于哈希表,那么返回一个 nil 值

语法:

hmget key field [field ...]

示例:

127.0.0.1:6379> hmget user name age1) "zhangsan"2) "18"127.0.0.1:6379> hmget user name address1) "zhangsan"2) (nil)127.0.0.1:6379> hmget user name1) "zhangsan"

4.hkeys 命令

用于获取哈希表中的所有字段名

语法:

hkeys key_name

示例:

127.0.0.1:6379> hgetall user1) "name"2) "zhangsan"3) "age"4) "18"127.0.0.1:6379> hkeys user1) "name"2) "age"

5.hvals 命令

返回哈希表所有字段的值

语法:

hvals key_name

示例:

127.0.0.1:6379> hgetall user1) "name"2) "zhangsan"3) "age"4) "18"127.0.0.1:6379> hvals user1) "zhangsan"2) "18"

6.hexists 命令

用于查看哈希表的指定字段是否存在
如果哈希表含有给定字段,返回 1 。 如果哈希表不含有给定字段,或 key 不存在,返回 0

语法:

hexists key field

示例:

127.0.0.1:6379> hgetall user1) "name"2) "zhangsan"3) "age"4) "18"127.0.0.1:6379> hexists user name(integer) 1127.0.0.1:6379> hexists user address(integer) 0

7.hlen 命令

用于获取哈希表中字段的数量

语法:

hlen key_name

示例:

127.0.0.1:6379> hgetall user1) "name"2) "zhangsan"3) "age"4) "18"127.0.0.1:6379> hlen user(integer) 2

4.整数型、浮点型操作

1.hincrby 命令

用于为哈希表中的字段值加上指定增量值(可以为负数),
如果哈希表的 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令,如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0

语法:

hincrby key field increment

示例:

127.0.0.1:6379> hgetall user1) "name"2) "zhangsan"3) "age"4) "18"127.0.0.1:6379> hincrby user age 1(integer) 19127.0.0.1:6379> hget user age"19"127.0.0.1:6379> hincrby user age -2(integer) 17127.0.0.1:6379> hget user age"17"

2.hincrbyfloat 命令

用于为哈希表中的字段值加上指定浮点数增量值,可以为负数

语法:

hincrbyfloat key field increment

示例:

127.0.0.1:6379> hgetall user1) "name"2) "zhangsan"3) "age"4) "17"127.0.0.1:6379> hincrbyfloat user age 0.5"17.5"127.0.0.1:6379> hincrbyfloat user age -0.5"17"

五、Redis Sorted Set 有序集合


Redis Sorted Set 常用命令

操作类型 常用命令 插入操作 zadd 删除操作 zrem、zremrangebyscore、zremrangebylex、zremrangebyrank 查询操作 zrangebyscore、zcard、zcount、zlexcount、zrangebylex、zrank、zrevrange、zrevrangebyscore、zrevrank、zscore 集合操作 zinterstore、zunionstore、zincrby

1.插入操作

1.zadd 命令

将一个或多个成员元素及其分数值加入到有序集当中
如果某个 member 已经是有序集的成员,那么更新这个 member 的 score 值,并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。score 值可以是整数值或双精度浮点数。

如果 key 不存在,则创建一个空的有序集并执行 ZADD 操作。当 key 存在但不是有序集类型时,返回一个错误。

执行完成后返回被成功添加的新成员的数量,不包括那些被更新的、已经存在的成员

语法:

zadd key score value [score value ...]

示例:

127.0.0.1:6379> zadd myzset 1 "java" 1 "python"(integer) 2127.0.0.1:6379> zadd myzset 2 "php" 3 "javascript"(integer) 2127.0.0.1:6379> zrange myzset 0 -1 withscores1) "java"2) "1"3) "python"4) "1"5) "php"6) "2"7) "javascript"8) "3"

2.删除操作

1.zrem 命令

移除有序集中的一个或多个成员,不存在的成员将被忽略
返回被成功移除的成员的数量,不包括被忽略的成员

语法:

zrem key member [member ...]

示例:

127.0.0.1:6379> zadd zset 1 "mysql" 2 "oracle" 3 "sqlserver" 4 "redis" 5 "mongodb"(integer) 5127.0.0.1:6379> zrange zset 0 -1 withscores 1) "mysql" 2) "1" 3) "oracle" 4) "2" 5) "sqlserver" 6) "3" 7) "redis" 8) "4" 9) "mongodb"10) "5"# 移除单个元素127.0.0.1:6379> zrem zset mysql(integer) 1127.0.0.1:6379> zrange zset 0 -11) "oracle"2) "sqlserver"3) "redis"4) "mongodb"# 移除多个元素127.0.0.1:6379> zrem zset redis mongodb(integer) 2127.0.0.1:6379> zrange zset 0 -11) "oracle"2) "sqlserver"# 移除不存在的元素127.0.0.1:6379> zrem zset db2(integer) 0127.0.0.1:6379> zrange zset 0 -11) "oracle"2) "sqlserver"

2.zremrangebyscore 命令

移除有序集中,指定分数(score)区间内的所有成员,返回被移除成员的数量

语法:

zremrangebyscore key min max

示例:

127.0.0.1:6379> zrange zset 0 -1 withscores 1) "mysql" 2) "1" 3) "oracle" 4) "2" 5) "sqlserver" 6) "3" 7) "redis" 8) "4" 9) "mongodb"10) "5"127.0.0.1:6379> zremrangebyscore zset 2 3(integer) 2127.0.0.1:6379> zrange zset 0 -1 withscores1) "mysql"2) "1"3) "redis"4) "4"5) "mongodb"6) "5"

3.zremrangebylex 命令

移除有序集合中给定的字典区间的所有成员,排序方式是根据名称按字典由低到高排序。 返回被成功移除的成员的数量,不包括被忽略的成员

min:字典中排序位置较小的成员,必须以”[“开头,或者以”(“开头,可使用”-“代替
max:字典中排序位置较大的成员,必须以”[“开头,或者以”(“开头,可使用”+”代替
可以使用 “-” 和 “+” 表示最小值和最大值

注意:待删除的有序集合中,分数最好相同,否则删除结果会不正常

语法:

zremrangebylex key min max

示例:

127.0.0.1:6379> zadd zset 1 a 1 b 1 c 1 d 1 f 1 aa 1 cc(integer) 7127.0.0.1:6379> zrange zset 0 -11) "a"2) "aa"3) "b"4) "c"5) "cc"6) "d"7) "f"删除所有元素127.0.0.1:6379> zremrangebylex zset - +(integer) 7127.0.0.1:6379> zrange zset 0 -1(empty list or set)删除某个元素(删除 d)127.0.0.1:6379> zremrangebylex zset [d (f(integer) 1127.0.0.1:6379> zrange zset 0 -1 1) "a"2) "aa"3) "b"4) "c"5) "cc"6) "f"删除成员之间的元素,包含”max” 和 “min”成员(使用[,如果不包含使用()127.0.0.1:6379> zremrangebylex zset [b [d(integer) 2127.0.0.1:6379> zrange zset 0 -11) "a"2) "aa"3) "f"

4.zremrangebyrank 命令

移除有序集中,指定排名(rank)区间内的所有成员,返回被移除成员的数量

语法:zremrangebyrank key start stop
示例:
127.0.0.1:6379> zadd salary 2000 jack 5000 tom 3500 peter
(integer) 3
127.0.0.1:6379> zrange salary 0 -1
1) “jack”
2) “peter”
3) “tom”
127.0.0.1:6379> zremrangebyrank salary 0 1
(integer) 2
127.0.0.1:6379> zrange salary 0 -1
1) “tom”

3.查询操作

1.zrange 命令

返回有序集中,指定区间内的成员
成员的位置按分数值递增(从小到大)来排序,具有相同分数值的成员按字典序 (lexicographical order )来排列。

下标参数 start 和 stop 都以 0 为底,即以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推;也可以使用负数下标,以 -1 表示最后一个成员,-2表示倒数第二个成员,以此类推。

语法:

zrange key start stop [WITHSCORES]

示例:

127.0.0.1:6379> zadd salary 2000 jack 5000 tom 3500 peter(integer) 3127.0.0.1:6379> zrange salary 0 -11) "jack"2) "peter"3) "tom"127.0.0.1:6379> zrange salary 0 -1 withscores1) "jack"2) "2000"3) "peter"4) "3500"5) "tom"6) "5000"

2.zrangebyscore 命令

返回有序集合中指定分数区间的成员列表。有序集成员按分数值递增(从小到大)次序排列,具有相同分数值的成员按字典序来排列。

默认情况下,区间的取值使用闭区间 (小于等于或大于等于),min 和 max 可以是 -inf 和 +inf(表示有序集中的最高分数和最低分数)

语法:

zrangebyscore key min max [WITHSCORES]

示例:

# 查看集合中所有成员127.0.0.1:6379> zrangebyscore salary -inf +inf1) "jack"2) "peter"3) "tom"127.0.0.1:6379> zrangebyscore salary -inf +inf withscores1) "jack"2) "2000"3) "peter"4) "3500"5) "tom"6) "5000"# 查看工资小于等于3500的成员127.0.0.1:6379> zrangebyscore salary -inf 3500 withscores1) "jack"2) "2000"3) "peter"4) "3500"# 查看工资大于等2000,小于5000的工资127.0.0.1:6379> zrangebyscore salary (2000 5000 withscores1) "peter"2) "3500"3) "tom"4) "5000"

3.zcard 命令

用于计算集合中元素的数量
当 key 存在且是有序集类型时,返回有序集的基数。 当 key 不存在时,返回 0

语法:

zcard key_name

示例:

127.0.0.1:6379> zrange salary 0 -11) "jack"2) "peter"3) "tom"127.0.0.1:6379> zcard salary(integer) 3

4.zcount 命令

计算有序集合中指定分数区间的成员数量,分数值在 min 和 max 之间的成员的数量

语法:

zcount key min max

示例:

127.0.0.1:6379> zrange salary 0 -1 withscores1) "jack"2) "2000"3) "peter"4) "3500"5) "tom"6) "5000"127.0.0.1:6379> zcount salary 2000 5000(integer) 3127.0.0.1:6379> zcount salary 2000 (5000(integer) 2

5.zlexcount 命令

计算有序集合中指定字典区间内成员数量
“[“:表示闭区间,指定的值会被包含在范围之内
“(“:表示开区间,指定的值不会被包含在范围之内
“+”:表示正无限
“-“:表示负无限

语法:

zlexcount key min max

示例:

127.0.0.1:6379> zadd zword 1 a 2 b 3 c 4 d 5 e (integer) 5127.0.0.1:6379> zrange zword 0 -11) "a"2) "b"3) "c"4) "d"5) "e"127.0.0.1:6379> zlexcount zword - +(integer) 5127.0.0.1:6379> zlexcount zword (a (d(integer) 2127.0.0.1:6379> zlexcount zword [a [c(integer) 3127.0.0.1:6379> zlexcount zword (a [c(integer) 2

6.zrangebylex 命令

通过字典区间返回有序集合的成员

语法:

zrangebylex key min max

示例:

127.0.0.1:6379> zrange zword 0 -11) "a"2) "b"3) "c"4) "d"5) "e"127.0.0.1:6379> zrangebylex zword - [c1) "a"2) "b"3) "c"127.0.0.1:6379> zrangebylex zword (a +1) "b"2) "c"3) "d"4) "e"127.0.0.1:6379> zrangebylex zword [b (d1) "b"2) "c"

7.zrank 命令

返回有序集中指定成员的排名。按分数值递增(从小到大)顺序排列

如果成员是有序集 key 的成员,返回 member 的排名。 如果成员不是有序集 key 的成员,返回 nil

语法:

zrank key member

示例:

127.0.0.1:6379> zrange salary 0 -1 withscores1) "jack"2) "2000"3) "peter"4) "3500"5) "tom"6) "5000"127.0.0.1:6379> zrank salary tom        # tom 排名为2,最高(integer) 2127.0.0.1:6379> zrank salary peter      # peter 排名为 1(integer) 1

8.zrevrange 命令

返回有序集中指定区间内的成员,成员的位置按分数值递减(从大到小)来排列,与zrange命令

相反(zrange递增),具有相同分数值的成员按字典序的逆序(reverse lexicographical order)排列。

语法:

zrevrange key start stop [WITHSCORES]

示例:

127.0.0.1:6379> zrange salary 0 -1 withscores1) "jack"2) "2000"3) "peter"4) "3500"5) "tom"6) "5000"127.0.0.1:6379> zrevrange salary 0 -1 withscores1) "tom"2) "5000"3) "peter"4) "3500"5) "jack"6) "2000"

9.zrevrangebyscore 命令

返回有序集中指定分数区间内的所有的成员。有序集成员按分数值递减(从大到小)的次序排列,具有相同分数值的成员按字典序的逆序(reverse lexicographical order )排列,与zrangebyscore一样,不同的是zrangebyscore是递增

语法:

zrevrangebyscore key max min [WITHSCORES]

示例:

127.0.0.1:6379> zrangebyscore salary -inf +inf withscores1) "jack"2) "2000"3) "peter"4) "3500"5) "tom"6) "5000"127.0.0.1:6379> zrevrangebyscore salary +inf -inf withscores1) "tom"2) "5000"3) "peter"4) "3500"5) "jack"127.0.0.1:6379> zrevrangebyscore salary 5000 2000  withscores1) "tom"2) "5000"3) "peter"4) "3500"5) "jack"6) "2000"127.0.0.1:6379> zrevrangebyscore salary 5000 (2000  withscores1) "tom"2) "5000"3) "peter"4) "3500"

10.zrevrank 命令

返回有序集中成员的排名,按分数值递减(从大到小)排序,与zrank相反

语法:

zrevrank key member

示例:

127.0.0.1:6379> zrange salary 0 -1 withscores1) "jack"2) "2000"3) "peter"4) "3500"5) "tom"6) "5000"127.0.0.1:6379> zrevrank salary tom # 倒序排列tom排名为0,最高(integer) 0127.0.0.1:6379> zrank salary tom(integer) 2127.0.0.1:6379> zrevrank salary jack    # 倒序排列jack排名为2,最低(integer) 2127.0.0.1:6379> zrank salary jack(integer) 0

11.zscore 命令

返回有序集中,成员的分数值,如果成员元素不是有序集key的成员,或key不存在,返回 nil

语法:

zscore key member

示例:

127.0.0.1:6379> zrange salary 0 -1 withscores1) "jack"2) "2000"3) "peter"4) "3500"5) "tom"6) "5000"127.0.0.1:6379> zscore salary jack"2000"

4.集合操作

1.zinterstore 命令

计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination,默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和

语法:

zinterstore destination numkeys key [key ...]

示例:

# 初始化数据127.0.0.1:6379> zadd tom_score 70 "math" 85 "chinese" 90 "english"(integer) 3127.0.0.1:6379> zrange tom_score 0 -1 withscores1) "math"2) "70"3) "chinese"4) "85"5) "english"6) "90"127.0.0.1:6379> zadd jack_score 70 "math" 85 "chinese" 80 "sports" 95 "english"(integer) 4127.0.0.1:6379> zrange jack_score 0 -11) "math"2) "sports"3) "chinese"4) "english"127.0.0.1:6379> zinterstore inter_score 2 tom_score jack_score(integer) 3127.0.0.1:6379> zrange inter_score 0 -11) "math"2) "chinese"3) "english"

2.zunionstore 命令

计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination 。默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和

语法:

zunionstore destination numkeys key [key ...]

示例:

127.0.0.1:6379> zrange tom_score 0 -1 withscores1) "math"2) "70"3) "chinese"4) "85"5) "english"6) "90"127.0.0.1:6379> zrange jack_score 0 -11) "math"2) "sports"3) "chinese"4) "english"127.0.0.1:6379> zunionstore union_score 2 tom_score jack_score(integer) 4127.0.0.1:6379> zrange union_score 0 -11) "sports"2) "math"3) "chinese"4) "english"

3.zincrby 命令

对有序集合中指定成员的分数加上增量 increment,返回成员的新分数值,以字符串形式表示

语法:

zincrby key increment member

示例:

127.0.0.1:6379> zrange tom_score 0 -1 withscores1) "math"2) "70"3) "chinese"4) "85"5) "english"6) "90"127.0.0.1:6379> zincrby tom_score 10 math"80"127.0.0.1:6379> zrange tom_score 0 -1 withscores1) "math"2) "80"3) "chinese"4) "85"5) "english"6) "90"
原创粉丝点击