非关系型数据库-Redis全攻略
零、Redis安装
Redis安装方式有yum和源码安装,推荐yum安装
一、Redis与Memcached的功能对比
| 名称 | 类型 | 过期策略 | 数据类型 | 持久化 | 主从复制 | 虚拟内存 |
|---|---|---|---|---|---|---|
| Memcached | k-v数据库 | 支持 | 单一数据类型 | 不支持 | 不支持 | 不支持 |
| Redis | k-v数据库 | 支持 | 多种数据类型 | 支持 | 支持 | 支持(不建议使用) |
二、Redis常用配置项
vim /etc/redis.conf
daemonize yes 后台运行redis
pidfile ... pid文件的位置
port 6379 端口
bind ... 绑定redis监听的IP
timeout ... 超时连接断开时间
loglevel ... 日志记录级别
logfile ... 日志文件位置
databases ... redis开启的数据库个数
save ... ... 指定在多少秒内有多少个key被改变就生成一个快照
dbfilename ... 快照文件的名字
dir ... 快照文件的位置
appendonly yes 开启AOF持久化
slaveof 主服务器IP port 设置主从复制,在从服务器上配置
requirepass ... 设置操作验证密码
maxmemory 8gb 设置redis可用内存
三、Redis数据库操作
redis-cli -h IP 进入redis数据库
info 查看redis运行状态
select 数据库号 进入指定数据库,数据库号从0~databases项配置的值
auth 密码 密码验证,通过验证才能对数据进行读写操作
config set ... 在线修改配置项
四、Redis数据操作
1、字符串类型操作
set key value 设置键值对,值为字符类型
get key 取值
keys * 查看所有存在的key
exists key 查看指定key是否存在
del key 删除键值对
type key 查看指定键的值的类型
append key value 尾部追加键值对
strlen key 获取key的value值长度
incr key 让key的value值加一
incrby key num 让key的value值增加指定num的值
incrbyfloat key float 让key的value值增加指定float的浮点数
decr key 让key的value值减一
decrby key num 让key的value值减少指定num的值
mset key1 value1 key2 value2 ... 同时设置多个键值对
mget key1 key2 同时获取多个key的value
2、散列类型操作
hset key attr value 设置hash类型的键值对
hget key attr 获取一个key中的指定属性的值
hmset key1 attr1 value1 attr2 value2 ... 同时设置多个属性
hmget key1 attr1 attr2 attr3 ... 同时获取多个属性值
hgetall key 获取一个key的所有属性值
hdel key attr 删除一个key的指定属性
hexists key attr 查看一个key的指定属性是否存在
del book 删除key
3、列表类型操作
lpush key value1 value2 从左边设置一个列表
rpush key value1 value2 从右边设置一个列表
lpop key 从左边弹出key
rpop key 从右边弹出key
lrange key start stop 查看列表指定范围内的值
lrem key count value 删除列表中指定count数的与value相等的内容,count=0删除所有,count>0从左往右删,count<0从右往左删
llen key 查看列表长度
lindex key index 查看列表指定所有的值
4、无序集合操作
sadd key value1 value2 ... 设置一个集合
srem key value 删除指定集合元素
smembers key 查看集合所有元素
sismember key value 查看集合中指定元素是否存在
sdiff key1 key2 取集合1中有集合2没有的元素
sinter key1 key2 取集合1和集合2都有的元素
sunion key1 key2 取集合1和集合2中所有不重复的元素
scard key 查看集合中的元素个数
5、有序集合操作
zadd key score value 设置一个有序集合,score为value的分数
zrange key start stop 取集合中指定分数范围的元素
zrevrank key value 将集合按分数降序排序然后取出指定value的序号
其他命令参考无序集合操作
五、Redis数据库事务操作
multi 事务开始
exex 事务结束
Redis事务不支持回滚
六、Redis数据库持久化配置
Redis数据库支持RBD持久化以及AOF持久化两种持久化配置,两者的区别如下:
1、RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储,所以不影响主进程性能。这种方式适合做数据的备份和灾难备份,因为用RDB文件进行数据恢复比AOF文件恢复速度更快,但是RDB不适合对重要数据备份,因为备份一次的间隔比较长,一旦发生故障将会损失大量数据。相关配置参数为save、dbfilename、dir
2、AOF持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。这种方式记录的最小间隔为1秒,因此发生故障时只会损失1秒的数据,适合对重要数据进行备份。不重启开启AOF持久化的命令如下:config set appendonly yes。相关配置参数为appendonly、dir
七、Redis主从配置
Redis配置主从只需要在从服务器配置文件中写入如下一行内容:slaveof 主服务器IP port
Redis2.6版本之后从服务器默认是只读模式,当需要将从服务器切换为主服务器时需要在从服务器上执行如下命令将从服务器提升为主服务器:slaveof no one;或者可以用如下命令关闭只读模式:config set slave-read-only no
配置Redis主从时需要关闭主服务器的持久化,在从服务器上做持久化配置
单台Redis可用内存不宜配置过大,避免备份恢复时因为数据量过大影响效率
生成场景中Redis主从架构为主从+keepalived,从服务器监听VIP,一旦主服务器宕机,VIP自动切换到从服务器上
八、Redis常用工具与模块
1、PHP配置Redis模块
wget http://pecl.php.net/get/redis-2.2.7.tgz
tar zxvf redis-2.2.7.tgz&&cd redis-2.2.7
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make&&make install
vim php.ini
extension = redis.so
/etc/init.d/php-fpm reload
2、Redis图形管理工具
yum -y install httpd php5.3.4 php-pdo php-cli php-gd php-mbstring
wget http://github.com/erikdubbelboer/phpRedisAdmin/archive/master.zip
unzip master.zip
mv phpRedisAdmin-master/ /var/www/html/redisadmin
chown -R apache.apache redisadmin/
/etc/init.d/httpd start
浏览器访问http://域名/redisadmin
3、Redis内存分析工具--rdbtools
pip install rdbtools
rdb -c memory dump.rdb > redis.csv
九、Redis安全
1、rename-command flushall ""
2、设置操作验证密码
3、使用普通用户运行redis
十、Redis集群
1、客户端分片,需要手动将redis数据迁移到集群中
2、代理分片,需要手动将redis数据迁移到集群中
3、codis,需要会ZooKeeper,最好会GO语言
4、redis Cluster

浙公网安备 33010602011771号