NoSQL - Redis

Remote Dictionary Server(Redis) 是一个由Salvatore Sanfilippo写的高性能key-value存储系统。

Redis就是一个数据库,不过数据不是存储在磁盘中,而是存储在内存当中,所以读写速度非常快,Redis支持数据的持久化,可以将内存中的数据保存在磁盘中 。Redis 提供多种数据类型,用来支持不同的业务。

端口:6379

官网: https://redis.io/

中文网: http://www.redis.cn/

菜鸟教程: https://www.runoob.com/redis/redis-tutorial.html

一、安装及配置

安装:

tar -zxf redis-5.0.5.tar.gz
cd redis-5.0.5
make PREFIX=/usr/local/redis install

配置:

#创建配置文件
mkdir /usr/local/redis/conf
cp /soft/redis-5.0.5/redis.conf /usr/local/redis/conf/
#开启后台运行
vim  /usr/local/redis/conf/redis.conf
daemonize yes

启动:

/usr/local/redis/bin/redis-server  /usr/local/redis/conf/redis.conf

关闭:

/usr/local/redis/bin/redis-cli
shutdown
# 如果有密码则先
auth 密码

二、客户端使用

1.启动客户端

/usr/local/redis/bin/redis-cli

2.操作

# 1.查看帮助
help
# 2.查看系统信息
info
# 3.添加
set key value
# 4.查看
get key
# 5.查看所有 key
keys * 
# 6.查看当前库中key数量
dbsize
# 7.判断某个key是否存在
exists key
# 8.删除某个key
del key
# 9.查看某个key的数据类型
type key
# 10.修改key名称
rename key newkey
# 11.为key指定过期时间
expire key seconds
# 12.返回key的剩余过期秒数
ttl key

删除:

# 1.删除当前数据库数中所有的key
flushdb
# 2.删除所有数据库数中所有的key
flushall

3.Redis中的库

Redis 中一共有16个库,默认使用第一个库0,通过select+index切换数据库

select index

三、数据类型

1. string

string字符串可以存储任何数据,value值最大上限是512MB

操作

# 1.设置单个key值
set key value
# 2.一次设置多个key值
mset key1 value1 .... keyN valueN
# 3.获取但个key值
get key
# 4.一次获取多个key值
mget key1 key2
# 5.自增
incr key
incrby key increment
# 6.自减
decr key
decrby key decrement
# 7.向末尾追加
append key value
# 8.截取
# start:开始索引  end:结束索引
substr key start end

2. list

字符串列表,既可以作为(先进后出,后进先出)又可以作为队列(先进先出,后进后出)

操作

# 1.头部添加元素
lpush key value1
lpush key value1 value2 ....
# 2.尾部添加元素
rpush key value1
rpush key value1 value2 ....
# 3.获取指定区间内元素
# start:开始索引  end:结束索引
lrange key start end
# 4.获取长度
llen key
# 5.删除尾部元素(最先添加的元素)
rpop key
# 6.删除头部元素(最后添加的元素)
lpop key
# 7.保留指定区间内元素
ltrim key start end

3. set

无序集合,集合中不允许有重复的元素

操作

# 1.添加
sadd key member
sadd key member1 member2 .....
# 2.查看
smembers key
# 3.获取元素个数
scard key
# 4.移除元素
srem key member
srem key member1 member2 ...
# 5.移动元素
smove source destination  member
# 6.判断member是否存在set中
sismember key member
# 7.取交集(都有的)
sinter key1 key2 ...
# 8.取并集(合并去重)
sunion key1 key2 ...
# 9.取差集(key1有,但是key2没有)
sdiff key1 key2

4. zset

有序集合,元素不允许重复

每个元素都会关联一个score,可以根据score进行排序

操作

# 1.添加或修改
zadd key score1 member1 score2 member2 .....
# 2.获取元素内容,按score排序(从小到大)
zrange key start stop
# 3.获取元素内容,按score排序(从大到小)
zrevrange key start stop
# 4.获取元素个数
zcard key
# 5.增加或减少元素的score
zincrbykey increment(10/-10) member
# 6.获取元素score
zscore key membber
# 7.获取指定元素score排名(从小到大)(结果从0开始)
zrank key member
# 8.获取指定元素score排名(从大到小)(结果从0开始)
zrevrank
# 9.删除元素
zrem key member
# 10.删除排名在指定区间内的元素
# 注意:min max 使用的索引(0开始)
zremrangebyrank key min max

