Redis是一个客户端和服务器结构的程序,Redis的客户端有很多种形态
通过以下的方法实现Redis客户端和服务器交互,必须先进入Redis-cli客户端程序,才能输入Redis命令。
redis-cli //连接本地
redis-cli -h 127.0.0.1 -p 6379 //连接其他主机的端口 h代表host p代表post
桌面程序、web程序,使用场景很少
图形化程序依赖windows系统,而在实际工作中,用来办公的windows系统,连接到服务器可能有诸多限制。
类似于MySQL的c语言API 和 JDBC
命令 | 作用 | 备注 |
---|---|---|
set/get | ? 设置key值与value值/查询key值对应的value值 | |
keys | 查看匹配规则的key | 模糊查询,keys *很危险 |
exists | 查询对应的key是否存在 | |
del | 删除指定的key | 与MySQL删除数据的区别 |
expire/ttl | 给key设置过期时间/查询key的过期时间 | redis的过期策略 |
type | 查询key对应的value类型 |
?
get:根据key来取value
set:把key和value存储进去
?key和value都要是string类型的
set key1 value1
get key
用来查询当前服务器上匹配的key,通过一些特殊符号(通配符)来描述key的模样,匹配上述模样的key就能被查询下来
keys pattern
patten具体是怎么写的呢?
?? ? ? ? ?匹配任意一个字符
*? ? ? ? ? 匹配任意0个/多个任意字符
[abc]? ? 只能匹配到a b c,别的不行。相当于给出固定的选项了
[^a]? ? ? 排除a??
[a-c]? ? ?a,b,c都可以,两侧闭区间
set hello 1
set hbllo 1
ser hllo 1
set heeeeeeello 1
keys h?llo //匹配上hello hbllo
keys h*o //四个全匹配上
keys h[eb]llo //匹配上hello hbllo
keys h[^e]llo //匹配上hbllo
keys h[b-e]llo //匹配上hello hbllo
注意:keys命令的时间复杂度是O(N),所以在生产环境上,一般都禁止使用,尤其是keys *,查询所有的key。因为生产环境上的key非常多,而Redis是一个单线程的服务器,执行key *的时间非常长,就使Redis服务器被阻塞了,无法给其他客户端提供服务。
判定某个key是否存在,返回值是key存在的个数(针对查询多个key),可以一次查询一个或者多个
时间复杂度O(1),Redis组织这些key就是按照 哈希表 的方式来组织的
set hello 1
set hbllo 1
ser hllo 1
set heeeeeeello 1
exists hello //返回1
exists hello hbllo //两个key都存在,返回2
删除指定的key,可以一次删除一个或者多个,返回值是删除掉的key的个数
del hello //返回1
del hello hallo aaa //返回2,因为aaa并不存在
此处的删除并不严重,因为Redis主要的应用场景,就是作为缓存,此时Redis里存的只是一个热点数据,全量数据在MySQL类似的数据库中,一般来说删除几个key问题不大。但是如果Redis没有数据了,大部分请求直接打给MySQL,就容易把MySQL搞挂。
expire:给指定的key设置过期时间,设置的单位是秒。返回1表示设置成功,返回0表示设置失败。时间复杂度为O(1)。时间过了key自动删除。
很多业务场景,都是有时间限制的,比如手机验证码;优惠券在指定时间内有效;基于Redis的分布式锁,为了避免出现不能正确解锁的情况,通常都会在加锁的时候设置一下过期时间。
expire hello 300 //设置过期时间为5分钟(300秒)
对于计算机来说,秒是一个非常长的时间,于是pexpire出现了,单位是毫秒。
ttl:time to live。查看当前key的剩余过期时间还有多少。ttl单位是秒,pttl 单位是毫秒。返回-1代表没有过期时间,返回-2代表key不存在。
ttl hello
拓展:Redis的过期策略是怎么实现的。
查询key对应的value类型。在Redis中,key的类型都是string,value对应的可能存在多种数据类型,比如none,string,list,set,zset(有序集合),hash,stream(Redis作为消息队列的时候,使用这个类型).....时间复杂度O(1)
set key1 111
type key1 //返回string
lpush key2 111 222 333
type key2 //返回list
sadd key3 111 222 333
type key3 //返回set
hset key4 filed1 value1
type key4 //返回hash
?