Redis
Posted liqiongming
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis相关的知识,希望对你有一定的参考价值。
Redis是一个使用 ANSI C 编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库。其数据是保存在内存中,同时可定时把内存数据同步到磁盘,将数据持久化,比memcached支持更多的数据结构:string,list,set,sorted set,hash。
redis的应用:
- 登录会话存储:存储在redis中,数据不会丢失。
- 排行版/计数器:文章的阅读量,网站人气的排行榜等
- 作为消息队列:如celery使用redis作为中间人。
- 当前在线人数:网站显示当前系统有多少在线人数。
- 常用的数据缓存:网站打开时默认加载出来的模块信息,可先缓存,避免每次访问都需请求数据库。
- 把前200篇文章缓存或者评论缓存:浏览网站把前面200篇文章和对应的评论缓存起来。访问超过的再访问数据库,单文章超过200篇,则把之前的文章删除。
- 好友关系:如微博好友关系。
- 发布和订阅功能:可用来做聊天软件。
Redis的持久化:
两种数据备份方式:
- RDB
- AOF
ROB:
- 默认开启,在 /etc/redis 目录下打开配置文件 vim redis.conf ,将其中的 save 选项都注释掉即关闭。
- 同步机制: save 900 1 表示900s内发生一次数据更新操作,就会进行一次同步;
- 存储路径: /var/lib/redis/dump.rdb ,存储为压缩后的具体的数据;
- 优点:
- 存储数据会进行压缩,文件体积比AOF小;
- 存储的为经过压缩的具体的值,恢复速度比AOF快;
- 适用于备份;
- 缺点:
- 因采用了压缩的机制,至少设置5分钟保存一次数据,同步时需重新保存整个Redis中的数据,所以故障时会有5分钟数据丢失;
- 数据保存进RDB时,Redis会fork出一个子进程用来同步,数据量大时会耗时。
AOF:
- 默认关闭,修改配置文件 redis.conf 中 appendonly no 改为 appendonly yes ;
- 同步机制:
- appendfsync always :每次有数据更新,都进行同步;
- appendfsync everysec :每秒进行一次更新;
- appendfsync no :使用操作系统方式进行更新,普遍30s更新一次
- 存储路径: /var/lib/redis/appendonly.aof ,存储为具体命令,不进行压缩;
- 优点:
- 实时同步数据,服务器故障时仅丢失1秒数据;
- 存储的命令是直接追加到AOF文件后面,备份时只需添加新的数据进去即可;
- AOF文件较大时,Redis会进行重写,只保留最小的命令集合;
- 缺点:
- 文件不经过压缩,体积较大;
- 实时在进行备份,并发量较大时,效率会被慢;
- 因存储的是命令,在恢复数据时Redis需重新运行AOF的命令,速度比RDB慢。
Redis密码:
- 设置密码:在redis.conf 配置文件中,将requirepass password 取消注释并指定密码;
- 使用密码登录:
- 进入Redis后,使用 auth password 进行授权;
- 连接时通过 -a 参数指定密码进行连接 [email protected]:/etc/redis# redis-cli -p 6379 -h 127.0.0.1 -a 111111
其它机器连接Redis:连接本机Redis服务器时,在 redis.conf 文件中的 bind 后添加本机的IP: bing 127.0.0.1 192.168.1.55(Redis本机IP)
python中Redis的订阅与发布:
1 from redis import Redis 2 3 cache = Redis(host=‘192.168.1.83‘,port=6379,password=111111) 4 # 邮件的发布 5 for x in range(3): 6 cache.publish(‘email‘,‘[email protected]‘)
1 # 邮件的订阅功能,先获取对象再订阅 2 ps = cache.pubsub() 3 ps.subscribe(‘email‘) 4 while True: 5 for item in ps.listen(): 6 if item[‘type‘] == ‘message‘: 7 data = item[‘data‘] 8 print(data)
以上是关于Redis的主要内容,如果未能解决你的问题,请参考以下文章