Redis

什么是NoSQL

NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。它指的是非关系型的数据库。随着互联网2003年之后web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的交友类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。

NoSQL的特点

Nosql 是以key-value形式存储,和传统的关系型数据库不一样。不一定遵循传统数据库的一些基本要求,比如说,不遵循sql标准,事务,表结构等等,非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。

关系型数据库的特点

关系型数据库,是指采用了关系模型来组织数据的数据库。简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。如mysql,sql server, oracle等

关系型数据库瓶颈

高并发读写需求

网站的用户并发性非常高,往往达到每秒上万次读写请求,对于传统关系型数据库来说,硬盘I/O是一个很大的瓶颈

海量数据的高效率读写

网站每天产生的数据量是巨大的,对于关系型数据库来说,在一张包含海量数据的表中查询,效率是非常低的

高扩展性和可用性

在基于web的结构(即浏览器/服务器)当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,数据库却没有办法简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展 是非常痛苦的事情,往往需要停机维护和数据迁移。

mysql 和redis 的对比

  MySQL Redis
类型 关系型数据库 非关系型数据库
存储位置 硬盘 内存和硬盘
数据过期 不支持 支持
读写性能 非常高

Redis是什么

Redis 是一款依据BSD开源协议发行的高性能Key-Value存储系统(cache and store)。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
 
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。

作者

Redis的作者,他叫Salvatore Sanfilippo,来自意大利的西西里岛,他使用的网名是antirez,现在居住在卡塔尼亚。目前供职于Pivotal公司。

性能

下面是官方的bench-mark数据:
 
测试完成了50个并发执行100000个请求。
 
设置和获取的值是一个256字节字符串。
 
Linuxbox是运行Linux2.6,这是X3320Xeon2.5ghz。
 
文本执行使用loopback接口(127.0.0.1)。
 
结果:读的速度是110000次/s,写的速度是81000次/s。

优势

  1. Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  2. Redis支持数据的备份,即master-slave(主—从)模式的数据备份。
  3. Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
Memcache NoSQL数据库 存放在内存中
Memcache和Redis的区别
  Memcache Redis
存储位置 内存 内存和硬盘
持久化 不支持 支持
过期 支持,只能在创建键值对的时候设置 可以在创建时也可以在之后设置
数据类型 只支持string 多种
性能 非常高


Redis使用场景

缓存

缓存 这个不必说了,性能优于 Memcached,数据结构更多样化。

计数器应用

计数器应用 Redis 的命令都是原子性的,你可以轻松地利用 INCR,DECR 命令来构建计数器系统。

实时防攻击系统

实现一个 防攻击系统。用一个set 存储所有异常IP,当下一个请求到达,取出ip 看是否在这个集合里,做出相应的操作。

排行榜

排行榜应用. 采用 sorted set 排序的集合,将新闻评论的赞同数作为集合元素的权重,取出某个新闻最热的前10条评论。同样的 新浪微博 今日热点排行榜,也可以用redis的排序集合来实现。

设定有效期的应用

需要精准设定过期时间的应用 比如你可以把上面说到的 sorted set 的 score 值设置成过期时间的时间戳,那么就可以简单 地通过过期时间排序,定时清除过期数据了,不仅是清除 Redis 中的过期数据,你完全可以 把 Redis 里这个过期时间当成是对数据库中数据的索引,用 Redis 来找出哪些数据需要过期 删除,然后再精准地从数据库中删除相应的记录。

自动去重应用

Uniq 操作,获取某段时间所有数据排重值 这个使用 Redis 的 set 数据结构最合适了,只需要不断地将数据往 set 中扔就行了,set 意为 集合,所以会自动排重。

队列

构建队列系统 使用 list 可以构建队列系统,使用 sorted set 甚至可以构建有优先级的队列系统。  

消息订阅系统

Pub/Sub 构建实时消息系统 Redis 的 Pub/Sub 系统可以构建实时的消息系统,比如很多用 Pub/Sub 构建的实时聊天系统 的例子。

谁在使用redis

可以在官网上查看: http://redis.io/
中文网站: http://www.redis.cn/

比较著名的公司有:
github
blizzard
stackoverflow
flickr
 
国内
新浪微博(全球最大的redis集群)
    2200+亿 commands/day 5000亿Read/day 500亿Write/day
    18TB+ Memory
    500+ Servers in 6 IDC 2000+instances
淘宝
腾讯微博
掌中浩阅iReader
聚美优品
腾讯-微影时代

Redis安装

下载

Redis 的官方下载站是 http://redis.io/download,可以去上面下载最新的安装程序下来

安装

linux

