redis概念
Redis(全称:Remote Dictionary Server 远程字典服务)是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。
它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能, 同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区
Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。
redis用作数据库,属于非关系型数据库的基于内存的数据库,
基于内存的非关系数据库还有 memcached
基于文件的非关系型的数据库有 ehcache
基于文档的非关系型的数据库有 mongodb
redis的优势
1,性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
2,丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
3,原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
4,丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
redis数据模型
Redis的外围由一个键、值映射的字典构成。与其他非关系型数据库主要不同在于:Redis中值的类型 不仅限于字符串,还支持如下抽象数据类型:
字符串列表
无序不重复的字符串集合
有序不重复的字符串集合
键、值都为字符串的哈希表
值的类型决定了值本身支持的操作。Redis支持不同无序、有序的列表,无序、有序的集合间的交集、并集等高级服务器端原子操作。
redis数据结构
Redis支持五种数据类型
string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)
zset是set的一个升级版本,
他在set的基础上增加了一个顺序属性,
这一属性在添加修改元素的时候可以指定,
每次指定后,zset会自动重新按新的值调整顺序。
可以理解了有两列的mysql表,
一列存value,一列存顺序。
操作中key理解为zset的名字。
zset利用dict(hash表)维护key -> value的映射关系,
用zsl(zskiplist)保存value的有序关系。zsl实际是叉数
不稳定的多叉树,每条链上的元素从根节点到叶子节点保持升序排序。
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
redis存储
redis使用了两种文件格式:全量数据和增量请求。
全量数据格式是把内存中的数据写入磁盘,便于下次读取文件进行加载;
增量请求文件则是把内存中的数据序列化为操作请求,用于读取文件进行replay得到数据,序列化的操作包括SET、RPUSH、SADD、ZADD。
redis的存储分为内存存储、磁盘存储和log文件三部分,配置文件中有三个参数对其进行配置。
save seconds updates,save配置,指出在多长时间内,有多少次更新操作,就将数据同步到数据文件。这个可以多个条件配合,比如默认配置文件中的设置,就设置了三个条件。
appendonly yes/no ,appendonly配置,指出是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面的save条件来同步的,所以有的数据会在一段时间内只存在于内存中。
appendfsync no/always/everysec ,appendfsync配置,no表示等操作系统进行数据缓存同步到磁盘,always表示每次更新操作后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次。
redis支持的语言
ActionScript
C
C++
C#
Clojure
Common Lisp
Dart
Erlang
Go
Haskell
Haxe
Io
Java
Node.js
Lua
Objective-C
Perl
PHP
Pure Data
Python
R
Ruby
Scala
Smalltalk
Tcl
若想学习更多redis的知识,可以去中文官网学习
http://www.redis.cn/documentation.html
也可以去W3Cschool学习:
https://www.w3cschool.cn/redis/