Redis 小案例 (一):实现网站访问频率限制

网站中经常需要用到网站限流,例如限制用户恶意爬虫获取网页信息以及在网站访问流量大时限制访问频率等等,这里使用 redis 做一个简单的网站登录限制案例。 一、使用 EXPIRE 进行访问频率限制 逻辑:用户登入网页,判断是否为第一次登入,如果是,创建一个新键记录访问次数为 1,并设置超时时间。后面再登入时先判 ... 阅读更多

Redis 设置键值过期时间

一、 expire 和 ttl 命令

1.1 基本用法

Redis 中的 EXPIER 命令可以给键值设置过期时间,相关的命令及其格式为:

两个命令分别表示设置秒级和毫秒级别的过期时间,到期之后系统会自动删除该键。

EXPIRE 命令返回 1 表示设置过期时间成功,返回 0 表示键不存在或者设置失败。

阅读更多

Redis 学习笔记:事务

一、事务的描述 和 MySQL 一样,Redis 中也有事务这一个概念,redis 中的事务也是可以用来执行一组命令的集合,同时也可以把事务当作一个命令。因为它的特性和命令无差,要么正确全部运行,要么错误都不运行。但是和 MySQL 的事务不同的是,redis 中的事务不支持回滚操作。也就是说,一旦事务出错,它没 ... 阅读更多

Redis 中的有序集合类型

一、基本操作

有序集合也是集合的一种,顾名思义,它和集合的不同之处在于它是有序的 ,而集合无序。它通过给集合中每一个元素都关联一个分数来是的元素有序,同时提供了多个方式获取排序之后的元素。

1.1 增加和删除元素

增加元素:

当 key 不存在时自动创建,分数支持整数和双精度浮点数,同时还可以使用+inf-inf 分别表示正无穷大和负无穷大。执行成功返回添加的元素个数。

删除元素:

移除元素,返回成功移除的个数。

阅读更多

Redis 中的集合类型

一、概念和原理

集合是 redis 中的基本数据类型之一,redis 中的集合可以用来存储一堆无序的元素,集合内的元素不会重复,只有存在或者不存在两种属性。

redis 集合内部是由 intsethashtable 实现的,当条件不满足时 redis 会自动转换内部编码。集合中使用 intset 的条件:

  1. 集合的所有的元素都是整数
  2. 集合中元素的个数不超过 512 个

一旦两者的任一条件不满足时,就会转换成 hashtable 编码。

阅读更多

Redis 学习笔记:列表类型

一、概述 redis 的列表类型可以存储一个有序的字符串列表,内部实现是一个双向链表,允许用户从两端插入元素。所以向两端插入数据的速度是极快的,而且获取数据时也是越接近两端速度越快,一个列表最多能容纳 2^32 - 1 个元素。 二、命令 2.1 在两端插入元素 LPUSH key value [valu ... 阅读更多

Redis 学习笔记:散列类型

一、概述 Redis 本生就是一个字典类型的键值关系数据库,结构为: 而其中还有一种散列类型的数据结构散列,它也是一种字典结构,存储了字段关系的映射。 散列就像是一个小的 redis 一样,只不过这个小型 redis 不支持其他类型,只能是字符串。 二、命令 2.1 设置和获取字段值 HSET key fi ... 阅读更多

Redis 中的位运算

一、基本用法 任何一门程序语言都离不开位运算这个功能,redis 虽然不是一门编程语言,但也是一个和编程密切关联的工具。因此位运算自然也是 redis 中不可或缺的功能。 redis 中位运算相关的方法: GETBIT key offset:获取第 offset 位的 bit,不存的的比特位返回 0 。 SETBIT ... 阅读更多

redis 字符串的基本用法和实现原理

一、基本用法 字符串是 redis 中的基本数据类型之一,能存储任何形式的字符串,包括二进制数据。同时,它还可以进行字符串运算、数据运算和位运算等操作。一个字符串最大能有 512M 。 字符串主要的操作命令有两个: GET KEY: 如果 KEY 存在就返回对应的值,如果不存在则返回空值 nil 。 SET KEY ... 阅读更多