redis

Redis

Redis 是一个key-value存储系统

memcached类似,但支持数据持久化

支持更多的value类型,除了和string外,还支持hash.lists

Redis用了2种格式,全量数据(RDB)和增量请求(aof

,全量数据格式就是把内存的数据写入到硬盘

。增量请求文件则是把内存中的数据序列化为操作请求。用于读取文件进行replay得到数据

Redis的存储分为内存存储、磁盘存储和Log文件三部分。

安装

wget https://github.com/antirez/redis/archive/2.8.19.tar.gz

tar zxvf 2.8.19.tar.gz

cd redis2.8.19

make

spacer.gif

Cd deps

Make hiredis lua jemakkoc

make PREFIX=/usr/local/redis install

redis 数据类型-string

aliasredis-cli='/usr/local/redis/bin/redis-cli'

vim .bashrc alias rm='rm -i'

alias cp='cp -i'

alias mv='mv -i'

aliasredis-cli='/usr/local/redis/bin/redis-cli'

 

redis-cli

127.0.0.1:6379> set key1 aminglinux

OK

127.0.0.1:6379> get key1

"aminglinux"

127.0.0.1:6379> mset key1 aming key2hello key3 yes

OK

127.0.0.1:6379> mget key1 key2 key3

1) "aming"

2) "hello"

3) "yes"

127.0.0.1:6379>

Ctrl+d退出

[root@liuzan ~]# redis-cli get key1

 

"aming"

Redis数据类型-List

127.0.0.1:6379> lpush list1 123 从左边插入123lpush从左边插入)

(integer) 1

127.0.0.1:6379> LPUSH list1 aaa

(integer) 2

127.0.0.1:6379> LPUSH list1 "123456"

(integer) 3

127.0.0.1:6379> RPOP list1 右侧取值取完值后队列里就不存在123

"123"

127.0.0.1:6379> LRANGE

(error) ERR wrong number of arguments for'lrange' command

127.0.0.1:6379> LRANGE list1 0 -1 查看List1 0为最左侧 -1为最右侧

1) "123 456"

2) "aaa"

127.0.0.1:6379> LPOP list1 最左侧取值

"123 456"

127.0.0.1:6379> LRANGE list1 0 -1

1) "aaa"

127.0.0.1:6379> RPUSH list aaa 从右侧插入

(integer) 1

127.0.0.1:6379> LRANGE list1 0 -1

Aaa

数据类型 set

集合

27.0.0.1:6379> ZADD myset 12"123" 加入集合123排序12

(integer) 1

127.0.0.1:6379> ZADD myset 2"abc"加入集合abc排序2

(integer) 1

127.0.0.1:6379> ZADD myset 20"ac"加入集合ac排序20

(integer) 1

127.0.0.1:6379> ZRANGE myset 0 -1查看集合

1) "abc"

2) "123"

3) "ac"

127.0.0.1:6379> ZREVRANGE myset 0 -1倒序查看

1) "ac"

2) "123"

3) "abc"

127.0.0.1:6379>

 

数据类型hash

127.0.0.1:6379> HSET hash2 name aaa 添加hashnameaaa

(integer) 1

127.0.0.1:6379> HSET hash2 age 10

(integer) 1

127.0.0.1:6379> HGETall hash2 查看hash内容

1) "name"

2) "aaa"

3) "age"

4) "10"

127.0.0.1:6379> hget hash2 age 取出age数值

"10"

127.0.0.1:6379>

Redis 数据持久化

分别是rdb (redis database) aof (append only file)

Rdb..就是在不同的时间点,将redis 存储的数据生成快照并存储到磁盘介质上

Aof。。则是换了一个角度实现持久化。就是将redis执行过的所有写指令记录下来

。在下次redis重启时,只要把这些写指令从前到后在重复一遍。就可以实现数据恢复

Rdbaof两种方式可以同时使用,重启是优先采用aof方式来进行数据恢复。因为aof方式的数据恢复完整度更高

没有数据持久化需求,可以完全关闭rdbaof方式。这样的话redis就可以和memcached一样了是内存模式

Redis配置讲解

