Redis提供了5种基本的数据类型,本章节及后面几个章节主要介绍如下内容:

  1. 了解全局命令
  2. 各数据结构特点和编码、命令使用。

 

1 全局命令

 

redis exist 和 get 哪个快 redis gem_redis 数据类型 应用场景

2 string

Redis的基本数据类型。String的值可以使字符串、数字甚至是二进制,但是最大不能超过512M。

redis exist 和 get 哪个快 redis gem_字符串_02

(1)常用命令

redis exist 和 get 哪个快 redis gem_缓存_03

 

  • set get mset mget 设置和获取值,单个与批量。

如:#set hello world

#mset a 1 b 2

redis exist 和 get 哪个快 redis gem_字符串_04

 

  • incr decr incrby decrby 原子加减操作,带有by的可以指定原子加减的数值。

如:#incr a

#incrby a 2

redis exist 和 get 哪个快 redis gem_字符串_05

 

redis exist 和 get 哪个快 redis gem_字符串_06

 

  • setnx msetnx 单个和批量的原子设置值操作。如果指定的Key不存在,则设定该Key持有指定字符串Value,此时其效果等价于SET命令。相反,如果该Key已经存在,该命令将不做任何操作并返回。
  • getset 原子设置获取
  • strlen append getrange setrange 截取或者设置部分字符串。

  语法:#strlen key, append key value, getrange key start end , setrange key offset value

  • setex 原子设置值并且设置有效时间。

      语法:#setex key seconds vaule 

redis exist 和 get 哪个快 redis gem_redis 数据类型 应用场景_07

  

redis exist 和 get 哪个快 redis gem_redis 数据类型 应用场景_08

redis exist 和 get 哪个快 redis gem_redis_09

 

  1. 内部编码

String类型的内部编码主要有以下3种,redis会根据当前值的类型决定使用哪种内部编码:

  1. int: 8个字节的长整形。
  2. embstr:<=39 bytes
  3. raw: >39 bytes

redis exist 和 get 哪个快 redis gem_缓存_10

3. bitmaps

Bitmaps 本身不是一种数据结构,实际上它就是string,但是他可以对字符串的bit进行操作,常用命令为:

redis exist 和 get 哪个快 redis gem_redis 数据类型 应用场景_11

 

  • SETBIT 设置或清除指定偏移量上的bit: setbit key offset value
  • getbit 获取指定偏移量上的bit: getbit key offset
  • bitcount 计算给定字符串中,被设置为 1 的比特位的数量: bitcount key [start] [end]
  • bitop 对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 destkey 上: bitop operation destkey key [key ...]

    operation 可以是 AND 、 OR 、 NOT 、 XOR 这四种操作中的任意一种:

•AND ,对一个或多个 key 求逻辑并,并将结果保存到 destkey 。

•OR,对一个或多个 key 求逻辑或,并将结果保存到 destkey 。

•XOR,对一个或多个 key 求逻辑异或,并将结果保存到 d estkey 。

•NOT,对给定 key 求逻辑非,并将结果保存到 destkey 。

4. 应用场景

缓存功能:字符串最经典的使用场景,redis作为缓存层,Mysql作为存储层,绝大部分请求数据都是redis中获取,由于redis具有支撑高并发特性,所以缓存通常能起到加速读写和降低后端压力的作用。

计数器:许多应用都会使用redis作为技术的基础工具,他可以实现快速技术、查询缓存的功能,同时数据可以一步落地到其他的数据源。

如:视频播放数系统就是使用redis作为食品播放数计数的基础组件,用户每播放一次视频,使用string的incr命令将相应的视频播放数自增1。

共享session:一个分布式web服务将用户的session信息保存在各自服务器中,这样会造成一个问题,处于负载均衡的考虑,分布式访问会将用户信息的访问均衡到不同服务器上,用户刷新一次访问可能会需要重新登录,这个问题是用户无法容忍的,为避免这个问题可以用redis将用户session集中管理,在这种模式下只要保证redis的高可用和扩展性的,每次获取用户更新或查询登录信息都直接从redis中集中获取。

分布式锁:利用setnx命令实现。

限速:很多应用处于安全的考虑,会在每次进行登录时,让用户输入手机验证码,为了短信接口不被频繁访问,会限制用户每分钟获取验证码的频率,如一分钟不得超过5次,利用“set key value EX 60 NX”命令设置key的过期时间为60s,并且只有在key不存在的时候设置成功,在key的有效时间内再利用incr记录发送次数,从而实现限速的功能。还有些网站限制一个IP地址不能再一秒钟之内访问超过n次也可以用类似的思路