一、Redis客户端

Redis是一个客户端和服务器结构的程序,Redis的客户端有很多种形态

通过以下的方法实现Redis客户端和服务器交互,必须先进入Redis-cli客户端程序,才能输入Redis命令。

1、自带了命令行客户端
redis-cli //连接本地
redis-cli -h 127.0.0.1 -p 6379 //连接其他主机的端口 h代表host p代表post
2、图形化界面的客户端

桌面程序、web程序,使用场景很少

图形化程序依赖windows系统,而在实际工作中,用来办公的windows系统,连接到服务器可能有诸多限制。

3、基于Redis的api自行开发客户端(最常用的方法)

类似于MySQL的c语言API 和 JDBC

二、Redis常用命令

命令

作用

备注

set/get

  设置key值与value值/查询key值对应的value值

keys

查看匹配规则的key

模糊查询,keys *很危险

exists

查询对应的key是否存在

del

删除指定的key

与MySQL删除数据的区别

expire/ttl

给key设置过期时间/查询key的过期时间

redis的过期策略

type

查询key对应的value类型

 

1、get 和 set

get:根据key来取value

set:把key和value存储进去

 key和value都要是string类型的

set key1 value1
get key
2、keys

用来查询当前服务器上匹配的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服务器被阻塞了,无法给其他客户端提供服务。

3、exists

判定某个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
4、del

删除指定的key,可以一次删除一个或者多个,返回值是删除掉的key的个数

del hello           //返回1
del hello hallo aaa //返回2,因为aaa并不存在

此处的删除并不严重,因为Redis主要的应用场景,就是作为缓存,此时Redis里存的只是一个热点数据,全量数据在MySQL类似的数据库中,一般来说删除几个key问题不大。但是如果Redis没有数据了,大部分请求直接打给MySQL,就容易把MySQL搞挂。

5、expire和ttl

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


6、type

查询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