亲宝软件园·资讯

展开

最全Redis基础知识

码农张。 人气:0
## NoSQL概述 ### 什么是NoSQL NoSQL不仅仅是SQL,它是Not Only SQL 的缩写,也是众多非关系型数据库的统称NoSQL和关系型数据库一样,也是用来存储数据的仓库。 ### 为什么需要NoSQL? 随着互联网的高速发展,数据量、访问量呈爆发式式增长。比如12306中国铁路票务系统。 一年售出车票有30多亿张; 网上售票比例超过了80%; 互联网高峰日售出车票达到了1282多万张; 高峰时每秒售票超出1000张; 网站高峰日访问量超过了1600亿次…… 12306售票系统 已成为全球最大的票务交易系统 中国人民彻夜排队买票已成为历史 这么多的数据都是需要存储的,然而传统的关系型数据库面对这些海量数据的存储,以及实现高访问量、高并发读/写,就会显的力不从心,尤其是当面对超大规模、高并发、高吞吐量的大型动态网站的时候,就会暴露出很多难以克服的问题,影响用户体验。为了满足对海量数据的高速存储需求,实现高并发、高吞吐量,NoSQL应运而生。NoSQL的出现可以解决传统关系型数据库所不能解决的问题。 ### NoSQL特点 1. 容易扩展,方便使用,数据之间没有关系。 2. 数据模型非常灵活,无需提前为要存储的数据建立字段类型,随时可以存储自定义的数据格式。 3. 适合大数据量、高性能的存储。 4. 具有高并发读/写、高可用性。 ## Redis概述 ### Redis由来 2008年,意大利的一家创业公司Merzia推出了一款基于MySQL的网站实时统计系统LLOOGG,没多久该公司的创始人Sanfilippo对MySQL的性能感到失望,于是他决定亲自为LLOOGG量身定做一个数据库,并于2009年开发完成,这个数据库就是Redis。 ### 什么是Redis Redis(全称:Remote Dictionary Server 远程字典服务)是一个开源的、使用C语言编写、支持网络、可基于内存亦可持久化的Key-Value数据库,并提供多种语言的API。 **Redis能读的速度是110000次/s,写的速度是81000次/s 。** ### Redis为什么快 1. 完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。 2. 数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的; 3. 采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗; 4. 使用多路I/O复用模型,非阻塞IO; ## Redis的安装和使用 ### Windows下安装 下载地址:https://github.com/MSOpenTech/redis/releases。 Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我们下载 Redis-x64-xxx.zip解压后,将文件夹重新命名为 redis。 ![](http://coderzcr.gitee.io/sensor-java-picture/pictures/blog20200314103801.jpg) 打开文件夹,内容如下: ![](http://coderzcr.gitee.io/sensor-java-picture/pictures/blog20200314103802.jpg) 双击redis-server.exe,启动服务端,输入之后,会显示如下界面: ![](http://coderzcr.gitee.io/sensor-java-picture/pictures/blog20200314103803.jpg) 这时候启动一个 cmd 窗口,原来的不要关闭,不然就无法访问服务端了。 切换到 redis 目录下运行: ``` redis-cli.exe -h 127.0.0.1 -p 6379 ``` ### Linux 下安装 下载地址:[http://redis.iohttps://img.qb5200.com/download-x/download](http://redis.iohttps://img.qb5200.com/download-x/download),下载最新稳定版本。 本教程使用的最新文档版本为 2.8.17,下载并安装: ``` $ wget http:/https://img.qb5200.com/download-x/download.redis.io/releases/redis-2.8.17.tar.gz $ tar xzf redis-2.8.17.tar.gz $ cd redis-2.8.17 $ make ``` make完后 redis-2.8.17目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli,两个程序位于安装目录 src 目录下: 下面启动redis服务. ``` $ cd src $ ./redis-server ``` 注意这种方式启动redis 使用的是默认配置。也可以通过启动参数告诉redis使用指定配置文件使用下面命令启动。 ``` $ cd src $ ./redis-server ../redis.conf ``` redis.conf 是一个默认的配置文件。我们可以根据需要使用自己的配置文件。 启动redis服务进程后,就可以使用测试客户端程序redis-cli和redis服务交互了。 比如: ``` $ cd src $ ./redis-cli redis> set foo bar OK redis> get foo "bar" ``` ### Ubuntu 下安装 在 Ubuntu 系统安装 Redis 可以使用以下命令: ``` $sudo apt-get update $sudo apt-get install redis-server ``` 启动 Redis ``` $ redis-server ``` 查看 redis 是否启动? ``` $ redis-cli ``` 以上命令将打开以下终端: ``` redis 127.0.0.1:6379> ``` 127.0.0.1 是本机 IP ,6379 是 redis 服务端口。现在我们输入 PING 命令。 ``` redis 127.0.0.1:6379> ping PONG ``` 以上说明我们已经成功安装了redis。 ## Redis的数据结构 ### Redis 字符串(String) #### 概述 字符串类型是Redis中最为基础的数据存储类型。在Redis中字符串类型的Value最多可以容纳的数据长度是512M。 #### 常用命令 - 赋值 ![](http://coderzcr.gitee.io/sensor-java-picture/pictures/blog20200314103804.jpg) - 取值 ![](http://coderzcr.gitee.io/sensor-java-picture/pictures/blog20200314103805.jpg) - 删除 del key:删除指定的key ![](http://coderzcr.gitee.io/sensor-java-picture/pictures/blog20200314103806.jpg) - 数值增减 ![](http://coderzcr.gitee.io/sensor-java-picture/pictures/blog20200314103807.jpg) ### Redis 哈希(Hash) #### 概述 Hash类型可以看出具有String key 和String value 的map容器。所以该类型非常适合于存储值为对象的信息。如username、password和age等。每一个hash可以存储4294967295个键值对 #### 常用命令 - 赋值 ![](http://coderzcr.gitee.io/sensor-java-picture/pictures/blog20200314103808.jpg) - 取值 ![](http://coderzcr.gitee.io/sensor-java-picture/pictures/blog20200314103809.jpg) ![](http://coderzcr.gitee.io/sensor-java-picture/pictures/blog20200314103810.jpg) - 删除 ![](http://coderzcr.gitee.io/sensor-java-picture/pictures/blog20200314103811.jpg) - 其他 ![](http://coderzcr.gitee.io/sensor-java-picture/pictures/blog20200314103812.jpg) ![](http://coderzcr.gitee.io/sensor-java-picture/pictures/blog20200314103813.jpg) ### Redis 列表(List) #### 概述 List类型是按照插入顺序排序的双向链表。从元素插入和删除的效率视角来看,如果我们在链表的两头插入或删除元素,这将会是非常高效的操作,即使链表中已经存储了大量的数据,该操作也可以在常量时间内完成。 #### 常用命令 - 两端添加 ![](http://coderzcr.gitee.io/sensor-java-picture/pictures/blog20200314103814.jpg) - 查看列表 ![](http://coderzcr.gitee.io/sensor-java-picture/pictures/blog20200314103815.jpg) - 两端弹出 ![](http://coderzcr.gitee.io/sensor-java-picture/pictures/blog20200314103816.jpg) ![](http://coderzcr.gitee.io/sensor-java-picture/pictures/blog20200314103817.jpg) - 获取列表中元素的个数 ![](http://coderzcr.gitee.io/sensor-java-picture/pictures/blog20200314103818.jpg) ### Redis 集合(Set) #### 概述 Set类型为没有排序的字符集合。Set集合中不允许出现重复的元素。Set类型在功能上还存在一个非常重要的特性,即集合的聚合操作效率极高。 #### 常用命令 - 添加/删除元素 ![](http://coderzcr.gitee.io/sensor-java-picture/pictures/blog20200314103819.jpg) ![](http://coderzcr.gitee.io/sensor-java-picture/pictures/blog20200314103820.jpg) - 获得集合中的元素 ![](http://coderzcr.gitee.io/sensor-java-picture/pictures/blog20200314103821.jpg) - 集合的差集运算 A-B ![](http://coderzcr.gitee.io/sensor-java-picture/pictures/blog20200314103822.jpg) - 集合的交集运算 A∩B ![](http://coderzcr.gitee.io/sensor-java-picture/pictures/blog20200314103823.jpg) - 集合中的并集运算 A∪B ![](http://coderzcr.gitee.io/sensor-java-picture/pictures/blog20200314103824.jpg) ### Redis 有序集合(sorted set) #### 概述 有序集合和Set类型即为相似,都不允许重复的成员出现在一个Set中。它们之间的主要差别是有序集合中的每一个成员都会有一个score与之关联,通过score来为集合中的成员进行从小到大的排序。 #### 常用命令 - 添加元素 ![](http://coderzcr.gitee.io/sensor-java-picture/pictures/blog20200314103825.jpg) - 获得元素 ![](http://coderzcr.gitee.io/sensor-java-picture/pictures/blog20200314103826.jpg) ![](http://coderzcr.gitee.io/sensor-java-picture/pictures/blog20200314103827.jpg) - 删除元素 ![](http://coderzcr.gitee.io/sensor-java-picture/pictures/blog20200314103828.jpg) - 范围查询 ![](http://coderzcr.gitee.io/sensor-java-picture/pictures/blog20200314103829.jpg) ![](http://coderzcr.gitee.io/sensor-java-picture/pictures/blog20200314103830.jpg) ## Redis特性 ### 多数据库 一个Redis实例最多可提供16个数据库,下标从0到15,客户端默认连接第0号。 ### 消息订阅与发布 1. subscribe channel:订阅频道。例如subscribe mychat,订阅mychat这个频道 2. psubscribe channel*:批量订阅频道。例如psubscribe s*,订阅以s开头的频道。 3. publish channel content:在指定的频道中发布消息,如punlish mychat ‘today is a newday’ ### Redis事务 Redis作为NoSQL数据库也提供了事务机制。 特点: 1. 在事务中的所有命令都将会被串行化的顺序执行,事务执行期间,Redis不会再为其他客户端请求提供任何服务,从而保证了事务中的所有命令被原子的执行。 2. 和关系型数据库中的事务相比,在Redis事务中如果有某一条命令执行失败,其后的命令仍然被继续执行。 ### Redis持久化 Redis的高性能是由于其将所有的数据都存储在了内存中,为了使Redis在重启之后仍能保证不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化。 Redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式。可以单独使用,也可以结合使用。 1. RDB持久化(默认) 在指定的时间间隔内将内存中的数据集快照写入磁盘。 2. AOF持久化 以日志的形式记录服务器所处理的每一个写操作,在Redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的。 ### Key值过期 ## Redis的应用场景 1. 缓存(最多使用) 2. 聊天室的在线好友列表 发布/订阅 3. 任务队列(秒杀、抢购) 消息队列、(先进先出、后进先出) (List) 4. 应用排行榜(有序集合) 5. 网站访问统计(Set) 6. 数据过期处理(可以精确到毫秒) 7. 分布式集群框架中的session分离。

加载全部内容

相关教程
猜你喜欢
用户评论