Redis Installation、Configuration、Program Based On Redis Learning

目录

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

1. Redis 简介

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) 常用命令
      set、get、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,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单

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

时间: 2024-10-21 09:24:36

Redis Installation、Configuration、Program Based On Redis Learning的相关文章

Nginx Installation、Configuration、Rreverse Proxy、Load Balancing Learning

目录 1. Nginx简介 2. Nginx安装部署 3. Nginx安全配置 4. Nginx反向代理实践 5. Nginx负载均衡实践 1. Nginx简介 0x1: Nginx的基本特性 Nginx("engine x")是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器Nginx可以在大多数Unix like OS上编译运行,并有Windows移植版.它的的源代码使用2-clause BSD-like licenseNginx是一个很强大的高

Redis(五)、Redis数据库集群相关

Redis数据库集群 第1章 集群简介 Redis 集群是一个分布式(distributed).容错(fault-tolerant)的 Redis 实现, 集群可以使用的功能是普通单机 Redis 所能使用的功能的一个子集(subset),是一个可以在多个 Redis 节点之间进行数据共享的设施(installation). Redis 集群中不存在中心(central)节点或者代理(proxy)节点, 集群的其中一个主要设计目标是达到线性可扩展性(linear scalability). Re

cenOS系统,chkconfig设置程序开机自启--mysql、tomcat、redis、fastdfs--nginx/fdfs_trackerd/fdfs_storaged

设置程序开机启动就是将程序的启动脚本添加到/etc/init.d目录下,或者将启动路径写入/etc/rc.d/rc.local文件里面. 设置mysql开机启动 cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql chkconfig --add mysql chkconfig mysql on 设置fdfs_tracker开机启动 cp /usr/local/src/FastDFS/init.d/fdfs_tracke

Redis 3.0.5 集群的命令、使用、维护

cluster命令 CLUSTER INFO 打印集群的信息 CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息. //节点 CLUSTER MEET <ip> <port> 将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子. CLUSTER FORGET <node_id> 从集群中移除 node_id 指定的节点. CLUSTER REPLICATE <node_id> 将当前节点设置为 n

Redis的安装、使用以及php中扩展redis并实现php操作redis的一个例子

1.下载源码包redis-2.8.21.tar.gz,并将其上传到指定目录/urs/src,然后对其进行解压: [[email protected] src]# tar -xvf redis-2.8.21.tar.gz 进入解压后的目录,并执行下面命令,指定安装目录为/urs/local/redis: [[email protected] src]# cd redis-2.8.21 [[email protected] redis-2.8.21]# make PREFIX=/usr/local/

Redis 序列化方式StringRedisSerializer、FastJsonRedisSerializer和KryoRedisSerializer

当我们的数据存储到Redis的时候,我们的键(key)和值(value)都是通过Spring提供的Serializer序列化到数据库的.RedisTemplate默认使用的是JdkSerializationRedisSerializer,StringRedisTemplate默认使用的是StringRedisSerializer. Spring Data JPA为我们提供了下面的Serializer:GenericToStringSerializer.Jackson2JsonRedisSeria

SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统

1.前言本文主要介绍使用SpringBoot与shiro实现基于数据库的细粒度动态权限管理系统实例. 使用技术:SpringBoot.mybatis.shiro.thymeleaf.pagehelper.Mapper插件.druid.dataTables.ztree.jQuery 开发工具:intellij idea 数据库:mysql.redis 2.表结构还是是用标准的5张表来展现权限.如下图:image 分别为用户表,角色表,资源表,用户角色表,角色资源表.在这个demo中使用了mybat

【06】Python 内置函数、redis、yagmail、nnlog、导入模块的实质

1 内置函数 1.1 map()和filter() 1 def bl(i): 2 return str(i).zfill(2) 3 l='12333' 4 # map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回. 5 print(type(map(bl,l))) 6 res = list(map(bl,l)) #,结果放到了一个生成器中,需要强制转换成list.set 7 print(res) #运行结果 <class '

redis单点、主从、集群cluster配置搭建与使用

目录 redis单点.主从.集群cluster配置搭建与使用 1 .redis 安装及配置 1.1 redis 单点 1.1.2 在命令窗口操作redis 1.1.3 使用jedis客户端操作redis 1.1.4 使用spring-redis操作 1.2 redis 主从 1.3 哨兵sentinel 1.3.2 哨兵sentinel配置 1.3.3 启动哨兵,使用jedis连接哨兵操作redis 1.3.4 编写程序&运行 1.3.5模拟主节点宕机情况 1.4 redis cluster 1