Daemonize no 默认下,redis并不是以daemon形式来运行的。通过daemonize配置项可以控制redis的运行形式,yes是在后台运行

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

Bind 192.168.1.2 10.8.4.2 指定绑定的ip.可以有多个

Port 6379 指定监听端口

Unixsocket /tmp/redis.sock 也可以监听socket

Unixsocketperm 755 当监听socket 时可以指定权限为755

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

Tcp-keepalive 0 tcp连接保活策略,可以通过tcp-keepalive配置项来设置,单位为秒,则server端会每60秒向连接空闲的客户端发起一次ack请求,以检查客户端是否挂掉,无响应则关闭。0则不会进行保活检测

Loglevel notice 日志级别,有四种debug.verbose,notice,warning

Logifle 定义日志路径

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

Syslog-facility local 0 指定syslog的设备,可以是user或者local0 �local7

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

Redis快照配置rdb

Save 900 1 表示15分钟一次快照至少有1Key改变就触发一次

Save 300 10 表示每5分钟且至少有10Key改变,触发一次

Save 60 10000 表示每60秒至少有10000key改变,就触发一次

Save “” 这样可以禁用rdb持久化

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

Rdbcompression yes 是否要压缩

Rdbchecksum yes 是否进行数据校验

Dbfilename dump.rdb 定义快照文件名字

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

Redis 安全配置

Requirepass aminglinux

设置redis-server密码

redis-cli -a aminglinux 有密码登陆

Rename-command config aminglinux.config

config命令更名为aminglinux.config 这样可以避免误操作,但如果使用了aof持久化,建议不要启用该功能。

config set timeout 10 更改timeout

config get timeout 查看timeout

Rename-command config “”

也可以后面定义为空,这样就禁用了config命令

限制相关配置

Maxclients 10000 限制最大客户端连接数

Maxmemory<bytes> 设定最大内存使用数 单位byte

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

Maxmemory-samples 3 lru算法和最小ttl算法都并非是精确的算法

是估算值,所以你可以设置样本的大小,

Redis aof持久化相关配置

Appendonly no 如果是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%时则会触发重写机制

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

慢日志

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

Slowlog-max-len 128 日志长度

Redis主从

Master 192.168.31.105 slave 192.168.31.112

Master配置文件不动

Slave配置文件加上一行

Slaveof 192.168.31.105 6379

如果master有密码

则加上 masterauth passwd

分别启动master slave

 

主从其他配置

Slave-read-only yes 让从只读

Repl-ping-slave-period 10 设置slavemaster 发起ping 的频率,每10s一次

Repl-timeout 60 设置slave ping 不通master 多少秒后超时

Repl-disable-tcp-nodelay no 是否开启tcp-nodelay开启后将会使用更少的带宽。但会延迟,建议关闭

Repl-backlog-size 1mb 同步队列的长度,backuplogmaster的一个缓冲区,主从断开后,master会先把数据写到缓冲区,slave再次连续会从缓冲去种同步数据

Repl-backlog-ttl 3600 主从断开后,缓冲的有效期,默认1小时

Slave-priority 100 多个slave是可以设置优先级的,数值越小优先级越高,应用与集群中,支持slave切换为master,优先级最高的才会切换

Min-slave-to-write 3 和下面的一起使用,他的意思是master发现有超过3slave的延迟高于10S,那么master就会暂时停止写操作,这两个数值任何一个为0则关闭该功能,默认第一数值为0

Min-slaves-max-lag 10

Redis常用命令

String类型常用命令

Set key1 aminglinux 创建key1 aming

Setnx key1 amingliunx setnx去赋值一个key 如果key存在则赋值不成功,不存在成功

Setex key1 100 111 key1设定有效时间

Ttl key1  查看key1的有效时间

Mset key1 1 key2 2 key3 3 批量设置key valus

Hash类型

Hset hash1 name aming  建立键值对

Hset hash1 age 30

Hset hash1 job it

Hgetall hash1

Hmset hash2 name xiaowang age 30 jobteacter 批量创建键值对

hmset hash2 name xiaowang age 30 job techer

OK

127.0.0.1:6379> hgetal hash2

(error) ERR unknown command 'hgetal'

