一、Redis介绍
Redis是一种高性能的NoSQL数据库,也被称为远程字典服务器,它使用ANSI C编写,开源,支持网络,基于内存运行且可选持久化的键值对存储系统。Redis的出现是为了应对Web应用在高访问量和并发量下关系型数据库的性能瓶颈问题。它的性能高效,基于内存的运行方式使其读写速度快,能够支撑PB级别的数据和百万级的流量。作为一个键值对存储系统,Redis支持多种数据结构,包括String(字符串)、Hash(哈希)、List(列表)、Set(集合)和Sorted Set(有序集合)等。相比于其他数据库类型,Redis具有以下显著特点:它采用C/S通讯模型和单进程单线程模型,确保操作的原子性。Redis的数据存储主要依赖于字典(散列表),这使得其在进行CURD操作时效率非常高。此外,Redis还支持丰富的数据类型和操作命令,例如对于每种数据类型都提供了丰富的操作命令如GET/MGET、SET/SETEX/MSET/MSETNX、INCR/DECR、GETSET和DEL等。
二、基本操作
1.key的操作命令
命令 |
描述 |
用法 |
DEL |
删除给定的一个或多个Key |
DEL key [key...] |
EXISTS |
检查给定Key是否存在 |
EXISTS key |
EXPIRE |
为给定Key设置生存时间,对一个已经指定生存时间的Key设置执行EXPIRE, 新的值会代替旧的值 |
EXPIRE key seconds |
KEYS |
查找所有符合给定模式pattern的Key,例如:(1)KEYS匹配所有key(2)KEYSh? llo匹配hello、hallo、hxllo等(3)KEYS hllo匹配hlllo、heeeello等(4)KEYS h[ae]lllO匹配hello和hallo |
KEYS pattern |
MIGRATE |
(1)原子性地将Key从当前实例传送到目标实例指定的数据库上(2)原数据库Key删除, 新数据库Key增加(3)阻塞进行迁移的两个实例,直到迁移成功、迁移失败、 等待超时三个之一发生 |
MIGRATE host port key destination-db timeout [COPY][REPLACE] |
MOVE |
将当前数据库的Key移动到给定数据中,执行成功的条件为当前数据库有Key, 而给定数据库没有Key |
MOVE key db |
PERSIST |
移除给定Key的生存时间,将Key变为持久数据 |
PERSIST key |
RANDOMKEY |
从当前数据库随机返回且不删除一个Key, |
RANDOMKEY |
RENAME |
将Key的键名修改为新键名(3)新键名已存在,RENAME将覆盖旧值。 |
RENAME key newkey |
TYPE |
返回Key锁存储的值的类型。 |
TYPE key. |
2.字符串的操作命令
命令 |
描述 |
用法 |
SET |
(1)将字符串值Value关联到Key(2)Key已关联则覆盖,无视类型(3) 原本Key带有生存时间TTL,那么TTL被清除 |
SET key value[EX seconds][PX XX] |
GET |
(1)返回Key关联的字符串值 (2) Key不存在返回nil (3)Key存储的不是字符串,返回错误, 因为GET只用于处理字符串 |
GET key |
MSET |
(1)同时设置一个或多个key-Value键值对 (2)某个给定Key已经存在,那么MSET新值会覆盖旧值 (3)如果上面的覆盖不是希望的,那么使用MSETNX命令,所有Key都不存在才会进行覆盖(4) MSET是一个原子性操作,所有Key都会在同一时间被设置,不会存在有些更新有些没更新的情况 |
MSET key value [key value ... ] |
MGET |
(1)返回一个或多个给定Key对应的Value (2)某个Key不存在那么这个Key返回nil |
MGET key [key ...] |
SETEX |
(1)将Value关联到Key (2) 设置Key生存时间为seconds,单位为秒(3) 如果Key对应的Value已经存在,则覆盖旧值(4)SET也可以设置失效时间, 但是不同在于SETNX是一个原子操作,即关联值与设置生存时间同一时间完成 |
SETEX key seconds value |
SETNX |
(1)当Key不存在时将Key的值设为Value (2)若给定的Key已存在,SEXNX不做任何动作 |
SETNX key value |
INCR |
(1) Key中存储的数字值+1,返回增加之后的值 (2) Key不存在, 那么Key的值被初始化为0再执行INCR (3)如果值包含错误类型或者字符串不能被表示为数字, 那么返回错误(4)值限制在64位有符号数字表示之内 |
INCR key |
DECR |
(1) Key中存储的数字值-1 (2)其余同INCR |
DECR key |
INCRBY |
(1)将key所存储的值加上增量返回增加之后的值(2)其余同INCR |
INCRBY key increment |
DECRBY |
(1)将key所存储的值减去减量decrement(2)其余同INCR |
DECRBY key decrement |
#设置key
#set命令 设置key和value 设置key位name,value为"hello"
set name "hello"
#mset命令 一次性创建多个 key1为name1 value为"hello1" key2为name2 value为"hello2"
mset name1 "hello1" name2 "hello2"
#查找key
#keys命令 name为key值
keys name
#exist命令,用于检查一个或多个key是否存在,返回结果为1表示存在,为0表示不存在。
exists name
#删除Key
del name
#flushall或flushdb
flushall
#设置key过期时间
#exprire命令,此命令为key设置过期时间,单位为秒。
expire name 60
#此命令返回key剩余的生存时间,单位也是秒。
ttl name
#设置生存时间为永久
persist name
#查看Key类型
#type 此命令返回key所存储值的数据类型
type name
#Key的其他操作
#rename用于重命名key
rename name name11
#移动到指定数据库
move name 2
#select切换数据库
select 2
#Key中存储的数字值+1
incr id
#Key中存储的数字值-1
decr id
#将key所存储的值加上增量返回增加之后的值
incrby id 5
#将key所存储的值减去减量decrement
decrby id 5
3.哈希数据的命令操作
命令 |
描述 |
用法 |
HSET |
(1)将哈希表Key中的域Field的值设为Value (2) Key不存在,一个新的Hash表被创建 (3) Field已经存在,旧的值被覆盖 |
HSET key field value |
HGET |
返回哈希表Key中给定域Field的值 |
HGET key field |
HDEL |
删除哈希表Key中的一个或多个指定域 (2)不存在的域将被忽略 |
HDEL key filed [field ...] |
HEXISTS |
查看哈希表Key中,给定域Field是否存在,存在返回1,不存在返回0 |
HEXISTS key field |
HGETALL |
返回哈希表Key中,所有的域和值 |
HGETALL key |
HINCRBY |
为哈希表Key中的域Field加上增量Increment (2)其余同INCR命令 |
HINCRBY key filed increment |
HKEYS |
返回哈希表Key中的所有域 |
HKEYS key |
HLEN |
返回哈希表Key中域的数量 |
HLEN key |
HMGET |
(1)返回哈希表Key中,一个或多个给定域的值 (2)如果给定的域不存在于哈希表, 那么返回一个nil值 |
HMGET key field [field ...] |
HMSET |
(1)将多个Field-Value对设置到哈希表Key中 (2)会覆盖哈希表中已存在的域 (3) Key不存在, 那么一个空哈希表会被创建并执行HMSET操作 [field value ...] |
HMSET key field value [field value ...] |
HVALS |
返回哈希表Key中所有的域和值 |
HVALS key |
#HSET命令,此命令用于设置哈希表中指定字段的值
hset myhash name 'zs'
#回哈希表Key中给定域的值
hget myhash name
#删除哈希表Key中的一个或多个指定域
hdel myhash name
#查看哈希表Key中,给定域是否存在,存在返回1,不存在返回0
hexists myhash name
#返回哈希表Key中,所有的域和值
hgetall myhash
#为哈希表Key中的域加上增量Increment
hincrby myhash id 1
#返回哈希表Key中的所有域
hkeys myhash
#返回哈希表Key中域的数量
hlen myhash
#返回哈希表Key中,一个或多个给定域的值
hmget myhash id name
#将多个设置到哈希表Key中
hmset myhash score 1 sex 'man'
#返回哈希表Key中所有的域和值
hvals myhash
4.列表类型常用命令
命令 |
描述 |
用法 |
LPUSH |
(1)将一个或多个值Value插入到列表Key的表头(2)如果有多个Value值,那么各个Value值按从左到右的顺序依次插入表头(3)Key不存在,一个空列表会被创建并执行LPUSH操作(4)Key存在但不是列表类型,返回错误 |
LPUSH key value [value ...] |
LPUSHX |
(1)将值Value插入到列表Key的表头,当且仅当Key存在且为一个列表(2)当Key不存在时,LPUSHX命令什么都不做 |
LPUSHX key value |
LPOP |
(1)移除并返回列表Key的头元素 |
LPOP key |
LRANGE |
(1)返回列表Key中指定区间内的元素,区间以偏移量Start和Stop指定(2)Start和Stop都以0为底开始计数(3)可使用负数下标,-1表示列表最后一个元素,-2表示列表倒数第二个元素,以此类推(4)Start大于列表最大下标,返回空列表(5)Stop大于列表最大下标,Stop=列表最大下标 |
LRANGE key start stop |
LREM |
(1)根据Count的值,移除表中与Value相等的元素(2)Count>0表示从头到尾搜索,移除与Value相等的元素,数量为Count(3)Count<0表示从从尾到头搜索,移除与Value相等的元素,数量为Count(4)Count=0表示移除表中所有与Value相等的元素 |
LREM key count value |
LSET |
(1)将列表Key下标为Index的元素设为Value(2)Index参数超出范围,或对一个空列表进行LSET时,返回错误 |
LSET key index value |
LINDEX |
(1)返回列表Key中,下标为lndex的元素 |
LINDEX key index |
LINSERT |
(1)将值Value插入到列表Key中,位于Pivot前面或者后面(2)Pivot不存在于列表Key时,不执行任何操作(3)Key不存在,不执行任何操作 |
LINSERT key pivot BEFORE\value |
LLEN |
(1)返回列表Key的长度(2)Key不存在,返回0 |
LLEN key |
LTRIM |
(1)对一个列表进行修剪,让列表只返回指定区间内的元素,不存在指定区间内的都将被移除 |
LTRIM key start stop |
RPOP |
(1)移除并返回列表Key的尾元素 |
RPOP key |
RPOPLPUSH |
(在一个原子时间内,执行两个动作:(1)将列表Source中最后一个元素弹出并返回给客户端(2)将Source弹出的元素插入到列表Destination,作为Destination列表的头元素 |
RPOPLPUSH source destination |
RPUSH |
(1)将一个或多个值Value插入到列表Key的表尾 |
RPUSH key value [value ...] |
RPUSHX |
(1)将Value插入到列表Key的表尾,当且仅当Key存在并且是一个列表(2)Key不存在,RPUSHX什么都不做 |
RPUSHX key value |
#lpush将一个或多个值Value插入到列表Key的表头
lpush mylist 0 1
#lpushx将值Value插入到列表Key的表头,当且仅当Key存在且为一个列表
lpushx mylist
#lrange返回列表Key中指定区间内的元素,区间以偏移量Start和Stop指定
lrange my_list 0 6
#lpop移除并返回列表Key的头元素
lpop mylist
#lrem根据Count的值,移除表中与Value相等的元素 移除第一个列表,值为222
lrem my_list 1 222
#lset根据index下表设置value值 将下标为0的列表值设置为ww
lset my_list 0 'ww'
#返回列表Key中,下标为lndex的元素 ,返回index为3的元素
lindex my_list 3
#linsert 将值Value插入到列表Key中,位于zs前面或者后面
linsert my_list before zs 'hh'
linsert my_list after zs 'hh'
#返回列表Key的长度,Key不存在,返回0
llen my_list
#ltrim对一个列表进行修剪,让列表只返回指定区间内的元素,不存在指定区间内的都将被移除,修剪完只剩下第3和第4个元素
ltrim my_list 2 3
#移除并返回列表Key的尾元素
rpop my_list
#rpopsh将一个或多个值Value插入到列表Key的表尾
rpush my_list last
#rpushx将Value插入到列表Key的表尾,当且仅当Key存在并且是一个列表
rpushx my_list last
5.其他常用命令
命令 |
描述 |
用法 |
SADD |
(1)将一个或多个member元素加入到key中,已存在在集合的member将被忽略(2) 假如key不存在,则只创建一个只包含member元素做成员的集合(3) 当key不是集合类型时,将返回一个错误 |
SADD key number [member...] |
SCARD |
(1)返回key对应的集合中的元素数量 |
SCARD key |
SREM |
(1)移除集合key中的一个或多个member元素,不存在的member将被忽略 |
SREM key member [member...] |
SMEMSBERS |
(1)返回集合key中的所有成员(2)不存在的key被视为空集 |
SMEMSBERS key |
ZADD |
(1)将一个或多个member元素及其score值加入有序集key中(2) 如果member已经是有序集的成员, 那么更新member对应的score并重新插入member保证member正在正确的位置上(3) score可以是整数值或双精度浮点数 |
ZADD key score member[[score member][score member]...[] |
ZCARD |
(1)返回有序集key的元素个数 |
ZCARD key |
ZCOUNT |
(1)返回有序集key中,score值>=min且<=max的成员的数量 |
ZCOUNT key min max |
ZRANGE |
(1)返回有序集key中指定区间内的成员,成员位置按score从小到大排序(2) 具有相同score值的成员按字典序排列(3)需要成员按score从大到小排列, 使用ZREVRANGE命令(4)下标参数start和stop都以0为底, 也可以用负数,-1表示最后一个成员,-2表示倒数第二个成员(5) 可通过WITHSCORES选项让成员和它的score值一并返回 |
ZRANGE key start stop [WITHSCORES] |
ZRANK |
(1)返回有序集key中成员member的排名,有序集成员按score值从小到大排列(2) 排名以0为底,即score最小的成员排名为0(3) ZREVRRANK命令可将成员按score值从大到小排名 |
ZRANK key number |
ZREM |
(1)移除有序集key中的一个或多个成员,不存在的成员将被忽略(2) 当key存在但不是有序集时,返回错误 |
ZREM key member [member ...] |
SELECT |
(1)切换到指定数据库,数据库索引index用数字指定,以0作为起始索引值(2) 默认使用0号数据库 |
SELECT index |
DBSIZE |
(1)返回当前数据库的Key的数量 |
DBSIZE |
SHUTDOWN |
(1)停止所有客户端(2)如果至少有一个保存点在等待,执行SAVE命令(3) 如果AOF选项被打开,更新AOF文件(4)关闭Redis服务器 |
SHUTDOWN [SAVE\] NOSAVE] |
FLUSHDB |
(1)清空当前数据库中的所有Key |
FLUSHDB |
FLUSHALL |
(1)清空整个Redis服务器的数据(删除所有数据库的所有Key) |
FLUSHALL |
每篇一言:夜深忽梦少年事,唯梦闲人不梦君。