一、Redis介绍

1、Redis是一个key-value存储系统

2、官方站点http://redis.io

3、Redis和Memcached类似,但支持数据持久化

4、支持更多value类型,除了string外,还支持hash、lists(链表)、sets(集合)、和sorted sets(有序集合)几种数据类型

5、Redis使用两种文件格式:全量数据(RDB)和增量请求(aof)。全量数据格式是把内存中的数据写入磁盘,便于下次读取文件进行加载。增量请求文件则是把内存中的数据序列化为操作请求,用于读取文件进行replay得到数据

6、Redis的存储分为内存存储、磁盘存储和log文件三部分

二、Redis下载安装配置

# wget 'https://codeload.github.com/antirez/redis/tar.gz/2.8.21' -O redis-2.8.21.tar.gz

# tar zxvf redis-2.8.21.tar.gz

# cd redis-2.8.21

# make

# make PREFIX=/usr/local/redis install

# mkdir  /usr/local/redis/etc

# wget http://www.apelearn.com/study_v2/.redis_conf -O /usr/local/redis/etc/redis.conf 2> /dev/null

# wget http://www.apelearn.com/study_v2/.redis_init -O /etc/init.d/redis 2> /dev/null

# useradd -s /sbin/nologin redis && mkdir /usr/local/redis/var && chmod 777 /usr/local/redis/var && chmod 755 /etc/init.d/redis

# chkconfig --add redis

# chkconfig redis on

# service redis start

三、Redis数据结构

1、Redis数据类型-string

l       string是最简单的类型,你可以理解成与Memcached一样的类型,一个key对应一个value,其上支持的操作与Memcached的操作类似,他的功能更丰富。设置可以存二进制的对象。

l       示例

# redis-cli set mykey "fanjinbao"

# redis-cli get mykey "fanjinbao"

"fanjinbao"

也可以进入redis的终端进行创建

# redis-cli

127.0.0.1:6379> mset key1 zhangsan key2 lisi key3 hello

127.0.0.1:6379> mget key1 key2 key3

1) "zhangsan"

2) "lisi"

3) "hello"

2、Redis数据类型-list

l       list是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等。操作中key理解为链表的名字,使用List结构,我们可以轻松地实现最新消息排行等功能(比如新浪微博的TimeLine)。list的另一个应用就是消息队列,可以利用list的push操作,将任务存在list中,然后工作线程再用pop操作将任务取出进行执行。

l       示例

左侧插入

# redis-cli lpush list aaa

左侧取值

# redis-cli lpop list

右侧插入

# redis-cli rpush list lisi

右侧取值

# redis-cli rpop list

查看所有list值

# redis-cli lrange list 0 -1

3、Redis数据类型-set

l       set是集合,和我们数学中的集合概念相似,对集合的操作有添加删除元素,有对多个集合求交并差等操作。操作中key理解为集合的名字。比如在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。因为Redis非常人性化的为集合提供了求交集、并集、差集等操作,那么就可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面所有集合的操作,你还可以使用不同的命令选择将结果返回给客户端还是存到一个新的集合中。QQ有一个社交功能叫“好友标签”,可以个你的好友贴标签,比如“大美女”、“土豪”,“欧巴”等等,这时可以使用redis的集合来实现,把每一个用户的标签都存储在一个集合之中。

l       示例

往集合中添加元素

# redis-cli sadd set1 abc

列出集合中的元素(无序显示)

# redis-cli smembers set1

4、Redis数据类型-sort set

l       sort set是有序集合,它比set多了一个权重参数score,使得集合中的元素能够按score进行有序排列,比如一个存储全班同学成绩的sort set,其集合value可以是同学的学号,而score就可以是其考试得分,这样的数据插入集合的时候,就已经进行了天然的排序

l       示例

往集合中添加元素

# redis-cli zadd set2 12 abc

# redis-cli zadd set2 2 "cde 123"

# redis-cli zadd set2 24 123-aaa

# redis-cli zadd set2 4 a123a

列出集合中的元素(按权重参数排列升序)

# redis-cli zrange set2 0 -1

1) "cde 123"

2) "a123a"

3) "abc"

4) "123-aaa"

列出集合中的元素(按权重参数降序)

# redis-cli zrevrange set2 0 -1

5、Redis数据类型-hash

l       在Memcached中,我们经常将一些结构化的信息打包成hashmap,在客户端序列化后存储为一个字符串的值(一般是JSON格式),比如用户名的昵称、年龄、性别、积分等。

l       示例

往集合中添加元素

# redis-cli hset hash name fanjinbao

# redis-cli hset hash age 31

取集合中的元素

# redis-cli hget hash name

# redis-cli hget hash age

列出所有元素

# redis-cli hgetall hash

