本文使用命令行模式进行操作
(1)keys
keys的作用是返回所有符合条件的key的列表
*是返回所有的,名字不限制
也可以使用限制
这个命令的原理是查询到所有名字符合条件的,然后返回
练习可以用,但是千万别在生产环境使用,如果生产环境有800w个key,即使使用了通配符进行名字的限制也是挨个去查然后过滤,会造成很恶劣的影响
如果只是要看当前系统有多少个key的话,可以使用dbsize命令,这个是O(1)级别的:
(2)EXPIRE及ttl
这组命令是设置及查看过期时间
大于等于0代表实际的秒数(默认为秒),-1代表永不过期,-2代表不存在
这里的坑:坑一:如果重新设置了key对应的value的值,如果没有设置过期时间,那这个key就永不过期了
坑2:只能设置顶级的key的过期时间,对于list或者set等复杂结构内部的某一条记录是无法设置过期时间的。
(3)rename
重新给key指定名字,这里要注意rename到的目标值是否存在:
如果存在的话,会被当前的值覆盖
如果目的是存在则不覆盖也不重命名,可以使用renamenx(推荐使用避免覆盖了有用的数据)
(4)exists
key是否存在,1表示存在,0表示不存在
(5)del
删除key对应的数据
可以一次删除多个:
del命令返回的数字代表删除成功了多少个
(6)redis的key的命名
业务名:对象名:id(或者其他能代表一条数据的属性):属性
以下命令为string类型的命令
(7)mset mget
批量设置(获取)key和value
批量命令可以提高性能:
set n次:n次网络+n次命令时间(redis执行时间)
mset n个key:1次网络+n次命令时间(redis执行时间)
(8)set
set 设置值
set key value
set命令有几个选项:
ex seconds: 为键设置秒级过期时间。
px milliseconds: 为键设置毫秒级过期时间。
nx: 键必须不存在,才可以设置成功,用于添加(分布式锁常用)。
xx: 与nx相反,键必须存在,才可以设置成功,用于更新。
(9) incr 和 decr
(10)getset
设置新的值,返回原来键的值
要求原来的值必须存在
(11)setrange getrange
设置指定范围的值
--以下命令为hash类型专用
(12)hset hget
(13)hmset hmget
hset的结果也可以使用hmget去获取
我们也可以成对的使用hmset和hmget
(14)hdel hlen hkeys hvals
hdel 删除hash中的某个键或者多个键
hlen 返回hash的大小
hkeys 返回hash里key的列表
hvals返回hash里value的列表
(15)hgetall HINCRBY
hgetall获取hash中所有的键值对,奇数行代表key,偶数行代表value
HINCRBY类似于整数的自增,需要指定每次增加多少
(16)String和hash的应用场景比较
String优点:简单直观,每个键对应一个值
String缺点:键数过多,占用内存多,用户信息分散,不用于生产环境(键比较少或者记录数比较少的时候也可以使用,不是绝对的)
Hash类型
优点:简单直观,使用合理可以减少内存空间消耗
缺点:老版本(3.2以前)注意ziplist和hashtable两种编码转换,新版本都是用的quicklist
将对象序列化存入string:
优点:编程简单,若使用序列化合理内存使用率高
缺点:序列化和反序列化有一定开销,查询不直观
总结:键比较少,记录比较少的时候可以用string,键比较多,记录比较多推荐使用json
比如一个表中有id,name,age,city等字段,我们就可以使用hmset
需要的时候按需根据hmget或者hget来取就行了
--以下为list相关的命令
(17)rpush、lpush和lrange
rpush从右边插入,每次放到list的最右边
lpush从右边插入,每次放到list的最左边
lrange获取元素不弹出,-1代表最后
(18)lpop、rpop
lpop,弹出最左边的元素,返回值是弹出的元素
rpop,弹出最右边的元素,返回值是弹出的元素
(19)lrem
从左边删除元素 lrem demolist 2 x
表示从demolist的左边找到两个x并删除
(20)ltrim lset
ltrim对list进行裁剪
lset设置list指定下标的值
(21)lindex llen
lindex获取指定下标的值
llen返回list的长度
(22)blpop brpop
阻塞式从左边或者右边弹出元素
跟lpop、rpop的区别是:如果有元素表现相同,如果没有元素的话,会阻塞。
可以使用作为简单的MQ