码迷,mamicode.com
首页 > 其他好文 > 详细

Redis Installation、Configuration、Program Based On Redis Learning

时间:2014-08-09 23:00:49      阅读:362      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   java   使用   os   io   

目录

1. Redis 简介
2. Redis安装配置
3. 编程使用Redis

 

1. Redis 简介

bubuko.com,布布扣

0x1: Redis是什么

Redis是一款Nosql类型的基于key-value的高速缓存系统,

从架构上看,redis有3种特性

1. key value store
是一个以key-value形式存储的数据库,定位直指MySQL,用来作为唯一的存储系统

2. memory cache
是一个把数据存储在内存中的高速缓存,用来在应用和数据库间提供缓冲,替代memcachd

3. data structrue server
把它支持对复杂数据结构的高速操作作为卖点,提供某些特殊业务场景的计算和展现需求。比如排行榜应用,Top 10之类的

在redis的键值的"值"中,它所支持的数据结构有:

1. String
    1) 常用命令
      setget、decr、incr、mget等
      2) 应用场景
      String是最常用的一种数据类型,普通的key/value存储都可以归为此类 
      3) 实现方式
      String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr、decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int

2. Hash
    1) 常用命令
      hget、hset、hgetall等
      2) 应用场景
    3) 实现方式
      Redis Hash对应Value内部实际就是一个HashMap,实际这里会有2种不同实现
        3.1) 这个Hash的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,对应的value redisObject的encoding为zipmap
        3.2) 当成员数量增大时会自动转成真正的HashMap,此时encoding为ht

3. List
    1) 常用命令
      lpush、rpush、lpop、rpop、lrange等
      2) 应用场景
      Redis list的应用场景非常多,也是Redis最重要的数据结构之一,比如twitter的关注列表,粉丝列表等都可以用Redis的list结构来实现 
      3) 实现方式
      Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构

4. Set
    1) 常用命令
      sadd、spop、smembers、sunion等 
      2) 应用场景
      Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集
合内的重要接口,这个也是list所不能提供的   
3) 实现方式:    set的内部实现是一个value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因 5. Sorted set 1) 常用命令    zadd、zrange、zrem、zcard等    2) 使用场景    Redis sorted set的使用场景与set类似,区别是set不是自动有序的,而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。当你需要一个有序的并且不重复的集
合列表,那么可以选择sorted set数据结构,比如twitter 的public timeline可以以发表时间作为score来存储,这样获取时就是自动按时间排好序的   
3) 实现方式    Redis sorted set的内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射,而跳跃表里存放的是所有的成员,排序依据是HashMap里存的score,使用跳跃表的结构可以获
得比较高的查找效率,并且在实现上比较简单

bubuko.com,布布扣

Redis内部使用一个redisObject对象来表示所有的key和value

1. type
代表一个value对象具体是何种数据类型
2. encoding
不同数据类型在redis内部的存储方式,比如:type=string代表value存储的是一个普通字符串,那么对应的encoding可以是raw或者是int,如果是int则代表实际redis内部是按数值型类存储和表示这个字符串的,当然前提是这个
字符串本身可以用数值表示,比如:"123" "456"这样的字符串 3. ptr 数据指针 4. vm 只有打开了Redis的虚拟内存功能,此字段才会真正的分配内存,该功能默认是关闭状态的

我们可以发现Redis使用redisObject来表示所有的key/value数据是比较浪费内存的,当然这些内存管理成本的付出主要也是为了给Redis不同数据类型提供一个统一的管理接口

Relevant Link:

http://try.redis.io/
http://www.redis.cn/
http://jandyu.diandian.com/post/2012-03-15/16145594
http://tech.it168.com/a2011/0818/1234/000001234478_all.shtml
http://hedatou.com/archives/introduction_to_redis.html

 

2. Redis安装配置

0x1: 主程序安装

cd /usr/local
wget http://download.redis.io/releases/redis-2.8.13.tar.gz
tar xzf redis-2.8.13.tar.gz
cd redis-2.8.13
make
/*make命令执行完成后,会在当前src目录(/usr/local/redis-2.8.13/src)下生成本个可执行文件如下:
1. redis-server:Redis服务器的daemon启动程序
2. redis-cli:Redis命令行操作工具。当然,你也可以用telnet根据其纯文本协议来操作
3. redis-benchmark:Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能
4. redis-stat:Redis状态检测工具,可以检测Redis当前状态参数及延迟状况 
*/

0x2: 命令测试