127.0.0.1:6379> hgetall hash2

1) "name"

2) "xiaowang"

3) "age"

4) "30"

5) "job"

6) "techer"

Hdel hash2 job 删除键值对

Hkeys hash2 打印所有键值

Hvals hash2 打印所有键对应的值

Hlen hash2 查看由hash几个filed

 

List 列表

Lpush 从左边压入

Lpush list1 a

Lpush list1 2

Lrange list1 0 -1 查看list1 的一个和最后一个值

Lpop list1 取出list1 最左侧的值

Rpush list1 从右边插入

Rpush list1 1

Rpush list1 2

Rpop list1 取出list1 最右侧的值

Linsert list1 before  a e a的前面插入一个e

Lset list1 4 bbb 把第5个元素修改为bbb

Lindex list1 0 查看一个元素

Llen list1 查看链表中有几个元素

Set 数据常用操作

sadd set1 1 出入集合

smembers set1 查看set1集合 不会自己去排序

srem set1 1删除元素

spop set1 随机取出一个元素

sdiff set1 set2 求差集比较一样的。不一样的会输出,在前面的set1以原点比较

sdiffstore set3 set2 set1 set2 set1不同的元素插入到set

sinter set1 set2 求交集一样的输出

sinterstore set4 set1 set2 set1 set2一样的存到set4

sunion set1 set2 并集吧所有的元素输出

sunionstore set5 set1 set2 存入到set5

sismember set1 aming判断aming是否在set1

srandmember set5 随机取出一个元素但不删除。

Zset 数据常用操作

Zadd zset1 1 abc

Zadd zset1 10 1abc

Zadd zset1 88 2abc

Zrange zset1 0 -1 查看zset1并且排序

Zrange zset1 0 -1 withscores 查看zset1 排序并显示分值

Zrem zset1 abc 删除元素abc

Zrank zset1 0 -1 返回元素索引值

Zrank zset1 abc 返回abc的索引值

Zrevrank zset 同上,不同是,按照score返序排序

Zrevrange zset1 0 -1 返序显示所有元素,并带分值

Zcard zset1 返回集合众所有元素的个数

Zcount zset1 1 10 返回分值范围1-10的元素个数

Zrangebyscore zset1 1 10 返回分值范围1-10的元素

Zremrangebyrank zset1 0 2 删除索引范围0-2的元素按score正向排序

Zremrangebyscore zset1 1 10删除分值范围1-10的元素

键值相关操作

Keys * 取出所有Key

Keys my* 模糊匹配

Exists name name键返回1 否则返回0

Del key1 删除一个key 成功返回1 否则返回0

Expire key1 100 设置1 100s后过期

Ttl key 查看键 还有多长时间过期,单位是s,当key不存在是,返回-2,当key存在但没有设置剩余生存时间时,返回-1否则,返回key的剩余生存时间

Select 0 代表选择当前数据库,默认进入0数据库

Move age 1 age移动到1数据库

Persist key1 取消key1的过期时间

Randomkey 随机返回一个Key

Rename oldname newname 重命名key

Type key1 返回键的类型

 

服务

Dbsize 返回当前数据库key的数目

Info 返回redis 数据库状态信息

Flushdb 清空当前数据库所有键

Flushall 清空所有数据库中的键

 

Php 中应用redis

Wget https://codeload.github.com/phpredis/phpredis/zip/develop

Mv develop develop.zip

Cd phpredis-develop/

/usr/local/php/bin/phpize 生成.configure文件

./configure--with-php-config=/usr/local/php/bin/php-config

Make && make install

Vim /usr/local/php/etc/php.ini

最后一行加入

extension = redis.so

redis 实现session 共享

php.ini中加入

session.save_handler = “redis”

session.save_path=”tcp://127.0.0.1:6379”

或者apache虚拟机主机加入

Php_value session.save_handler “redis”

Php_value session.save_path “tcp://127.0.0.1:6379”

或者php-fpm.conf d对应的pool 中加入

Php_value[session.save_handler]=redis

Php_value[session.save_path]=”tcp://127.0.0.1:6379”


你可能感兴趣的:(redis)