Redis
Redis是key-value类型的内存数据库。value可以是String, List, Set, Sorted Set, Hash等类型的数据结构。
PHPer: phpredis
理论支持
缓存
可以进行高速数据交换的存储器
使用缓存目的(Web)
减轻数据库的负担,在有限的资源下提供尽可能大的吞吐量
常用应用层缓存技术
Memcached: 分布式内存缓存服务器
Redis *
上面两个都是NoSQL系列缓存,它们到底是数据库软件还是缓存软件?
前期准备工作
安装
方便快捷式*
1sudo apt-get install redis-server编译安装
解压
cd到解压目录
make
make执行完,在当前目录下便会生成几个可执行文件,其中比较重要的是:
redis-server: Redis服务器程序
redis-cli: Redis命令行操作工具
安装Redis
123sudo cp redis.conf /etc/sudo cp redis-benchmark redis-cli redis-server /usr/bin
修改配置文件
自行去/etc/redis目录下查看redis.conf,通过网上查阅学习。
运行
123redis-server || /usr/bin/redis-server /etc/redis.confps -x | grep redis #检查Redis是否启动
实际操作一把
运行redis-cli
|
|
相关命令请自行去网上查阅教程。
Redis支持的数据类型
String
支持命令set、get、mset、mget、incr等。
可使用String类型缓存一些静态文件,如图片文件、CSS文件等,可提高网站运行速度。
支持incr操作,用作统计计算,如访问量等很方便
List
List的数据类型指key对应的value是一个双向链表结构,所以list支持所有的链表操作。
List可以实现消息队列,减轻数据库的压力,每次有消息到达时就把消息队列放进尾部(rpush),取出时从队列头部取出(lpop)。
Set
Set数据类型是一种无序集合,在redis内部使用hashtable实现,查找和删除的时间复杂度为o(1)。
set数据优点是快速查找元素是否存在,用于记录一些不能重复的数据
set类型通常用于记录做过某些事情。
如注册帐号时,检测重复用户名; 投票操作等。
Sorted Set
SortedSet属于有序集合,通过一个double类型的整数score进行排序,SortedSort通过SkipList(跳跃表)和HashTable组合完成,SkipList负责排序,HashTable负责保存数据。
例如,应用在排行榜的顶帖次数排序。
Hash
Hash类型是每个key对应一个hashTable,添加删除和修改操作的时间复杂度都是o(1),hash类型适合用于存储对象。
Redis使用zipmap存储数据,使用zipmap添加删除和修改的操作时间都是o(n),如果field和value大小超出一定限制,Redis在内部将zip-map替换为正常的hashmap存储。
例如,应用保存用户信息,用户id作key值
各类型支持的命令请自行查阅
Redis排序命令
Redis支持对List,Set,Sorted Set类型进行排序。
支持desc,asc,以及按照字母顺序排序(alpha选项)。
可以使用limit选项来限定返回结果的数量。
事务处理
一般情况下,Redis接收到一个客户端发来的命令,立刻执行返回结果,但是当发出multi命令,便连接进入一个事务的上下文,Redis把连接发来的命令存入一个队列中,当次连接发出exec命令, Redis便开始执行队列中的所有命令。
可调用discard命令取消一个事务,discard的命令是清空事务队列并退出事务上下文。
另外,Redis只能保证事务的每个命令能够连续执行,但是如果事务中有命令执行失败,Redis不进行回顾操作。
持久化
Redis是基于内存的数据库,内存数据库有个严重的弊端,突然宕机或停电内存的数据不会被保存,Redis提供了两种方式:内存快照和日志追加。
内存快照
内存快照是将内存中的数据以快照的方式写入二进制文件中
Redis使用save,bgsave命令告诉redis需要做一次内存快照操作,save命令在主线程之间保存内存快照,redis由单线程处理所有请求,执行save命令可能阻塞其他客户端的请求。
日志追加(aof)
日志追加(aof)方式是把增加修改数据的命令通过write函数追加到文件尾部,Redis重启时读取appendonlf.aof文件中的命令并且执行,从而把数据写入到内存中,日志追加方式有效降低数据丢失的风险。
主从同步
略
VM(虚拟内存)
略
发布和订阅
具体看实例