文档章节

Redis理解

eatnothing
 eatnothing
发布于 2016/03/22 14:43
字数 1194
阅读 233
收藏 8

#####Redis

  • 使用内存存储的非关系key-value型数据库
  • 数据库存储选项:字符串(String),列表(List),集合(set),散列表(hash),有序集合(zset)
  • 支持两种数据持久化方式:Snapshotting(快照),Append-Only file(追加)
  • 支持主从复制
String

String的定义如下

struct sdshdr{
long len;
long free;
char buf[];
}

数据可以是字符串,整数或者浮点数,可以使用String类型缓存一些静态文件,如图片,css文件

String 支持 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负责保存数据

set应用在排行榜的顶帖次数排序

Hash

Hash类型是每个key对应一个hashTable,添加删除和修改操作的时间复杂度都是o(1),hash类型适合用于存储对象

Redis使用zipmap存储数据,使用zipmap添加删除和修改的操作时间都是o(n),如果field和value大小超出一定限制,Redis在内部将zip-map替换为正常的hashmap存储

包含键值对的无序散列表

Redis排序命令详解

Redis支持对List,Set,Sorted Set类型进行排序

支持desc,asc,以及按照字母顺序排序(alpha选项)

可以使用limit选项来限定返回结果的数量

事务处理

一般情况下,Redis接收到一个客户端发来的命令,立刻执行返回结果,但是当发出multi命令,便连接进入一个事务的上下文,Redis把连接发来的命令存入一个队列中,当次连接发出exec命令,Redis便开始执行队列中的所有命令

可调用discard命令取消一个事务,discard的命令是清空事务队列并退出事务上下文

持久化

Redis是基于内存的数据库,内存数据库有个严重的弊端,突然宕机或停电内存的数据不会被保存,redis提供了两种方式:内存快照和日志追加

内存快照是将内存中的数据以快照的方式写入二进制文件中

Redis使用save,bgsave命令告诉redis需要做一次内存快照操作,save命令在主线程之间保存内存快照,redis由单线程处理所有请求,执行save命令可能阻塞其他客户端的请求。

日志追加(aof)方式是把增加修改数据的命令通过write函数追加到文件尾部,Redis重启时读取appendonlf.aof文件中的命令并且执行,从而把数据写入到内存中,日志追加方式有效降低数据丢失的风险

主从同步

主从同步可以防止主机坏掉导致网站不能正常运作,这种方法既把从机设置为主机即可,Redis支持主从同步,

  • Master 可以有多个Slave
  • 不会阻塞master当一个或者多个slave与master进行初次同步数据时,master可以继续处理客户端的请求
  • 在master禁止数据持久化,只在slave进行数据持久化
杂项

内存淘汰:

  • 随机淘汰算法:从数据库随机删除掉一个key
  • LRU淘汰算法:从数据库中删除一个最近最少访问的key
  • TTL淘汰算法:从数据库中删除一个最快过期的key

自动关闭超时连接:Redis有自动关闭超时连接的功能,当有一个客户端在一定时间内不进行任何操作时候redis自动关闭它

清除过期的数据:redis为每个数据都设定了一个过期的时间,当达到这个设定的过期时间,redis便会把这个数据删除掉

© 著作权归作者所有

eatnothing
粉丝 38
博文 128
码字总数 68736
作品 0
昌平
程序员
私信 提问
安装redis和phpredis模块

安装redis shell> wget http://redis.googlecode.com/files/redis-2.0.4.tar.gz shell> tar zxvf redis-2.0.4.tar.gz shell> mv redis-2.0.4 redis shell> cd redis shell> make shell> redi......

老牛
2011/03/14
0
0
ITOO---“秒杀”选课之Redis序列化

1.我的选课 在进行选课活动中了为了尽量减少客户端和数据库的连接次数,在实现的思路是这样设计的:客户端的请求优先访问Redis缓存空间,如果Redis中没有则从数据库中加载,并添加到Redis中。...

mengdonghui123456
2017/08/06
0
0
Redis sort命令详解

redis的sort命令,可能算得上redis里面最复杂的一个命令了,命令原型如下: 如果不仔细看文档,或者看源码,一下子真的不知道这个命令怎么用。首先我们可以去掉LIMIT offset count这个选项,...

丢失的羊羔
2016/10/13
19
0
深入理解 Redis 内部实现

相信很多人已经对Redis有所了解,包括其丰富的数据结构及操作,高性能,持久化等等。而Redis文档对每一个命令的复杂度也有相当详细的描述。下面PPT则是深入Redis内部,对Redis的内部实现进行...

红薯
2011/10/31
2.5K
0
基于C#的MongoDB数据库开发应用(4)--Redis的安装及使用

在前面介绍了三篇关于MongoDB数据库的开发使用文章,严格来讲这个不能归类于MongoDB数据库开发,不过Redis又有着和MongoDB数据库非常密切的关系,它们两者很接近,Redis主要是内存中的NoSQL...

walb呀
2017/12/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

以太坊中文文档翻译-区块

本文原文链接 点击这里获取Etherscan API 中文文档(完整版) 完整内容排版更好,推荐读者前往阅读。 区块(Blocks) 区块相关的 API,接口的参数说明请参考Etherscan API 约定, 文档中不单独...

Tiny熊
23分钟前
1
0
Linux 内核的一个问题

是virtio 驱动,但是没有启动 virtio-mmio virtio-mmio.0: Failed to enable 64-bit or 32-bit DMA. Trying to continue, but this might not work.....[ 1.047924] md: ... autorun......

MtrS
47分钟前
2
0
MySQL主从配置

17.1 MySQL主从介绍 17.2 准备工作 17.3 配置主 17.4 配置从 17.5 测试主从同步 一、 MySQL主从介绍

tobej
57分钟前
2
0
读书replay《博弈与社会》.1.20190526

前情 《美丽心灵》,一部讲数学家约翰·福布斯·纳什的电影,我第一次听到博弈理论就是在这部电影里。看过电影之后就一直想知道,博弈论究竟讲了什么。很久之后,20190417这天,我刷JD的购物...

wanxiangming
今天
2
0
iOS TableView层级结构剖析

首先上图 下面来分析一下tableView的层级结构 tableView的组成: 1.整个tableView有且仅有一个头部和尾部就是tableViewHeadView和tableViewFooterView2.tableView 可以有多个section,一个s...

HOrange
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部