Redis的API应用
全局命令
1,查看所有键:keys * set school dongnao set hello world
2,键总数 dbsize //2个键,如果存在大量键,线上禁止使用此指令
3,检查键是否存在:exists key //存在返回1,不存在返回0
4,删除键:del key //del hello school, 返回删除键个数,删除不存在键返回0
5,键过期:expire key seconds //set name test expire name 10 //10秒过期
ttl 查看剩余的过期时间
6,键的数据结构类型:type key //type hello //返回string,键不存在返回none
7,flushall 清空所有数据 flushdb 清空当前库数据,redis单机环境下有16个库(0-15)
单线程架构
列举例子:三个客户端同时执行命令
客户端1:set name test
客户端2:incr num
客户端3:incr num
执行过程:发送指令-〉执行命令-〉返回结果
执行命令:单线程执行,所有命令进入队列,按顺序执行,使用I/O多路复用解决I/O问题,后面有介绍(由于读写操作等待用户输入或输出都是阻塞的,所以 I/O 操作在一般情况下往往不能直接返回,这会导致某一文件的 I/O 阻塞导致整个进程无法对其它客户提供服务 ,IO多路复用模型是建立在内核提供的多路分离函数select基础之上的,使用select函数可以避免同步非阻塞IO模型中轮询等待的问题)
单线程快原因:纯内存访问, 非阻塞I/O(使用多路复用),单线程避免线程切换和竞争产生资源消耗
问题:如果某个命令执行,会造成其它命令的阻塞
字符串<String>
1,字符串类型:
实际上可以是字符串(包括XML JSON),还有数字(整形 浮点数),二进制(图片 音频 视频),最大不能超过512MB
2,设值命令:
set age 23 ex 10 //10秒后过期 px 10000 毫秒过期
setnx name test //不存在键name时,返回1设置成功;存在的话失败0
set age 25 xx //存在键age时,返回1成功
场景:如果有多客户同时执行setnx,只有一个能设置成功,可做分布式锁
3.获值命令:
get age //存在则返回value, 不存在返回nil
4.批量设值:
mset country china city beijing
5.批量获取:
mget country city address //返回china beigjin, address为nil
若没有mget命令,则要执行n次get命令
使用mget=1次网络请求+redis内部n次查询
6.计数:
incr age //必须为整数自加1,非整数返回错误,无age键从0自增返回1
decr age //整数age减1
incrby age 2 //整数age+2
decrby age 2//整数age -2
incrbyfloat score 1.1 //浮点型score+1.1
7.append追加指令:
set name hello; append name world //追加后成helloworld
8.字符串长度:
set hello “世界”;strlen hello//结果6,每个中文占3个字节
9.截取字符串:
set name helloworld ; getrange name 2 4//返回 llo
10.内部编码:
int: 8字节长整理//set age 100; object encoding age //返回int
embstr: 小于等于39字节串set name bejin; object encodeing name//embstr
raw: 大于39字节的字符串set a fsdfwerwerweffffffffffdfs//返回raw
Ps:
Flushall清除所有数据 flushdb 清库
redis 单点环境下有16个库 select 15 可以切换到第15个数据库 集群只有一个数据库0
应用场景
1.键值设计:
业务名:对象名:id:[属性],数据库为order, 用户表user,对应的键可为 order:user:1 或order:user:1:name
注意:
redis目前处于受保护模式,不允许非本地客户端链接,可以通过给redis设置密码,然后客户端链接的时候,写上密码就可以了
127.0.0.1:6379> config set requirepass 123456 临时生效
或者修改redis.conf requirepass 123456,启动时./redis-server redis.conf指定conf
./redis-cli -p 6379 -a 12345678 //需要加入密码才能访问
切换数据库:
select 2