5. hash

string类型的fieldvalue的映射表,适合用作对象存储,存储形式和关系型数据库一条记录类似

操作:

# 1.添加或修改记录(一个字段一个字段地添加)
hset key field value
# 2.添加或修改记录(一次添加多个字段)
hmset key field1 value1 field2 value2 ...
# 3.获取一个字段值
hget key field
# 4.获取多个字段值
hmget 可以 field1 field2 .....
# 5.获取一个hash中有多少个字段
hlen key
# 6.获取一个hash中所有field
hkeys key
# 7.获取一个hash中所有value
hvalskey
# 8.获取has中所有的field和value
hgetall key
# 9.判断指定field是否存在
hexists key field
#10.删除hash中特定field
hdel key field
hdel key field1 field2 ...
#11.给指定field增加或减少值
hincrby key field increment(integer)

四、Redis 数据持久化

保存内存中数据到磁盘,下次启动时从磁盘中读取,不会有数据丢失

1. RDB

快照持久化,默认已开启,通过修改配置文件进行配置

文件保存位置 /usr/local/redis/dump.rdb

自动备份:

vim /usr/local/redis/conf/redis.conf

手动备份:

#前台备份
save
#后台备份(数据量大时使用)
bgsave

恢复快照:

只需将备份文件 dump.rdb 移动到 redis 安装目录并启动服务即可

#获取快照保存位置
127.0.0.1:6379> config get dir

2.AOF

Append only file

vim /usr/local/redis/conf/redis.conf

(1)开启备份

(2)备份频率

修改完成后重启服务

3.RDB与AOF

RDB:适合于一般的数据持久化使用,效率高,数据迁移方便
AOF:适合于备份数据实时性要求更高的情况

注意:如果同时开启RDBAOF启动时只会读取AOF中的数据

五、扩展

1.主从

IPRole
10.1.1.42Master
10.1.1.43Slave

Master

cd /usr/local/redis/
#1.编辑配置文件
vim conf/redis.conf
#69行
bind 127.0.0.1 10.1.1.42
#2.重启redis-server
bin/redis-server conf/redis.conf

Slave

cd /usr/local/redis/
#1.编辑配置文件
vim conf/redis.conf
#287行
replicaof 10.1.1.42 6379
# ** 注意:redis4 版本 slaveof ; redis5 版本  replicaof  ***
#2.重启redis-server
bin/redis-server conf/redis.conf

注意:如果主服务器有密码验证添加:

# vim conf/redis.conf
# 294行 
masterauth 密码

查看主从信息:

info Replication

2. Redis 安全限制

增加密码验证

vim /usr/local/redis/conf/redis.conf
#69行
bind 127.0.0.1 10.1.1.42
#508行
requirepass 123abc

远程连接测试

bin/redis-cli -h 10.1.1.42
10.1.1.42:6379> auth 密码

重启服务

ps -ef|grep redis
#关闭
bin/redis-cli
shutdown
#重新启动
bin/redis-server conf/redis.conf

3.安装PHP扩展

下载: https://pecl.php.net/package/redis

安装

tar -xf redis-4.3.0.tgz
cd redis-4.3.0/
phpize
./configure && make && make install

配置

vim /usr/local/php/etc/php.ini
# 909 行
extension=redis.so

重启PHP

service php-fpm restart

创建测试代码:

vim /www/shop/public/test.php
<?Php
    phpinfo();
?>

4. session加入 redis

注意:所测试项目为DSShop

修改项目配置文件

 vim /www/shop/application/config.php
 vim /www/shop/application/admin/config.php
 vim /www/shop/application/home/config.php

修改如下内容:

'session' => [
        ....
        // 驱动方式 支持redis memcache memcached        
         'type'           => 'redis',
        // Memecached 服务器地址
        'host'           => 'redis服务器地址',
        'port'           => 6379,
        'password'       => 123,
        // 是否自动开启 SESSION
        'auto_start' => true,
 ],

5.图像化管理工具

下载地址: https://redisdesktop.com/download

其他

1.与Memcached区别

Redis支持多种数据类型,如listsetzsethash

Redis支持主从模式

Redis支持数据持久化

Redis单个value的最大限制是512MB ,Memcached是1MB

Redis是单核,Memcached是多核

Last modification:July 6th, 2019 at 11:01 pm