Redis重点内容(一)
提示:精力有限,暂不记录分布式相关内容
例如:第一章 Python 机器学习入门之pandas的使用
提示:不喜勿喷,谢谢配合。
前言
Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库。
特征:
- 数据间没有必然的关联关系
- 内部采用单线程机制进行工作
- 高性能。官方提供测试数据,50个并发执行100000 个请求,读的速度是110000 次/s,写的速度是81000次/s。
- 多数据类型支持
◆ 字符串类型 string
◆ 列表类型 list
◆ 散列类型 hash
◆ 集合类型 set
◆ 有序集合类型 zset/sorted_set - 支持持久化,可以进行数据灾难恢复
提示:以下是本篇文章正文内容
一、NoSql
众所周知,Redis是NoSql的代表之一。
NoSQL仅仅是一个概念,泛指非关系型的数据库,区别于关系型数据库,NoSql型数据库不保证关系数据的ACID特性。
NoSQL有如下优点:易扩展,NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。无形之间也在架构的层面上带来了可扩展的能力。大数据量,高性能,NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。
二、Redis
五种基本数据类型及应用场景
String
数据缓存: 服务器首先从 Redis 中获取数据,如果缓存层中没有,则从数据库中获取后先放入缓存再返回给应用服务器。
计数器: 在 Redis 中写入一个 value 为数值型的 key 作为平台计数器、视频播放计数器等。每个有效客户端访问一次,或视频每播放一次,直接修改 Redis 中的计数器,然后再以异步方式持久化到其它数据源中。
限速器: 为了防止 DoS(拒绝服务)攻击,一般都会限制 IP不能在一秒内访问超过 x 次。而Redis 可以可以结合 key 的过期时间与 incr 命令来完成限速功能,充当限速器。代码如下
// 客户端每提交一次请求,都会执行下面的代码
// 等价于 set ip 1 ex 60 nx
// 指定新 ip 作为 key 的缓存过期时间为 60 秒
int x = 10;
Boolean exists = redis.set(ip, 1, “EX 60”, “NX”);
if(exists != null || redis.incr(ip) <= x) {
// 通过
} else {XXXXXXXX}
Hash
存储对象:。key 为对象名称,value 为描述对象属性的 Map,对象属性的修改在 Redis 中就可直接完成。不像 String 型 Value 存储对象,String对象是序列化过的,例如序列化为 JSON 串,对对象属性值的修改需要先反序列化为对象后再修改,修改后再序列化为 JSON 串后写入到 Redis。
List
主要是通过构建不同的数据结构来实现相应的业务功能。
栈: 通过 lpush + lpop 可以实现栈数据结构效果:先进后出。通过 lpush 从列表左侧插入数据,通过 lpop 从列表左侧取出数据。
队列: 通过 lpush + rpop 可以实现队列数据结构效果:先进先出。通过 lpush 从列表左侧插入。
数据,通过 rpop 从列表右侧取出数据。
Set
主要是通过构建不同的数据结构来实现相应的业务功能。
黑白名单
服务器中要设置用于访问控制的黑名单。如果直接将黑名单写入服务器的配置文件,那么存在的问题是,无法动态修改黑名单。此时可以将黑名单直接写入 Redis,只要有客户端来访问服务器,服务器在获取到客户端 IP后先从 Redis的黑名单中查看是否存在该 IP,如果存在,则拒绝访问,否则访问通过。
ZSet
排行榜: 将播放量作为 score,将
作品 id 作为 member,将用户评价积分或销售量作为 score,将商家 id 作为 member。使用zincrby 增加排序 score,使用 zrevrange 获取 Top 前几名,使用 zrevrank 查询当前排名,使用zscore 查询当前排序 score 等。
``
总结
例如:以上就是今天记录的内容,本文仅仅简单介绍了NoSql和Redis的五种基本数据类型的使用场景,下一篇详细记录Redis持久化方式和配置文件。