四、Redis持久化

1、Redis提供了两种持久化的方式,分别是RDB(Redis DataB)和AOF(Append Only File)

2、RDB,简而言之,就是不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上。

3、AOF,则是换了一个角度来实现持久化,那就是将redis执行过得所有写指令记录下来,在下次redis重新启动时,只要把这些指令从前到后再重复执行一遍,就可以实现数据恢复。

4、其实RDB和AOF两种方式也可以同时使用,在这种情况下,如果redis重启的话,则会优先采用AOF方式来进行数据恢复,这是因为AOF方式的数据恢复完整度更高。

5、如果你没有数据持久化的需求,也完全可以关闭RDB和AOF方式,这样的话,redis就变成一个纯内存数据库,就像Memcached一样

五、Redis配置

查看Redis配置信息

127.0.0.1:6379> config get *

Redis的基本配置参数:

daemonize no #默认情况下,redis并不是以daemon形式来运行的。通过daemonize配置项可以控制redis的运行形式

pidfile /path/to/redis.pid #当以daemon形式运行时,redis会生成一个pid文件,默认会生成在/var/run/redis.pid

bind 192.168.1.201 192.168.1.202 #指定绑定的ip,可以有多个

port 6379 #默认端口

unixsocket /tmp/redis.sock #也可以监听socket

unixsocketperm 755 #当监听soket时可以指定权限为755

timeout 0 #当一个redis-client一直没有请求发现server端,那么server端有权主动关闭这个连接,可以通过timeout来设置“空闲超时时限”,0表示永不关闭

tcp-keepalive 0 #TCP连接保活策略,可以通过tcp-keepalive配置项来进行设置,单位为秒,加入设置60秒想连接空闲的客户端发起一次ACK请求,以检查客户端是否已经挂掉,对于无响应的客户端则会关闭其连接,如果设置为0,则不会进行保活检测。

loglevel notice #日志级别,有四种debug、verbose、nbotice、warning

logfile “” #定义日志路径

syslog-ident redis #如果希望日志打印到syslog中,通过syslog-enable来控制,另外,syslog-ident还可以让你指定syslog里的日志标志。

syslog-facility local0 #指定syslog的设备,可以是USER或者local0-local7

databases 16 #设置数据库的总数量,select n选择数据库,0-15

Redis快照配置(rdb持久化)

save 900 1 #表示表示每15分钟且至少1个key改变,就触发一次持久化

save 60 10000 #表示每60秒至少有10000个key改变,就触发一次持久化

save 300 10 #表示每5分钟且至少10个key改变,就触发

save "" #这样就可以禁用rdb持久化

stop-writes-on-bgsave-error yes #rdb持久化写入磁盘避免不了会出现失败的情况,默认一旦出现失败,redis会马上停止写操作,如果你觉得无所谓,那就可以使用该选项关闭这个功能。

rdbcompression yes #是否要压缩

rdbchecksum yes #是否进行数据校验

dbfilename dump.rdb #定义快照文件的名字

dir ./ #定义快照文件存储路径

Redis安全相关配置

requirepass fansik #设置redis-server的密码

如果设置了密码,登录方式:

# redis-cli -a fansik

rename-command CONFIG fansik.config #将CONFIG命令更名为fansik.conf,这样就可以避免误操作,但如果使用了AOF持久化,建议不要启用该功能

rename-command CONFIG "" #也可以后面定义为空,这样就可以禁掉CONFIG命令

Redis限制相关配置

maxclients 10000 #限制最大客户端连接数

maxmemory <bytes> #设定最大内存使用数,单位是byte

maxmemmory-policy volatile-lru #指定内存移除规则

maxmemory-samples 3 #LRU算法和最小TTL算法都并非是精确的算法,而是估值,所以可以设置样本的大小,加入redis默认会检查三个key并选择其中的LRU的那个,那么你可以改变这个key样本的数量

Redis AOF持久化相关配置

appendonly on #如果是yes,则开启aof持久化

appendfilename "appendonly.aof" #指定aof文件名字,保存在dir参数指定的目录

appendfsync everysec #指定fsync()调用模式,有三种no(不调用fsync),always(每次写都会调用fsync),everysec(每秒钟调用一次fsync),第一种最快,第二种数据最安全,但性能会差一些,默认为第三种

no-appendfsync-on-rewrite no #使用no可避免当写入量非常大时的磁盘io阻塞

auto-aof-rewrite-percentage 10 #规定什么情况下会出发aof重写。改值为一个比例,10表示当aof文件增幅达到10%时则会触发重写机制

auto-aof-rewrite-min-size 64mb #重写会有一个条件,就是不能低于64mb

Redis慢日志相关配置

