redis 基础

  • 单线程的redis

多快?单线程每秒钟达到万级别的处理能力。归结为三点:

1、纯内存访问,redis 将所有数据放在内存租户,内存响应时长大约100纳秒,这是redis每秒万级别访问的基础。

2、非阻塞IO多路复用模式。使用epoll作为IO多路复用技术的实现,再加上redis自身处理模型将epoll中的链接、读写、关闭都转换为事件,不在网络IO上浪费过多时间。

3、单线程避免了线程上下文间切换及多线程竞争带来的开销。

但是,单线程会有一个问题:对每个执行命令的执行时间都是有要求的,执行时间不能太长,否则会造成其它命令的阻塞,对redis这种高性能的服务来说是致命的,所以redis是面向快速执行场景的数据库。

  • redis 数据结构

  1. 字符串

字符串是redis基础的数据结构,其它几种数据结构是在字符串类型的基础上构建的。字符串类型的值可以是字符串(json、xml)、数字、二进制但最大不能超过512M。

字符串内部编码有3种:

  • int:8个字节的长整型;
  • embstr:小于等于39个字节的字符串;
  • raw:大于39个字节的字符串。

命令:

> set key value

编码模式:> object encoding key

应用场景:

  • 分布式共享session:实现用户登录后的session在分布式环境下共享到不同服务器(域名下),每次用户更新或查询登录信息从redis中集中获取;
  • 快速计数、查询缓存:使用 redis.incr(key);
  • 缓存功能:典型的场景=> 数据存取于 redis与db之间;
  • 限速功能:比如每次用户登录时让用户输入短信验证码,但是获取短信一般限制一分钟内不超过5次。类似可限制ip每秒内访问次数等等。
    String key= phoneNum;
    isExists =  redis.setNX(key,1,'EX 60','NX');
    if(isExists!=null || redis.incr(key)<=5){
       //send sms message
    }else{
       //限速
    }

     

2、hash

哈希类型是指redis key对应的值本身又是一个键值对结构的类型。

value={
{field,value},{field,value},{field,value}
}

命令操作: 

>hset key field value

>hget key field

>hdel key field [field ...]

>hlen key

>hmget key field [field ...]

>hmset key field value [filed vlaue ...]

#某一field是否存在
>hexists key field


#获取hash某一key所有的 field
>hkeys key


#获取某一key所有的value
>hvals key

#获取所有的field-value
>hgetall key


哈希内部编码有2种:

  • ziplist(压缩列表):元素个数小于hash-max-ziplist-entries配置(默认512)且所有值都小于hash-max-ziplist-value配置(默认64字节)时,会采用压缩列表作为内部实现,相比哈希表结构节省内存。
  • hashtable(哈希表):非ziplist 时,采用哈希表内部实现,hashtable 读写复杂度O(1).

hash使用场景:

数据库关系表行信息映射为hash类型。

3、list 列表

list列表类型是用来存储多个有序的字符串。一个列表最多存储2的32次方-1个元素。

 

  1. set 集合
  2. zset 有序集合
  • 稍等

附参考:《Redis开发与运维》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值