非关系型数据库–redis配置
Redis 配置
Redir安装配置
wget http://download.redis.io/releases/redis-4.0.1.tar.gz
tar -zxvf redis-4.0.1.tar.gz -C /usr/local/src
cd /usr/local/src/redis-4.0.1
#编译安装
yum -y install gcc
make MALLOC=libc
make && make install
cp redis.conf /etc/redis.conf
vim /etc/redis.conf //修改如下配置
daemonize yes
logfile "/var/log/redis.log"
dir /data/redis_data/
appendonly yes
mkdir -p /data/redis_data
sysctl vm.overcommit_memory=1
echo never > /sys/kernel/mm/transparent_hugepage/enabled
never always
#重新更新配置文件
redis-server /etc/redis.conf
#进入界面
redis-cli
Redis-cli关键参数
- -h :主机IP地址,默认是127.0.0.1
- -p:端口,默认是6379
- -a:密码,如果redis设置了密码,需要传递密码
Redis配置项说明
- daemonize :守护进程,默认关闭状态
- pidfile :pid文件写入/var/run/redis.pid文件,可以指定
- port :监听端口
- bind :绑定的主机地址,用于限制连接,默认只能本机 访问Redis服务器
- dir:本地数据库的存放目录
- appendonly yes :开启AOF持久化
- save 900 1 …多长时间执行更新操作
- dbfilenam dump.rdb :指定存储数据的本地数据库的文件名
- slaveof:指定当本地为从服务器时,主服务器的IP地址和端口
- masterauth:当master设置密码保活,slave服务连接master服务的密码
- requirepass :指定Redis的连接密码
- mixclients:运行 的最大的连接数
Redir持久化
• edis提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File)
• RDB,简而言之,就是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上。
• AOF,则是换了一个角度来实现持久化,那就是将redis执行过的所有写指令记录下来,在下次redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。
• 其实RDB和AOF两种方式也可以同时使用,在这种情况下,如果redis重启的话,则会优先采用AOF方式来进行数据恢复,这是因为AOF方式的数据恢复完整度更高。
• 如果你没有数据持久化的需求,也完全可以关闭RDB和AOF方式,这样的话,redis将变成一个纯内存数据库,就像memcache一样。
Redis持久化相关参数:
- save 900 1 #表示每15分钟且至少有1个key改变,就触发一次持久化
- save 300 10 #表示每5分钟且至少有10个key改变,就触发一次持久化
- save 60 10000 #表示每60秒至少有10000个key改变,就触发一次持久
- save “” #这样可以禁用rdb持久化
appendonly yes #如果是yes,则开启aof持久化
appendfilename “appendonly.aof” # 指定aof文件名字
appendfsync everysec #指定fsync()调用模式,有三种no(不调用fsync),always(每次写都会调用fsync),everysec(每秒钟调用一次fsync)。第一种最快,第二种数据最安全,但性能会差一些,第三种为这种方案,默认为第三种。
Redir数据类型
127.0.0.1:6379> set mykey "aminglinux.com"
OK
127.0.0.1:6379> get mykey
"aminglinux.com"
127.0.0.1:6379> mset key1 1 key2 a key3 c
OK
127.0.0.1:6379> mget key1 key2 key3
1) "1"
2) "a"
3) "c"
字符串(string)
命令 | 含义 |
---|---|
SET key value | 设置指定的key值 |
GET key | 获取指定key的值 |
SETEX key seconds value | 设置指定key的值,并将key的过期时间设为seconds秒 |
SETNX key value | 只有在key不存在时设置key的值 |
列表(list)
命令 | 含义 |
---|---|
LPUSH key value1 [value2] | 将一个或多个值插入到列表头部 |
LRANGE key start stop | 获取列表指定范围内的元素 |
RPOP key | 移除并获取列表最后一个元素 |
LLEN key | 获取列表长度 |
BRPOP key1 [key2] timeout | 移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止 |
127.0.0.1:6379> LPUSH list1 "aming"
(integer) 1
127.0.0.1:6379> LPUSH list1 "1 2 3"
(integer) 2
127.0.0.1:6379> LPUSH list1 "aaa bbb"
(integer) 3
127.0.0.1:6379> LRANGE list1 0 -1
1) "aaa bbb"
2) "1 2 3"
3) "aming"
127.0.0.1:6379> LPOP list
"aaa bbb"
集合(set)
命令 | 含义 |
---|---|
SADD key member1 [member2] | 向集合添加一个或多个成员 |
SMEMBERS key | 返回集合中的所有成员 |
SCARD key | 获取集合中的成员数 |
SINTER key1 [key2] | 返回给定所有集合的交集 |
SUNION key1 [key2] | 返回所有给定集合的并集 |
SDIFF key1 [key2] | 返回给定所有集合的差集 |
SREM key member1 [member2] | 移除集合中一个或多个成员 |
127.0.0.1:6379> SADD set1 a
(integer) 1
127.0.0.1:6379> SADD set1 b
(integer) 1
127.0.0.1:6379> SADD set1 c
(integer) 1
127.0.0.1:6379> SADD set1 d
(integer) 1
127.0.0.1:6379> SMEMBERS set1
1) "a"
2) "b"
3) "d"
4) "c"
//删除指定元素,一个或多个
127.0.0.1:6379> SREM set1 c
交集,补集,并集
127.0.0.1:6379> SADD set6 11 13 15 17 19
(integer) 5
127.0.0.1:6379> SADD set7 11 12 13 14 15
(integer) 5
127.0.0.1:6379> SINTER set6 set7 //交集
1) "11"
2) "13"
3) "15"
127.0.0.1:6379> SUNION set6 set7 //并集
1) "11"
2) "12"
3) "13"
4) "14"
5) "15"
6) "17"
7) "19"
127.0.0.1:6379> SDIFF set6 set7 //set7 差集
1) "17"
2) "19"
127.0.0.1:6379> SDIFF set7 set6 //set6 差集
1) "12"
2) "14"
sorted set是有序集合,它比set多了一个权重参数score,使得集合中的元素能够按 score 进行有序排列,比如一个存储全班同学成绩的 Sorted Sets,其集合 value 可以是同学的学号,而 score 就可以是其考试得分,这样在数据插入集合的时候,就已经进行了天然的排序。
哈希(hash)
Redis hash是一个string类型的field和value的映射表,hash特别适用于存储对象,常用命令:
命令 | 含义 |
---|---|
HSET key field value | 将哈希表key中的字段field的值设为value |
HGET key field | 获取存储在哈希表中指定字段的值 |
HDEL key field | 删除存储在哈希表中的指定字段 |
HKEYS key | 获取哈希表中所有字段 |
HVALS key | 获取哈希表中所有值 |
HGETALL key | 获取在哈希表中指定key的所有字段和值 |
127.0.0.1:6379> hset hash1 name aming
(integer) 1
127.0.0.1:6379> hget hash1 name
"aming"
127.0.0.1:6379> hset hash1 age 30
(integer) 1
127.0.0.1:6379> hget hash1 age
"30"
127.0.0.1:6379> hgetall hash1
1) "name"
2) "aming"
3) "age"
4) "30"
有序集合(sorted set)
Redis sorted set有序集合是string类型元素的集合,且不允许重复的成员。每个元素都会关联一个double类型的分数(score)。redis正是通过分数来为集合中的成员进行从小到大排序。有序集合的成员是唯一的,但分数却可以重复。
命令 | 作用 |
---|---|
ZADD key score1 member1 [score2 member2] | 向有序集合添加一个或多个成员,或者更新已存在成员的分数 |
ZRANGE key start stop [WITHSCORES] | 通过索引区间返回有序集合中指定区间内的成员 |
ZINCRBY key increment member | 有序集合中对指定成员的分数加上增量increment |
ZREM key member [member…] | 移除有序集合中的一个或多个成员 |
127.0.0.1:6379> ZADD set3 12 abc
(integer) 1
127.0.0.1:6379> ZADD set3 2 "cde 123"
(integer) 1
127.0.0.1:6379> ZADD set3 24 "123-aaa"
(integer) 1
127.0.0.1:6379> ZADD set3 4 "a123a"
(integer) 1
127.0.0.1:6379> ZRANGE set3 0 -1
1) "cde 123"
2) "a123a"
3) "abc"
4) "123-aaa"
127.0.0.1:6379> ZREVRANGE set3 0 -1
1) "123-aaa"
2) "abc"
3) "a123a"
4) "cde 123"
Redir安全设置
设置端口
vim /etc/redis.conf#修改下方内容
port 7000
redis-cli -p 7000
设置访问密码
CONFIG GET requirepass 查看Redis服务是否设置了密码,默认requirepass对应的参数是空的,即没有密码
[root@localhost redis-4.0.1]# redis-cli -h 192.168.108.50
192.168.108.50:6379> CONFIG GET requirepass
1) "requirepass"
2) ""
#方法1:设置密码,设置后Redis重新启动仍没有密码,不建议使用
192.168.108.50:6379> CONFIG SET requirepass "123"
OK
192.168.108.50:6379> CONFIG GET requirepass
(error) NOAUTH Authentication required.
192.168.108.50:6379> auth 123
OK
[root@localhost redis-4.0.1]# redis-cli -h 192.168.108.50 -a 123
#方法2:修改配置文件
vim /etc/redis.conf
requirepass aming>com
#进入redis后可以进行相关操作,OK表示登录成功
127.0.0.1:6379> auth 'aming>com'
OK
#或者登录时直接输入明文密码
redis-cli -a 'aming>com' #因为有>特殊字符所以需要单引号
127.0.0.1:6379> keys *
更改config名称
#vim /etc/redis.conf
#将config命令改名
配置rename-command CONFIG "RENAME_CONFIG", 这样即使存在未授权访问, 也能够给攻击者使用config指令加大难度
rename-command CONFIG aming
#进行查看
redis-cli -p 16379
127.0.0.1:16379> aming get *
禁掉config命令
rename-command CONFIG ""
-----------------------------------------------
#杀掉进程,重新进入redis服务
[root@zhangfei ~]# redis-server /etc/redis.conf
[root@zhangfei ~]# !redis-cli
redis-cli -a 'aming>com'
127.0.0.1:6379> config get dir
(error) ERR unknown command 'config'
127.0.0.1:6379> aming get dir
1) "dir"
2) "/data/redis"
127.0.0.1:6379> quit
redis慢查询日志
编辑配置文件/etc/redis.conf
针对慢查询日志,可以设置两个参数,一个是执行时长,单位是微秒,另一个是慢查询日志的长度。当一个新的命令被写入日志时,最老的一条会从命令日志队列中被移除。
配置文件
slowlog-log-slower-than 1000 //单位ms,表示慢于1000ms则记录日志
slowlog-max-len 128 //定义日志长度,表示最多存128条
slowlog get //列出所有的慢查询日志
slowlog get 2 //只列出2条
slowlog len //查看慢查询日志条数
PHP中使用redis
安装扩展模块
wget https://pecl.php.net/get/redis-4.0.1.tgz
tar -zxvf rediis-4.0.1.tgz
cd redis-4.0.1
/usr/local/php-fpm/bin/phpize
#生成一个configure编译文件
./configure --with-php-config=/usr/local/php-fpm/bin/php-config
make && make install
#添加redis扩展
find / -name php.ini
vim /usr/local/php-fpm/etc/php.ini
extension=/usr/local/php-fpm/lib/php/extensions/no-debug-non-zts-20160303/redis.so
php -m | grep redis
redis(红色显示)
#重启php服务
/usr/local/php-fpm/sbin/php-fpm -t
存储型session
#vim /etc/redis.conf
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配置文件对应的pool中增加:
php_value[session.save_handler] = redis
php_value[session.save_path] = " tcp://127.0.0.1:6379 "
#session.php代码内容
<?php
session_start();
$_SESSION['name']='test';
echo session_id()."<br/>";
echo $_SESSION['name'];
?>
#获取session值
curl 127.0.0.1/session.php
php中使用redis(yum)
yum list | grep redis
yum install php-pecl-redis -y
php -m|grep redis