针对慢日志,你可以设置两个参数,一个是执行时长,单位是微秒,另一个是慢日志的长度。当一个新的命令被写入日志时,最老的一条会从命令队列中被移除

slowlog-log-slower-than 10000 #慢于10000ms则记录日志

slowlog-max-len 128 #日志长度(条数)

Redis安装及基本配置的更多相关文章

  1. redis安装以及安全配置

    redis安装以及安全配置 1. 安装 sudo apt-get install redis-server 使用which查询redis执行体安装路径: which redis-server #/us ...

  2. Redis安装、主从配置及两种高可用集群搭建

    Redis安装.主从配置及两种高可用集群搭建 一.            准备 Kali Linux虚拟机 三台:192.168.154.129.192.168.154.130.192.168.154 ...

  3. Redis安装及主从配置(转)

    一.何为Redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset(有 ...

  4. redis安装与基本配置

    获取下载包 wget http://download.redis.io/releases/redis-2.8.24.tar.gz 解压和编译 tar -zxvf redis-2.8.24.tar.gz ...

  5. Redis安装及主从配置

    一.何为Redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset(有 ...

  6. Redis 安装 启动 连接 配置 重启

    Linux下安装 ]# wget http://download.redis.io/releases/redis-2.8.17.tar.gz ]# .tar.gz ]# cd redis- ]# ma ...

  7. Redis安装及常用配置

    Redis安装说明 大多数企业都是基于Linux服务器来部署项目,而且Redis官方也没有提供Windows版本的安装包.因此课程中我们会基于Linux系统来安装Redis. 此处选择的Linux版本 ...

  8. Nginx+Keepalived+Tomcat高可用负载均衡,Zookeeper集群配置,Mysql(MariaDB)搭建,Redis安装,FTP配置

    JDK 安装步骤 下载 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html rpm ...

  9. Redis安装、主从配置及aof使用

    找了02,03,04三台机器,04做主,02做从,03做客户端. 都使用jumbo install redis安装了Redis(server+client). 在 02 从的 ~/.jumbo/etc ...

随机推荐

  1. 一台服务器搭载两个tomcat项目

    之前下载的mysql  在官网是有 历史库的 如果现在一台机器上已经部署了一个tomcat服务,无论这个tomcat是否已经注册为服务了,或者没有注册windows服务,或者注册了,都没关系.都可以采 ...

  2. 中南民航如何利用K2BPM构建业务流程?

    广州市中南民航空管通信网络科技有限公司成立于2004年9月,负责民航中南地区通信网络.电报网络的建设与维护.民航空管信息系统的开发与维护.公司拥有一支技术精湛的研发队伍,在信息技术领域领跑于民航空管行 ...

  3. ognl表达式root中取值顺序

    不加#,先从栈顶取,如果没有(是没有这个属性而不是这个属性没有值),再往下取. 如果栈顶和非栈顶的对象拥有同一个属性名称,想直接取非栈顶的属性可以在ognl中用#root[i].属性名,可以取到属性的 ...

  4. 《Head First设计模式(中文版)》

    <Head First设计模式(中文版)>共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计模式.前言先介绍<Head First设计模式(中文版)>的 ...

  5. acm 20140825

    为了自己的梦想,一次次的选择坚强.走上acm这条路,怎么也找不到让自己放弃的理由.我喜欢这种竞赛的氛围,我渴望在赛场上飞扬!想想过去的一个学习,自己并没有干点什么有意义的事.acm也没有好好的做!新的 ...

  6. js 中 setInterval 的返回值问题

    var i = 0; var timer = setInterval(function() { i++ console.log(i); //alert(1); }, 2000); alert( typ ...

  7. javascript 构造函数中的属性与原型上属性优先级的比较

    备注: 下面这个问题是我前天看书上发现的. 按照我以前的理解, a.rename()这个方法传什么值,结果都会弹出 小a,但我看书上的demo 弹出的是大A.... 我的困惑是:  js的构造函数中的 ...

  8. 百度云加速时使用Cloudflare的技术

    百度云加速时使用Cloudflare的技术 引用“百度的关于我们”这是在打脸吗?就是把英文翻译过来换个验证码 百度是全球最大的中文搜索引擎.最大的中文网站.2000年1月创立于北京中关村.如今,百度已 ...

  9. DDOS攻击原理及防护方法论

      从 07年的爱沙尼亚DDOS信息战,到今年广西南宁30个网吧遭受到DDOS勒索,再到新浪网遭受DDOS攻击无法提供对外服务500多分钟. DDOS愈演愈烈,攻击事件明显增多,攻击流量也明显增大,形 ...

  10. 数组prototype添加函数呢,采用回调判定函数内容

    1.解决方案 Array.prototype.all = function (p) { return this.filter(p).length == this.length; }; Array.pr ...