开发中经常用到redis,几乎都把redis与缓存画上等号了。自己开中也只是用到了string和hash类型,感觉对redis一知半解。所以本着探究一下redis常用的命令,来仔细学习一下redis。学习参考:菜鸟redis教程
$emsp;本篇博客不适合一次性阅读并记忆所有命令,适合使用的时候适当查询。
命令中key指代操作的存放的主键名【自取】,value指代存放到该主键的值【自定义】
#登录远程redis服务 redis-cli -h host -p port -a password
#host对应的ip如127.0.0.1 post对应的端口号 6379【实际端口号请以confg文件为准】 password 密码
redis-cli -h 127.0.0.1 -p 6379 -a 1234
#中文乱码问题 链接时追加 --row 若还是乱码,请检查你的终端编码方式,与key-value存放的编码是否相同
reids-cli --row
#切换数据库 select number number指代第几个数据库【默认0-15】
select 0
#判断键值是否存在 exists key
exists users::1
#模糊查询数据库 查询所有 keys * 正则匹配 keys regx
keys *
keys ^[0-9]*$ #匹配数字
#删除键值 del key
del users::1
#设置过期时间 pexpire key milliseconds【毫秒】 expire key seconds【秒为单位】
pexpire users::1 6000 #6秒后,key为users::1的键自动删除
expire users::1 6 #6秒后,key为users::1的键自动删除
#查看到期时间 TTL key 以秒为单位 PTTL key 以毫秒为单位
TTL users::1
PTTL users::1
#取消过期时间
persist users::1
#移动key值 move key db 从数据库A移动到B
move key B
#返回key值的类型 type key
type users::1
#修改key值的名称 renameoldname newname
rename users::1 user::1
#序列号键值 dump key
dump users::!
#存放键值 set key value
set users::1 123
#获取key的值 get key
get users::1
#获取key之中指定位数的值 getrange key start end 参考数组
getrange users::1 0 1 #获取到的值为12
#获取一个或多个key的值 mget key1 key2
mget users::1 users::2 #同时获得users::1与users::2的值
#存放key同时,设置超时间是 set key ex second【秒】或 set key px milliseconds【毫秒】
set users::1 1234 ex 3 #设置key为users::1,value为1234,超时时间为3秒
set users::1 1234 px 3000 #设置key为users::!,value为1234,超时间为3000毫秒【3秒】
#只有在 key 不存在时设置 key 的值 setnx key value
setnx users::1 1234 #当users::1不存在时,才存放
#返回字符串长度 strlen key 参考c语言
strlen users::1
#同时设置多个 key value mset key1 value1 key2 value ....
mset users::1 a users::2 b
#同时设置多个 key value 当且仅当key不存在时才存放,只要有一个key存在,所有插入都失败
#msetnx key1 value1 key2 value2 ...
msetnx users::1 a users::3 c
#在指定key的末尾上追加新字符串,类似于字符串拼接 append key value
append users::1 5 #如原本users::1存放值为1234,执行后为12345
#指定key,自增 【int型才可以】 incr key 类似于key++,incrby key 4 类似于key += 4
incr users::1 incrby users::1 4
#指定key,自减 【int型才可以】 decr key 类似于key--,decrby key 2 类似于key -= 2
decr users::1 decrby users::1 2
#存放hash类型键值对
#存放单个hset key filed value
#当且仅当filed不存在时才存放 hsetnx key filed value
#存放多个hmset key1 filed1 value1 filed2 value2 .....
hset users::1 name tom #若name存在,则覆盖name值,不存在则新建
hmset users::1 name bob
hmset users::1 age 18 gender 男
#很遗憾,hash没有批量存放filed不能存在的字段方法
#删除一个或多个hash值 hdel key filed1 ...
hdel user::1 name gender
#判断指定字段是否存在 hexists key filed
hexists users::1 name
#获取指定字段的值 hget key filed
hget users::1 age
#获取所有hash中key的字段与值 hgetall key
hgetall users::1
#获取所有hash表中的字段 hkeys key
hkeys users::1 #只查询key
#获取所有hash表中当前key的字段个数
hlen users::1 #只返回个数
#获取指定hash表key中的字段的值 hmget key filed1 filed2 ...
hmget users::1 name age
#获取hash当前key的所有值 hvals key
hvals users::1
#将指定的字段的值自增 hincrby key filed increment 类似于 filed += increment
hincrby users::1 age 7
redis中的list类型,是个由链表构成的堆。list的操作,既符合堆的先入后出原则,则符合链表的操作原则。
#入栈 lpush key value 或同时入栈多个 lpush key value1 value2 ...
lpush users::1 1
lpush users::1 2 3 4
#查看堆中指定下标存放value lrange key start end
lrange users::1 0 10
#移除堆的首元素[首元素出堆],并设置超时时间,遇到阻塞时,在超时时间内等待,直到取到值 blpop key timeout
blpop users::1 1000 #可以理解为,移除当前堆,最左侧的元素
#移除堆的最末元素[末元素出堆] brpop key timeout
brpop users::1 1000 #可以理解为,移除当前堆,最右侧元素
#移除堆首元素,不设置超时间 lpop key
lpop users::1 #最左侧元素
#移除堆末元素,不设置超时间 rpop key
rpop users::1 #最右侧元素
#取堆中指定下标的元素 lindex key index
lindex users::1 0 #仅仅只取值,而不出栈
#获取堆的当前长度 llen key
llen users::1
#向指定已存在的key的堆中,从堆的左侧入堆 lpushx key value
lpushx users::1 5 #向key为users::1的堆首插入值5,每次只能操作一个元素
#向指定已存在的key的堆中,从堆的右侧入堆 rpushx key value
rpushx users::1 6 #向key为users::1的堆首插入值6,每次只能操作一个元素
#通过索引,向指定key的堆中存放值 lset key index value
lset users::1 1 45 #向key为uses::1,下标为1【第二个元素】,放入值45.若下下标大于堆长度,则插入失败
#将A堆中堆末元素出栈,并插入到B堆首元素中 rpoplpush A B
rpoplpush users::1 users::2 #若B不存在,则创建B并将value存放到B的堆首
#将A堆中堆末元素出栈,并插入到B堆首元素中,并设置超时等待时间,超过时间若还未移动成功则不进行操作
#rpoplpush A B timeout
rpoplpush users::1 users::2 1000
#保留指定下标区间元素 ltrim key start end
ltrim users::1 2 5 #只保留从左起第2-5个元素
#向set中存放值 sadd key value【一次一个】或sadd key value1 value2 ..
sadd users::1 redis
sadd users::1 mysql mongodb #若set中已存在存放的value,则自动去重,只插入不存在的value
#查看当前key的set中的所有元素 smembers key
smembers users::1
#查看当前key的set的长度 scard key
scard users::1
#判断成员是否是当前key中的成员 sismember key member
sismember users::1 redis
#随机返回当前key中,set集合一个元素 srandmemeber key
srandmember users::1
#随机返回当前key中,set集合一个或多个元素 srandmember key count
srandmember users::1 2 #返回users::1中的两个元素
#随机移除当前key中,set集合一个元素 spop key
spop users::1
#随机移除当前key中,set集合一个或多个元素 spop key count
spop users::1 2
#返回A集合与B集合元素的差异,即B中存在而A不存在的元素 sdiff A B
sdiff users::1 users::2
#返回A集合与后续并集的元素差异,即并集中存在,而A不存在的元素 sdiff A B C ...
sdiff users::1 uses::2 users::3
#返回所以集合的差集,并存放到N中
sdiffstore N A B C .. #返回A、B、C集合的差集,并将差集存放到N中
#返回所有集合的交集 sinter A B ..
sinter users::1 users::2 #返回集合users::1与users::2所共有部分
#返回所有集合的交集,并将交集存放到 N中 sinterstore N A B..
sinterstore N A B #返回集合A与集合B的共有部分,并将共有部分存放到N集合中
sorted list有序链表,相比于hash,sorted list多出了一个score。
score决定了排序的顺序,score越大排序越靠后。
#向有序表中插入元素 zadd key score value
zadd user::1 1 redis
#向有续集中插入多个元素 zadd key score1 value1 score2 value2 score3 value ...
zadd user::1 2 monggodb 3 mysql 4 mysql #最后结果如上图,当重复插入相同value时,默认取最后一个值
#获取有序表当前key的元素个数 zcard key
zcard user::1
#获取有序表指定score的成员 zcount key min max
zcount user::1 1 3
#获取有序表中,指定成员的索引 zrank key member
zrank user::1 mysql #最后得到结果为3
#获取有序表中,指定成员的分数 zsocre key member
zsocre user::1 mysql
#通过索引,获取有序表中指定索引的成员 zrange key start stop
zrange user::1 1 6
#通过分数,获取有序表中指定分数的成员 zrangebyscore key min max
zrangebyscore user::1 2 5