一、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. 神奇的NOIP模拟赛 T3 LGTB 玩THD

    LGTB 玩THD LGTB 最近在玩一个类似DOTA 的游戏名叫THD有一天他在守一座塔,对面的N 个小兵排成一列从近到远站在塔前面每个小兵有一定的血量hi,杀死后有一定的金钱gi每一秒,他都可以攻 ...

  2. 单位服务器发布tomcat的项目外网访问

    首先 要有 外网IP  路由器做设置  开放端口(netstat -nao) 首先你要确定你有一个外网ip地址.如果你分配到的是一个局域网IP地址需要经过一系列的转换为外网ip地址 跟部署tomcat ...

  3. 【kate总结】matlab调用opencv总结

    正常情况下,编写好matlab调用opencv的代码. 1.输入   MEX XX.CPP(所有的mex都要编译) 2.将生成的.mexw64 放到要调用的文件夹下即可 出错总结: 本人写的matla ...

  4. cvWaitKey

    OpenCV中的一个函数 函数原型为: C++: int waitKey(int delay=0) Python: cv2.waitKey([delay]) → retval C: int cvWai ...

  5. Opencv中在图片上显示文本

    1.cvPutText函数(在图像中加入文本) void cvPutText( CvArr* img, const char* text, CvPoint org, const CvFont* fon ...

  6. IOS打开其他应用、以及被其他应用打开

    1.打开其他应用 appURLStr = "cwork://app_id?title=xxx&content=xxx" [[UIApplication sharedAppl ...

  7. jQuery之load、unload、onunload和onbeforeunload

    1.load:jQuery load() 方法是简单但强大的 AJAX 方法.load() 方法从服务器加载数据,并把返回的数据放入被选元素中. 语法:$(selector).load(URL,dat ...

  8. 模拟http或https请求,实现ssl下的bugzilla登录、新增BUG,保持会话以及处理token

    1.增加相应httpclient 需要的jar包到工程,如果是maven工程请在pom.xml增加以下配置即可: <dependency> <groupId>org.apach ...

  9. 基于HTML5+CSS3的图片旋转、无限滚动、文字跳动特效

    本文分享几种基于HTML5+CSS3实现的一些动画特效:图片旋转.无限滚动.文字跳动;实现起来均比较容易,动手来试试! 一.图片旋转 效果图如下: 这个效果实现起来其实并不困难.代码清单如下: < ...

  10. js 检测 flash插件以及版本号 通用所有浏览器

    var fls = flashChecker(); if (fls.h) { if (fls.v < parseFloat('8.0')) { alert("您当前的flash pla ...