redis的常用数据操作命令
redis的操作命令相当于mysql中的sql语句,可以用来对于数据进行增删改查等操作。
1 redis有关key的操作
1.1 查看数据库中的key
语法:keys pattern
作用:查找所有符合模式pattern的key. pattern可以使用通配符。
通配符:
*:表示0或多个字符,例如:keys * 查询所有的key。
?:表示单个字符,例如:wo?d , 匹配 word , wood
[] :表示选择[]内的一个字符,例如wo[or]d, 匹配word, wood, 不匹配wold、woord
demo如下
127.0.0.1:6379> set k1 v1 OK 127.0.0.1:6379> set k2 v2 OK 127.0.0.1:6379> set o3 v3 OK 127.0.0.1:6379> keys k* 1) "k2" 2) "k1" 127.0.0.1:6379> set hello hello OK 127.0.0.1:6379> keys h[ade]llo 1) "hello"
1.2 判断key是否存在
语法:exists key [key…]
作用:判断key是否存在
返回值:整数,存在key返回1,其他返回0。使用多个key,返回存在的key的数量。
demo如下
127.0.0.1:6379> exists hello (integer) 1 127.0.0.1:6379> exists hello k1 k2 k3 (integer) 3
1.3 移动key到指定的数据库
语法:move key db
作用:移动key到指定的数据库,移动的key在原库被删除。
返回值:移动成功返回1,失败返回0.
demo如下
127.0.0.1:6379> keys * 1) "k2" 2) "o3" 3) "k1" 4) "hello" 127.0.0.1:6379> move o3 1 (integer) 1 127.0.0.1:6379> keys * 1) "k2" 2) "k1" 3) "hello"
1.4 设置key的生存时间
redis会将数据存放在内存中,如果不及时清除不被使用不被使用的数据,将会消耗内存的资源,除了手动删除外,也可以给数据设置生存时间。
语法:expire key seconds
作用:设置key的生存时间,超过时间,key自动删除。单位是秒。
返回值:设置成功返回数字 1,其他情况是 0 。
127.0.0.1:6379> expire k2 20 (integer) 1
1.5查看key的剩余生存时间
可以使用ttl key
查看key的剩余生存时间。
语法:ttl key
作用:查看key的剩余生存时间(ttl: time to live),以秒为单位。
返回值:
-1 :没有设置key的生存时间, key永不过期。
-2:key不存在
demo如下
127.0.0.1:6379> ttl k2 (integer) 7
1.6 查看key所存储值的数据类型
语法:type key
作用:查看key所存储值的数据类型
返回值:字符串表示的数据类型
none (key不存在)
string (字符串)
list (列表)
set (集合)
zset (有序集)
hash (哈希表)
demo如下
127.0.0.1:6379> type k1 string
1.7 重命名key(不推荐)
语法:rename key newkey
作用:将key改为名newkey。当 key 和 newkey 相同,或者 key 不存在时,返回一个错误。
当 newkey 已经存在时, RENAME 命令将覆盖旧值。
demo如下
127.0.0.1:6379> keys * 1) "k1" 2) "hello" 127.0.0.1:6379> rename hello k2 OK 127.0.0.1:6379> keys * 1) "k1" 2) "k2"
1.8 删除存在的key
语法:del key [key…]
作用:删除存在的key,不存在的key忽略。
返回值:数字,删除的key的数量。
demo如下
127.0.0.1:6379> del k1 (integer) 1 127.0.0.1:6379> keys * 1) "k2"
2.操作字符串类型数据(string)
字符串类型是Redis中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据,序列化后的数据,JSON化的对象甚至是一张图片。
字符串类型的数据操作总的思想是通过key操作value,key是数据标识,value是我们感兴趣的业务数据。
2.1 添加string数据
语法:set key value
功能:将字符串值 value 设置到 key 中,如果key已存在,后放的值会把前放的值覆盖掉。
返回值:OK表示成功
demo如下
127.0.0.1:6379> set zhangsan zhangsan OK
2.2 获取 key 中设置的字符串值
语法:get key
功能:获取 key 中设置的字符串值
返回值:key存在,返回key对应的value;
key不存在,返回nil
demo如下
127.0.0.1:6379> set zhangsan zs OK 127.0.0.1:6379> get zhangsan "zs"
2.3 追加字符串
语法:append key value
功能:如果 key 存在,则将 value 追加到 key 原来旧值的末尾
如果 key 不存在,则将新增key,将value 设置值为 value
返回值:追加字符串之后的总长度(字符个数)
demo如下
127.0.0.1:6379> append zhangsan zs (integer) 4 127.0.0.1:6379> get zhangsan "zszs"
2.4获取字符串值的长度
语法:strlen key
功能:返回 key 所储存的字符串值的长度
返回值:如果key存在,返回字符串值的长度;
key不存在,返回0
demo如下
127.0.0.1:6379> STRLEN zhangsan (integer) 4
2.5 将字符串数字值自增
语法:incr key
功能:将 key 中储存的数字值加1,如果 key 不存在,则 key 的值先被初始化为 0 再执行incr操作。,非数字值类型报错
返回值:返回加1后的key值
demo如下
127.0.0.1:6379> set zsage 10 OK 127.0.0.1:6379> INCR zsage (integer) 11 127.0.0.1:6379> INCR zhangsan (error) ERR value is not an integer or out of range
2.6 将字符串数字值自减
语法:decr key
功能:将 key 中储存的数字值减1,如果 key 不存在,则么 key 的值先被初始化为 0 再执行 decr 操作。
返回值:返回减1后的key值
demo如下
127.0.0.1:6379> DECR zsage (integer) 10
2.7 将字符串数字值改变偏移量
将字符串数字值增加偏移量
语法:incrby key offset
功能:将 key 所储存的值加上增量值,如果 key 不存在,则 key 的值先被初始化为 0 再执行
INCRBY 命令。
返回值:返回增量之后的key值。
demo如下
127.0.0.1:6379> INCRBY zsage 3 (integer) 13
将字符串数字值减少偏移量
语法:decrby key offset
功能:将 key 所储存的值减去减量值,如果 key 不存在,则 key 的值先被初始化为 0 再执行 DECRBY 命令。
返回值:返回减量之后的key值。
demo如下
127.0.0.1:6379> DECRBY zsage 2 (integer) 11
2.8 截取字符串
语法:getrange key startIndex endIndex
功能:获取 key 中字符串值从 startIndex 开始到 endIndex 结束的子字符串,包括startIndex和endIndex, 下标从0开始,负数表示从字符串的末尾开始,-1 表示最后一个字符。截取的子字符串是闭区间截取的。
demo如下
127.0.0.1:6379> getrange wz 2 6 "ngzho" 127.0.0.1:6379> getrange wz 1 -1 "angzhoushishuaige"
2.9 修改(覆盖)字符串
语法:setrange key offsetIndex value
功能:用value覆盖key的存储的值从offset开始,能够覆盖几个就是几个。
返回值:修改后的字符串的长度。
demo如下
127.0.0.1:6379> setrange wz 4 xiaopengyou (integer) 18 127.0.0.1:6379> get wz "wangxiaopengyouige"
2.10 设置数据的同时设置生存时间
语法:setex key seconds value
功能:设置key的值,并将 key 的生存时间设为 seconds (以秒为单位) ,如果key已经存在,将覆盖旧值。
返回值:设置成功,返回OK。
demo如下
127.0.0.1:6379> setex k3 20 v3 OK
2.11 设置字符串数据(不重复)
语法:setnx key value
功能:setnx 是 set if not exists 的简写,如果key不存在,则 set 值,存在则不设置值。
返回值:设置成功,返回1
设置失败,返回0
demo如下
127.0.0.1:6379> setnx k4 v4 (integer) 1 127.0.0.1:6379> setnx k4 v4 (integer) 0
2.12 同时设置一个或多个字符串数据
语法:mset key value [key value…]
功能:同时设置一个或多个 key-value 对
返回值:设置成功,返回OK。
2.13 同时获取一个或多个字符串数据
语法:mget key [key …]
功能:获取所有(一个或多个)给定 key 的值
返回值:包含所有key的列表,如果key不存在,则返回nil。
demo如下
127.0.0.1:6379> mset k4 v4 k5 v5 OK 127.0.0.1:6379> mget k1 k2 k3 k4 k5 1) (nil) 2) "hello" 3) (nil) 4) "v4" 5) "v5"
2.14 设置多个字符串数据(不重复)
语法:msetnx key value[key value…]
功能:同时设置一个或多个 key-value 对,如果有一个key是存在的,则设置不成功。
返回值:设置成功,返回1
设置失败,返回0
demo如下
127.0.0.1:6379> msetnx k5 vv k6 v6 (integer) 0
3.操作列表类型数据(list)
Redis列表是简单的字符串列表,按照插入顺序排序,左边(头部)、右边(尾部)或者中间都可以添加元素。链表的操作无论是头或者尾效率都极高,但是如果对中间元素进行操作,那效率会大大降低了。
列表类型的数据操作总的思想是通过key和下标操作value,key是数据标识,下标是数据在列表中的位置,value是我们感兴趣的业务数据。表头元素的下标是0,依次往后下标都是前一个下标加1.当然也可以按照表尾为-1,依次往前下标减1来表示。
其主要的操作可以参考下图,下面我们将一一讲解。
3.1 将一个或多个值依次插入列表表头
语法:lpush key value [value…]
功能:将一个或多个值 value 插入到列表 key 的最左边(表头),各个value值依次插入到表头位置。
返回值:插入之后的列表的长度。
demo如下
127.0.0.1:6379> lpush list01 1 2 3 (integer) 3
3.2 将一个或多个值依次插入列表表尾
语法:rpush key value [value…]
功能:将一个或多个值 value 插入到列表 key 的最右边(表尾),各个 value 值按依次插入到表尾。
返回值:插入之后的列表的长度。
demo如下
127.0.0.1:6379> rpush list02 3 2 1 (integer) 3
3.3 获取列表的元素
语法:lrange key startIndex endIndex
功能:获取列表 key 中指定下标区间内的元素,下标从0开始,到列表长度-1;下标也可以是负数,表示列表从后往前取,-1表示倒数第一个元素,-2表示倒数第二个元素,以此类推;startIndex和endIndex超出范围不会报错。
返回值:获取到的元素列表。
demo如下
127.0.0.1:6379> lrange list01 0 2 1) "3" 2) "2" 3) "1"
3.4 移除并返回列表头部第一个元素
语法:lpop key
功能:移除并返回列表key头部第一个元素,即列表左侧的第一个元素。
返回值:列表左侧第一个元素的值;列表key不存在,返回nil。
demo如下
127.0.0.1:6379> lpop list01 "3" 127.0.0.1:6379> lrange list01 0 2 1) "2" 2) "1"
3.5 移除并返回列表尾部第一个元素
语法:rpop key
功能:移除并返回列表key尾部第一个元素,即列表右侧的第一个元素。
返回值:列表右侧第一个元素的值;列表key不存在,返回nil。
demo如下
127.0.0.1:6379> rpop list01 "1" 127.0.0.1:6379> lrange list01 0 2 1) "2"
3.6 获取列表指定下标元素
语法:lindex key index
功能:获取列表 key 中下标为指定 index 的元素,列表元素不删除,只是查询。0 表示列表的第一个元素,1 表示列表的第二个元素;index也可以负数的下标, -1 表示列表的最后一个元素-2 表示列表的倒数第二个元素,以此类推。
返回值:key存在时,返回指定元素的值;
Key不存在时,返回nil。
demo如下
127.0.0.1:6379> lindex list02 1 "2"
3.7 获取列表的长度
语法:llen key
功能:获取列表 key 的长度
返回值:数值,列表的长度;key不存在返回0
demo如下
127.0.0.1:6379> llen list02 (integer) 3
3.8 批量移除列表值为value的元素
语法:lrem key count value
功能:根据参数 count 的值,移除列表中与参数 value 相等的元素,
count >0 ,从列表的左侧向右开始移除count个元素;
count < 0 从列表的尾部开始移除count个元素;
count = 0移除表中所有与 value 相等的值。
返回值:数值,移除的元素个数
demo如下
127.0.0.1:6379> lpush list03 a b c a d e a (integer) 7 127.0.0.1:6379> lrem list03 1 a (integer) 1 127.0.0.1:6379> lrange list03 0 -1 1) "e" 2) "d" 3) "a" 4) "c" 5) "b" 6) "a"
3.9 截取列表指定下标区间的元素
语法:ltrim key startIndex endIndex
功能:截取key的指定下标区间的元素,并且赋值给key。
下标从0开始,一直到列表长度-1;下标也可以是负数,表示列表从后往前取,-1表示倒数第一个元素,-2表示倒数第二个元素,以此类推;startIndex和endIndex超出范围不会报错。
返回值:执行成功返回ok
demo如下
127.0.0.1:6379> ltrim list03 0 -2 OK 127.0.0.1:6379> lrange list03 0 -1 1) "e" 2) "d" 3) "a" 4) "c" 5) "b"
3.10 修改列表指定下标的元素
语法:lset key index value
功能:将列表 key 下标为 index 的元素的值设置为 value。
功能:设置成功返回ok ; key不存在或者index超出范围返回错误信息。
demo如下
127.0.0.1:6379> lrange list01 0 -1 1) "3" 2) "2" 3) "1" 4) "0" 127.0.0.1:6379> lset list01 0 4 OK 127.0.0.1:6379> lrange list01 0 -1 1) "4" 2) "2" 3) "1" 4) "0"
3.11 在指定位置插入元素
语法:linsert key before/after pivot value
功能:将值 value 插入到列表 key 当中位于值 pivot 之前或之后的位置。key不存在或者pivot不在列表中,不执行任何操作。
返回值:命令执行成功,返回新列表的长度。没有找到pivot返回 -1, key不存在返回0。
demo如下
127.0.0.1:6379> linsert list01 before 2 x (integer) 5 127.0.0.1:6379> lrange list01 0 -1 1) "4" 2) "x" 3) "2" 4) "1" 5) "0"