148°

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

 

 

 

本文由【这很耳东先生】发布于开源中国,原文链接:https://my.oschina.net/u/3728166/blog/2248189

全部评论: 0

    我有话说: