本文主要介绍了redis的操作,记录和总结了Redis客户端、服务器、字符串、哈希、列表、发布/订阅、事务等相关概念、原理和操作技巧。有需要的可以参考一下。
本文用实例总结了redis运算。分享给你,供你参考,如下:
相关内容:
虽然有参考文献,背多了也是脑残,但是学习的时候,还是想有一个系统划分知识点的文献。即使不需要我去仔细背,划分知识块后,脑子里的印象也会更清晰,所以才有了这篇博文。
主要是将各种命令划分为不同的功能归属。
redis简介:
客户端连接操作
服务器的操作
字符串操作
哈希运算
列表操作
集合运算
排序集合操作
操作键
发布订阅
事务
参考:w3school
开始时间:2018-03-10 15:36
Redis的介绍:
Redis是非关系数据库,是高性能的键-值数据库,集合值也以键-值对的形式存在。
Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启时可以再次加载使用。
Redis不仅支持简单的键值数据,还提供了list、set、zset、hash等数据结构的存储。
Redis也支持数据备份。
Redis的所有操作都是原子的。
Redis支持五种数据类型:string(字符串)、hash(哈希)、list(列表)、set(集合)和zset(排序
集合:有序集合)。
客户端连接操作:
启动redis客户端连接:
redis-cli [-h host] [-p port] [-a password ]
主机是服务器IP
端口是服务器端口
密码是连接密码。
端口默认为6379。
断开连接: quit
客户端连接测试:
auth
:如果设置了密码,但是-连接时没有使用密码,那么连接完成后可以使用auth password解锁,解锁后才能使用其他Redis命令。echo message
:打印特定消息,并在测试时使用。ping [message]:
使用客户端向Redis服务器发送PING,如果服务器工作正常,将返回一个PONG。通常用于测试与服务器的连接是否仍然有效,或者测量延迟值。如果设置了message,则返回值为message。切换数据库
select index
:切换到指定的数据库。数据库索引号index由一个数值指定,0作为起始索引值。使用默认的数据库编号0。从标识可以看出当前是哪个数据库。:
服务端操作:
数据持久化:
snapshot快照持久化:保存的是所有数据,默认情况下,自动执行快照持久化,保存文件为.rbd如何打开快照录制功能:
默认情况下打开
如何使用:
使用save:SAVE命令执行同步保存操作,将当前Redis实例的所有数据快照以RDB文件的形式保存到硬盘上。一般来说,生产环境中很少执行保存操作,因为它会阻塞所有客户端,保存数据库的任务通常由BGSAVE命令异步执行。但是,如果负责保存数据的后台子流程不幸出现问题,保存可以作为保存数据的最后手段。
使用bgsave:与save不同,它将在后台备份,不会阻止所有当前客户端。
如何恢复数据:会有一个?rbd文件(config get dbfilename可以看出是哪个文件)保存的时候。当需要恢复时,关闭redis服务,复制。rbd重新覆盖它,并重新启动redis服务。
AOF日志记录型持久化:保存的是操作日志如何开启aof录制功能:配置设置appendonly“是”
使用方法:当aof功能开启时,执行的命令会被自动记录下来。
如何恢复:与rdb恢复数据的方式相同,将有一个。aof文件(config get appendfilename可以判断是哪个文件;如果没有,查看配置文件)。保存后,将此文件复制到外部副本。需要恢复时,关闭redis服务,复制。请返回并覆盖它,然后重新启动redis服务。
如果rdb文件和aof文件都存在,最好使用“AOF”来恢复数据[应谨慎使用,可能会因此出现“库删除”
当rdb和AOF恢复时,RDB恢复得很快。
客户端管理:
CLIENT:CLIENT KILL ip:port[用IP:port地址关闭客户端。】
set CLIENT name:CLIENT set name connection-name[为当前连接指定一个名称。】
get CLIENT name:CLIENT GETNAME[返回由CLIENT SETNAME命令为连接设置的名称。默认情况下,创建的连接没有名称]
获取客户端连接信息:CLIENT LIST[返回连接到服务器的所有客户端的信息和统计信息。】
服务端配置管理:
获取配置:config getconfig _ setting _ name[config _ setting _ name是配置项目名称]
设置新配置:config set config _ setting _ name new _ config _ value[new _ config _ value是新的配置值]
数据管理:
清除所有数据:刷新全部
清除当前数据库中的所有键:flushdb。
其他:
get time:time[返回当前服务器时间。第一个字符串是当前时间(以UNIX时间戳格式表示),而第二个字符串是当前一秒钟内经过的微秒数。】
String操作:
String的意思是字符串,在redis中的意思是“将变量的值设置为字符串”
设置string:
set key value [EX seconds] [PX milliseconds] [NX|
XX]
:设置键-值对,键是否存在,存在则覆盖。Key:是设置的键名。
Value:对应键的值,默认为字符串,带或不带双引号。
例如:将密钥的到期时间设置为秒。
Px:不同于ex,代表故障多少毫秒。
Nx:仅在key不存在时设置key【使用setnx设置值时,默认有nx】
Xx:仅当密钥已经存在时才设置密钥。
setnx key value :
仅当键不存在时设置键-值对setex key seconds value:
将键值对的过期时间设置为秒秒。setbit key offset value:
将对应二进制的偏移位设置为值[每个字符占用8位,从高位到低位为0-7]setrange key offset value :
用value参数覆盖给定键存储的字符串值,从offset offset开始。mset key value [key value ...]:
同时设置一个或多个键值对。msetnx key value [key value ...]:
当所有键都不存在时,同时设置一个或多个键值对。只要给定的键已经存在,所有的设置操作都将被取消(原子性)。append key value:
如果关键字已经存在并且是一个字符串,append命令将值追加到关键字原始值的末尾。如果键不存在,append只是将给定的键设置为value,就像执行SET key value一样。如果密钥不是字符串,将会报告错误。获取string:
get key :
获取相应键的键值mget key [key ...]:
获取多个键的值getrange key start end
:返回key中字符串值的子串,字符串的截取范围为[start,end]getset key newvalue:
返回key的值并将key的值设置为newvalue。getbit key offset:
获取字符串表示的二进制位的偏移值。strlen key :
获取对应的密钥字符串的长度bitcount key [start end]:
对应于相应字符串的二进制数1。其他操作:
decr key:
当字符串为数字时,将键中存储的数值减一,其余部分报错。如果该键不存在,则首先将该键的值初始化为0,然后执行decr操作。decrby key decrement:
与decr键的不同之处在于减少量被指定为减量。如果该键不存在,则在执行decrby操作之前,该键的值将被初始化为0。incr key
:当字符串是一个数字时,将存储在键中的数字值增加1,当其余的时候报告一个错误。如果该项不存在,在执行incr操作之前,该项的值将被初始化为0。incrby key increment
:当字符串为数字时,将增量increment加到key存储的值上。如果该项不存在,该项的值将首先初始化为0,然后执行incrby命令。incrbyfloat key increment:
与incrby键增量不同,增量值是一个浮点数。bitop operation destkey key [key ...]:
对一个或多个包含二进制位、十六进制字符串或普通字符串密钥的字符串执行位操作,并将结果保存到destkey。运算可以是与、或、非、异或(异或)
当bitop处理不同长度的字符串时,较短字符串的缺失部分将被视为0。空键也被视为包含0的字符串序列。
补充:
m前缀的操作是原子性的,当只有一个失败时会报告一个错误。例如,mset设置多个值,如果一个设置失败,将报告错误,所有设置都将失败。
而且redis有数据类型,操作会检测数据类型,除了一些操作可以“覆盖”原变量,忽略原变量类型,其他操作遇到不符合的类型都会报错。
Hash操作:
redis中的Hash相当于key只是一个索引值,指向一个值是字段-值区域的哈希表。
设置hash:
hset key field value:
将哈希表键中字段field的值设置为value。如果该键不存在,则创建一个新的哈希表并执行hset操作。如果域字段已经存在于哈希表中,旧值将被覆盖。hsetnx key field value:
当且仅当字段field不存在时,将哈希表键中的字段field的值设置为value。hmset key field value [field value ...]:
同时将多个字段值对设置到散列表键中。获取hash:
hget key field:
获取哈希表中字段的值,只返回value值hgetall key:
获取哈希表中所有字段的值。在返回值中,奇数作为字段,偶数作为值。hmget key field [field…]:
返回哈希表键中一个或多个给定字段的值,只返回value值。hvals key:
获取哈希表中所有字段的值,并且只返回值hkeys key:
获取哈希表中的所有字段,只返回字段。hscan key cursor [MATCH pattern] [COUNT count]:
用于增量迭代哈希。游标是迭代的开始索引,第一次为0,迭代中第一行的返回值是下一次迭代的索引。如果为0,则迭代结束。
Match pattenrn是模式匹配字段,不是值或键!
Count计算这次迭代的次数。
hlen key:
返回哈希表关键字中域的数量。hexists key field:
检查哈希表关键字中是否存在给定的域字段。其他操作:
hdel key field [field ...]:
删除哈希表键中的一个或多个指定域,不存在的域将被忽略。hincrby key field increment:
如果哈希表中的相应字段是一个数字,则在哈希表关键字中的字段field的值上增加一个增量。如果该键不存在,将创建一个新的哈希表,并执行HINCRBY命令。如果字段field不存在,则在执行命令之前,该字段的值被初始化为0。[注意,增量可以是负数,所以没有hdecr]hincrbyfloat key field increment:
如果哈希表中对应的字段是一个数字,则在哈希表关键字的字段值中添加浮点增量increment。如果该键不存在,将创建一个新的哈希表,并执行HINCRBY命令。如果字段field不存在,则在执行命令之前,该字段的值被初始化为0。[注意,值和增量可以是指数符号,如5.0e3]List操作:
代表key的值是一个包含多个元素的列表。
在列表中,左边是头,右边是尾。
设置list:
lpush key value [value ...] :
在列表键的标题中插入一个或多个值。当插入多个值时,后面插入的值在头中,这意味着值是从左向右按的,最后一个值作为头。rpush key value [value ...] :
在列表键的页脚(最右边)插入一个或多个值。当插入多个值时,最后一个值用作页脚。rpushx key value :
当且仅当键存在并且是列表时,将值插入列表键的页脚,否则不做任何操作。lrange key start stop :
返回列表键中指定区间[开始,停止](这是一个[闭合区间])中的元素。最后一个元素可以用-1来表示。lset key index value :
将列表键下标为index的元素的值设置为value。当index参数超出范围,或者空列表(键不存在)是LSET时,将返回错误。linsert key before|after pivot value :
将值插入列表键,在值pivot之前或之后(注意pivot是一个值)。当列表键中不存在pivot时,不执行任何操作。当该键不存在时,该键被视为空列表,并且不执行任何操作。如果键不是列表类型,则返回错误。获取list:
lpop key :
移除并返回列表键的标题元素rpop key :
移除并返回列表键的尾部元素。blpop :
是LPOP命令的封锁版本。当给定列表中没有要弹出的元素时,BLPOP命令将阻塞连接,直到等待超时或找到可以弹出的元素(可以使用另一个客户端添加元素)。当给定多个key参数时,按照参数key的顺序检查每个列表,弹出第一个非空的列表头元素。brpop :
是RPOP命令的阻止版本。当给定列表中没有可弹出的元素时,连接将被BRPOP命令阻塞,直到等待超时或找到可弹出的元素(可以使用另一个客户端添加元素)。当给定多个key参数时,按照参数key的顺序检查每个列表,弹出第一个非空列表的尾部元素。rpoplpush source destination :
取出source的尾部元素,放入destination的头部。lindex key index :
返回列表键中带有索引的元素。如果键不是列表类型,则返回错误。llen key :
返回列表键的长度。如果该键不存在,则该键被解释为空列表,并返回0。如果键不是列表类型,则返回错误。其他操作:
ltrim key start stop :
修剪一个列表,也就是说在列表中只保留指定区间(闭区间)的元素,不在指定区间的元素全部删除。补充:
m前缀的操作是原子性的,当只有一个失败时会报告一个错误。例如,mset设置多个值,如果一个设置失败,将报告错误,所有设置都将失败。
而且redis有数据类型,操作会检测数据类型,除了一些操作可以“覆盖”原变量,忽略原变量类型,其他操作遇到不符合的类型都会报错。
Set操作:
代表key的值是一个集合,集合中的元素不能重复。
设置set:
sadd key member [member ...] :
向集合键添加一个或多个成员元素,集合中已经存在的成员元素将被忽略。如果键不存在,则创建一个仅包含成员元素作为成员的集合。当键不是集合类型时,将返回错误。获取set:
scard key
:返回集合中元素的个数。spop key
:移除并返回集合中的随机元素。smembers key
:返回集合键中的所有成员。不存在的键被视为空集。srandmember key [count]
:如果执行命令时只提供了key参数,则返回集合中的count个随机元素。如果count为正数且小于集合的基数,该命令将返回包含count个元素的数组,即数组中的元素
不同的元素。如果count大于或等于集合的基数,则返回整个集合。
如果count为负,则该命令返回一个数组,数组中的元素可能重复出现,并且数组的长度
是count的绝对值。
其他操作:
sscan key cursor [MATCH pattern] [COUNT count]
:用于增量迭代设置。游标是迭代的开始索引,第一次为0。迭代中第一行的返回值是下一次迭代的索引。如果为0,则迭代结束。
匹配模式是匹配集合中元素的模式。
Count计算这次迭代的次数。
smove source destination member
:将成员元素从源集合移动到目标集合。如果源集合不存在或不包含指定的成员元素,则SMOVE命令不执行任何操作,只会返回0。否则,成员元素将从源集合中移除,并添加到目标集合中。sdiff key [key ...]:
返回给定集合之间的差集。sdiffstore destination key [key ...]:
返回给定集合之间的差集,并将其存储在目标中。如果目标集合已经存在,它将被覆盖。目的地可以是钥匙本身。sinter key [key ...]:
返回所有给定集合的交集sinter destination key [key ...]:
返回给定集合之间的交集,并将其存储在目标中。如果目标集合已经存在,它将被覆盖。目的地可以是钥匙本身。sismember key member:
判断成员元素是否是集合键的成员。srem key member [member ...]:
从set键中删除一个或多个成员元素,不存在的成员元素将被忽略。当键不是集合类型时,将返回错误。sunion key [key…] :
返回所有给定集合的并集。不存在的键被视为空集。sunionstore destination key [key…]
:返回所有给定集合的并集。不存在的键被视为空集,返回的结果保存到目标集。如果目标已经存在,它将被覆盖。目的地可以是钥匙本身。补充:
Redis有数据类型。操作将检测数据类型,除了一些可以“覆盖”原始变量并忽略原始变量类型的操作。如果遇到不一致的类型,其他操作将报告错误。
Sort Set操作:
排序集代表一个有序集,分数决定元素的顺序。一般都是小分在先。
设置sort set:
zadd key [NX|XX] [CH] [INCR] score member [score member ...]
:将一个或多个成员元素及其分数值添加到有序集键中。Scrore是元素的权重,决定了元素的顺序。
Nx:成员只有在不存在的情况下才添加,已经存在的情况下不会被操作。
Xx:仅当成员已经存在时,才添加该成员。
Ch:修改后的返回值是修改后的成员总数,原始值是新增加的成员总数。
incr:ZADD指定该选项时,成员的操作相当于zincrby命令,可以增加现有成员的分数。
获取sort set:
zrange key start stop [WITHSCORES]
:返回有序集键中指定间隔内的成员。成员位置按分值递增排序(从小到大)。Withscores表示是否同时返回分数。
zrangebyscore key min max [WITHSCORES] [LIMIT offset count]:
返回有序集键中所有得分值介于最小值和最大值之间的成员(包括等于最小值或最大值的成员)。有序集成员按分值递增的顺序排列(从小到大)。zrevrange key start stop [WITHSCORES]:
返回有序集键中指定间隔内的成员。ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]:
返回有序集键中所有得分值介于最大值和最小值之间的成员(默认包括最大值或最小值)。有序集成员按分值降序排列(从最大到最小)。zrank key member
:返回成员在有序集关键字中的排名。zcard key:
返回有序集合中的元素个数。zscore key member
:返回有序集合键中成员的分数值。如果成员元素不是有序集键的成员,或者键不存在,则返回nil。zrevrank key member
:返回成员在有序集关键字中的排名。其中有序集合的成员按递减的分值排序(从最大到最小)。排名以0为基础,即得分最高的成员排名为0。zcount key min max
:返回有序集合键中得分值在[min,max]之间的成员数。其他操作:
zrem key member [member ...]:
从有序集合键中删除一个或多个成员,不存在的成员将被忽略。当键存在但不属于有序集类型时,将返回一个错误。zincrby key increment member:
是有序集合键成员的分数值加上增量。您可以通过传递负值增量(如ZINCRBY key ‐5 member)从得分中减去相应的值,即从成员的得分值中减去5。当键不存在或者成员不是键的成员时,ZINCRBY键增量成员等效于ZADD键增量成员。当键不是有序集类型时,将返回一个错误。分数值可以是整数值或双精度浮点数。ZREMRANGEBYRANK key start stop:
删除有序集键中的所有成员,并指定等级间隔。间隔分别由以下参数start和stop表示,包括start和stop。下标start和stop参数都基于0,即0表示有序集的第一个成员,1表示有序集的第二个成员,依此类推。还可以使用负下标,1表示最后一个成员,2表示倒数第二个成员,依此类推。ZREMRANGEBYSCORE key min max:
删除有序集合键中所有得分值介于最小值和最大值之间的成员(包括等于最小值或最大值的成员)。zunionstore destination numkeys key [key ...] [weights weight [weight ...]][AGGREGATE SUM|MIN|MAX]:
计算一个或多个给定有序集的并集,其中给定键的数量必须用numkeys参数指定,并将并集(结果集)存储到目标。默认情况下,结果集中某个成员的分数值是该成员在所有给定集中的分数值之和。zinterstore destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]:
计算给定有序集的交集,其中给定键的数量必须用numkeys参数指定,并将交集(结果集)存储到目的地。默认情况下,结果集中某个成员的分数值是该成员在所有给定集中的分数值之和。zscan key cursor [MATCH pattern] [COUNT count]:
游标是迭代的开始索引,第一次为0。迭代中第一行的返回值是下一次迭代的索引。如果为0,则迭代结束。
Match pattenrn是匹配排序集中元素的模式。
Count计算这次迭代的次数。
key操作:
查询键:
exists key:
检查密钥是否存在type key
:检测关键字对应的值的类型keys pattern:
查找与给定模式模式匹配的所有键。例如,keys *代表获取所有密钥。ttl key:
返回给定密钥的剩余寿命,以秒为单位。PTTL key:
以毫秒为单位返回密钥的剩余生存期。RANDOMKEY:
从当前数据库中随机返回(而不是删除)一个密钥。删除键:
del key
:密钥存在时将其删除键的排序:
排序关键字[按模式][限制偏移量][获取模式[获取模式.]][desc]
[ALPHA] [STORE destination]:返回或保存给定列表、集合和有序集合键中已排序的元素。默认情况下,排序以数字为对象,将值解释为双精度浮点数,然后进行比较。
键的设置:
EXPIRE key seconds:
设置给定密钥的生存期。当密钥过期时(生存期为0),它将被自动删除。EXPIREAT key timestamp:
EXPIREAT和EXPIRE有类似的功能,都是用来设置密钥的存活时间。不同之处在于,EXPIREAT命令接受的时间参数是unix时间戳。PEXPIREAT key milliseconds-timestamp:
它以毫秒为单位设置密钥的过期unix时间戳。RENAME key newkey:
将密钥重命名为newkey。当key和newkey相同,或者key不存在时,将返回错误。当新键已经存在时,RENAME命令将覆盖旧值。RENAMENX key newkey:
当且仅当新关键字不存在时,将关键字重命名为新关键字。如果该项不存在,将返回一个错误。DUMP key:
序列化给定的键并返回序列化值,可以使用restore命令将序列化值反序列化为Redis键。序列化值具有以下特征:它具有64位校验和,用于检测错误。还原将在反序列化之前检查校验和。该值的编码格式与RDB文件一致。RDB版本将被编码为序列化值。如果RDB格式由于Redis的不同版本而不兼容,Redis将拒绝反序列化该值。的序列化值不包含任何生存时间信息。restore key ttl serialized-value [REPLACE]:
反序列化给定的序列化值,并将其与给定的键相关联。ttl参数以毫秒为单位设置密钥的生存期;如果ttl为0,则不设置生存期。在执行反序列化之前,RESTORE将检查序列化值的RDB版本和数据校验和。如果RDB版本不同或数据不完整,RESTORE将拒绝反序列化并返回错误。如果key key已经存在,并且给定了REPLACE选项,则key key的原始值被反序列化获得的值替换;相反,如果key key已经存在,但是没有给出REPLACE选项,那么该命令将返回一个错误。PERSIST key:
删除给定密钥的生存期键的移动:
migrate host port key destination-db timeout [COPY] [REPLACE]:
自动将密钥从当前实例传输到目标实例的指定数据库。一旦转移成功,该键保证出现在目标实例上,而当前实例上的键将被删除。这个命令是一个原子操作。当它被执行时,它将阻塞两个迁移实例,直到出现以下任何结果:成功迁移、失败迁移和超时。move key db:
将当前数据库的键移动到给定的数据库db。如果当前数据库(源数据库)和给定数据库(目标数据库)具有相同名称的给定键,或者该键在当前数据库中不存在,则MOVE不起作用。发布/订阅:
订阅可以使多个客户端等待相同的信息,发布可以使服务器向多个特定的客户端发送信息。
就像收音机一样,只要把收音机调到指定的频道,就可以收听电台的信息。
无线电台可以向所有收听它的收音机发送信息。
新用户不会听到之前的消息。
订阅频道:
psubscirbe pattern [pattern ...]:
客户端订阅一个或多个符合给定模式的频道。subscirbe
频道[频道.]]:订阅一个或多个给定频道的信息。
【以上两者的区别在于模式可以匹配模式】
发送消息:
publish channel message:
将消息发送到指定通道。返回值是收到消息的订阅者的数量退订频道:
unpsubscirbe
[频道[频道.]]:指示客户端取消订阅给定的频道。
模式[模式.]]]:指示客户端取消订阅所有给定的模式。
【以上两者的区别在于模式可以匹配模式】
频道查询:
punsubscirbe
numpat:客户端订阅的所有模式的总和。
punsubscirbe
numpat:客户端订阅的所有模式的总和。pubsub
列出当前活动的频道。活动通道是指至少有一个订户的通道,处于订阅模式的客户端不计算在内。
pubsub channels [pattern]:
数字子频道[频道1.channel-n]:返回给定频道的订阅者数量,不包括订阅模式下的客户端。事务
开启事务:
pubsub
:标记事务块的开始。一个事务块中的许多命令将按顺序放入一个队列,最后由exec命令自动执行。
监控:
multi
监控一个(或多个)键。如果在事务执行exec之前,这个(或这些)键被其他命令更改,事务将被中断。watch key [key …]:
:取消WATCH命令对所有按键的监控。执行事务块:
unwatch
:在所有事务块中执行命令。取消事务:
exec
:取消事务,放弃执行事务块中的所有命令。同时会取消watch对所有按键的监控。欲了解更多信息,请参阅官方文件:https://redis.io/commands.中文文件:http://www.redis.cn/documentation.html.
希望本文所述对大家Redis数据库程序设计有所帮助。