//启动server
./redis-server
//测试benchmark
./redis-benchmark
//使用内置的客户端连接Redis
./redis-cli
127.0.0.1:6379> set foo bar
OK
127.0.0.1:6379> get foo
"bar"
127.0.0.1:6379>

0x3: 运行Redis所需要的内核参数优化

/*
1. overcommit_memory
指定了内核针对内存分配的策略,其值可以是0、1、2。
0: 表示内核将检查是否有足够的可用内存供应用进程使用
    1) 如果有足够的可用内存,内存申请允许
    2) 否则,内存申请失败,并把错误返回给应用进程
1: 表示内核允许分配所有的物理内存,而不管当前的内存状态如何
2: 表示内核允许分配超过所有物理内存和交换空间总和的内存
*/
vim /etc/sysctl.conf
//添加
vm.overcommit_memory=1
//刷新配置使之生效
sysctl vm.overcommit_memory=1 

0x4: Redis配置文件

vim /usr/local/redis-2.8.13/redis.conf
//1. 开启守护进程
daemonize yes 
//2. 每隔5秒输出一行监控信息(默认)
daemonize no

//3. 减小改变次数,这个参数可以根据情况进行指定
save 60 1000 

//4. 分配256M内存
maxmemory 256000000  
 
//5. pid文件位置
pidfile /var/run/redis.pid 

//6. 监听的端口号
port 6379

//7. 请求超时时间
timeout 0

//8. log信息级别
loglevel notice

//9. 开启数据库的数量
databases 16

/*
10. 保存快照的频率
    1) 第一个*表示多长时间
    2) 第二个*表示执行多少次写操作
在一定时间内执行一定数量的写操作时,自动保存快照。可设置多个条件
*/
save * *

//11. 是否使用压缩
rdbcompression yese

//12. 数据快照文件名(只是文件名,不包括目录)
dbfilename dump.rdb

//13. 数据快照的保存目录(这个是目录)
dir ./

//14. 是否开启appendonlylog,开启的话每次写操作会记一条log,这会提高数据抗风险能力,但影响效率
appendonly no

/*
15. appendonlylog如何同步到磁盘
    1) always: 每次写都强制调用fsync
    2) everysec: 每秒启用一次fsync
    3) no: 不调用fsync等待系统自己同步
*/ 
appendfsync everysec

配置好保存,重启redis,就可以正常启动了,和mysql一样,redis是基于socket监听端口的方式提供服务的,我们可以使用telnet、或者socket方式进行连接

Relevant Link:

http://www.redis.cn/documentation.html
http://www.redis.cn/download.html
http://www.php100.com/html/webkaifa/PHP/PHPyingyong/2011/0406/7873.html

 

3. 编程使用Redis

0x1: PHP连接Redis

使用php连接redis需要安装php的扩展

下载redis扩展源代码
http://pecl.php.net/package/redis
解压缩后进行编译
phpize
./configure --enable-hello
make
关于php扩展的原理以及编译过程请参阅另一篇文章
http://www.cnblogs.com/LittleHann/p/3562259.html
将编译好的.so文件复制到php的扩展目录中
cp redis.so /usr/lib/php/modules/
修改php.ini中的extension,增加redis扩展的自动启动
重启apache即可

Code

<?php  
    $redis = new redis();  
    $result = $redis->connect(192.168.207.128, 6379);  
    var_dump($result); //结果:bool(true)  

    $result = $redis->set(name,"LittleHann");  
    var_dump($result); //结果:bool(true)  

    $result = $redis->get(name); 
    var_dump($result); //结果:LittleHann 

    $redis->delete(name);  
    var_dump($result); //结果:bool(true)  
?>  

Relevant Link:

https://github.com/nrk/predis
https://github.com/Shumkov/Rediska
https://github.com/jdp/redisent
http://www.cnblogs.com/ikodota/archive/2012/03/05/php_redis_cn.html
http://blog.51yip.com/cache/1439.html
http://www.cnblogs.com/jackluo/p/3412670.html

0x2: Java连接Redis

Relevant Link:

http://outofmemory.cn/code-snippet/128/java-usage-redis-jiandan-usage
http://www.cnblogs.com/edisonfeng/p/3571870.html

 

Copyright (c) 2014 LittleHann All rights reserved

 

Redis Installation、Configuration、Program Based On Redis Learning,布布扣,bubuko.com

Redis Installation、Configuration、Program Based On Redis Learning

标签:style   blog   http   color   java   使用   os   io   

原文地址:http://www.cnblogs.com/LittleHann/p/3901588.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!