解压
tar xzf redis-{version}.tar.gz
切换目录
cd redis-{version}
安装
make
拷贝可执行文件
到src目录下将 redis-benchmark(压力测试工具)、redis-check-aof(检查.aof文件完整性的工具)、redis-check-dump(检查数据文件完整性的工具)、redis-sentinel(监控集群运行状态)、redis-server(服务端)、redis-cli(客户端)这几个文件 移动到工作目录下。
拷贝配置文件
接着,复制redis.conf到<REDIS_HOME>/conf/下,修改配置文件,来配置Redis服务器。
 
启动服务
<REDIS_HOME>/redis-server redis.conf
连接服务
<REDIS_HOME>/redis-cli -h 127.0.0.1 -p 6379

windows

windows下安装redis仅做了解,此软件由微软负责维护,更新并不及时,官方强烈建议不要在生产环境使用
启动服务器: redis-server.exe redis.conf
连接服务器: redis-cli.exe -h 127.0.0.1 -p 6379,其中 127.0.0.1是本地ip,6379是redis服务端的默认端口

可执行程序

Redis-benchmark   压力测试
Redis-check-aof   检查redis持久化命令文件的完整性
Redis-check-dump   检查redis持久化数据文件的完整性
Redis-cli    redis在linux上的客户端
Redis-sentinel   做集群用的
Redis-server     linux上的服务端

Redis配置

配置文件详解

见pdf

Redis性能测试

redis-benchmark -h 192.168.0.199 -p 6379 -c 100 -n 100000
并发100,每个客户端发送10w个请求

如何学习Redis

redis在线入门 : http://try.redis.io/
redis 中文资料站: http://www.redis.cn/
redis 命令手册: http://www.redisdoc.com/en/latest/index.html

Redis数据存储

两种数据持久化方式 是由配置文件  redis.conf决定的。
Save 参数配置 以数据文件的形式持久化内存中的数据到磁盘上
Appendonly  参数配置  记录所有对内存数据有修改的命令 到磁盘上

数据结构

作者称redis是一种数据结构服务器,因为它支持丰富的数据结构   string   list   set   sorted set    hash。    另外,还支持消息订阅与发布    pub/sub
 
Redis里面所有的数据都是   key – value  键值对

key操作

Key 基本操作:DEL   EXISTS   P/EXPIRE P/EXPIREAT KEYS  RENAME  SORT   TYPE  TTL  PTTL  OBJECT  MOVE
DEL key [key ...]
set name “zhangsan”            expire name  30   
Keys  *a*      keys n???    Keys  *
SORT 列表、集合、有序集合  根据key对应的值进行排序    SORT key DESC(降序)
TTL  返回给定 key 的剩余生存时间,单位秒
OBJECT REFCOUNT(引用次数)/ ENCODING(内部编码)/ IDLETIME(空置时间 秒)   key
MOVE  name   1        将当前数据库  key为name的数据移动到  1号数据库

STRING最基本的数据类型

基本操作:GET  SET  INCR  DECR  MSET  MGET  STRLEN   APPEND  GETSET  SETEX(设置key的存活时间)  SETNX(不存在才设置)
set  name   “zhang san”    EX/PX   100
mset date "2012.3.30" time "11:00 a.m." weather "sunny“
查看剩余时间: TTL (秒)  PTTL(毫秒)
append  name “ is a man”
GETSET     类似    return  num ++;

LIST

可以把list当做索引数组。
LIST 基本操作:  L/RPUSH  L/RPOP  LSET LLEN  LRANGE RPOPLPUSH
实质是一个 每个元素都是string类型的双向链表
双向链表的每个元素,都有自己的地址、头指针、尾指针

SET

一组不同类型元素组成的集合,集合最多可放 2的32次方 减1 个元素
集合基本操作
    SADD  SDIFF  SDIFFSTORE   SINTER SMEMBERS  SISMEMBERS
    SRANDMEMBER   SREM  
 
集合使用广泛,比如微博共同好友,只要将两个集合求交集即可。
 
        Sorted set: 要加一个权重

HASH

类似于php中的关联数组。
要存一个同学信息,学号201311   姓名niusipeng  性别man  年龄25
        不用hash,存多条数据
 
        采用hash  存一条数据即可

消息订阅与发布

Pub/sub
订阅消息:
subscribe channel1
发布消息:
publish channel1 hello

事务

redis的事务处理,多条命令中有失败,也无法将所有指令回滚
 
redis对事务的支持目前还比较简单。redis只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令。

php操作Redis

安装扩展

下载

https://github.com/phpredis/phpredis
 
正式版本:
https://github.com/phpredis/phpredis/tree/master

安装

生成./configure文件
使用phpize生成./configure文件

使用php-config配置
./configure --with-php-config=/usrl/local/lamp/php/bin/php-config

编译生成so文件
make && make install

开启扩展
在php.ini中添加:
[redis]
extension=”redis.so”

测试安装结果
phpinfo()

参考资料

http://www.cnblogs.com/ikodota/archive/2012/03/05/php_redis_cn.html

















                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值