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

  1. 默认开启,在 /etc/redis 目录下打开配置文件 vim redis.conf ,将其中的 save 选项都注释掉即关闭。
  2. 同步机制: save 900 1  表示900s内发生一次数据更新操作,就会进行一次同步;
  3. 存储路径: /var/lib/redis/dump.rdb ,存储为压缩后的具体的数据;
  4. 优点:
    1. 存储数据会进行压缩,文件体积比AOF小;
    2. 存储的为经过压缩的具体的值,恢复速度比AOF快;
    3. 适用于备份;
  5. 缺点:
    1. 因采用了压缩的机制,至少设置5分钟保存一次数据,同步时需重新保存整个Redis中的数据,所以故障时会有5分钟数据丢失;
    2. 数据保存进RDB时,Redis会fork出一个子进程用来同步,数据量大时会耗时。

AOF

  1. 默认关闭,修改配置文件 redis.conf 中 appendonly no 改为 appendonly yes ;
  2. 同步机制:
    1. appendfsync always :每次有数据更新,都进行同步;
    2. appendfsync everysec :每秒进行一次更新;
    3. appendfsync no :使用操作系统方式进行更新,普遍30s更新一次
  3. 存储路径: /var/lib/redis/appendonly.aof ,存储为具体命令,不进行压缩;
  4. 优点:
    1. 实时同步数据,服务器故障时仅丢失1秒数据;
    2. 存储的命令是直接追加到AOF文件后面,备份时只需添加新的数据进去即可;
    3. AOF文件较大时,Redis会进行重写,只保留最小的命令集合;
  5. 缺点:
    1. 文件不经过压缩,体积较大;
    2. 实时在进行备份,并发量较大时,效率会被慢;
    3. 因存储的是命令,在恢复数据时Redis需重新运行AOF的命令,速度比RDB慢。

 

 

Redis密码:

  1. 设置密码:在redis.conf 配置文件中,将requirepass password 取消注释并指定密码;
  2. 使用密码登录:
    • 进入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的主要内容,如果未能解决你的问题,请参考以下文章

redis存储session配制方法

Redis实现分布式锁(设计模式应用实战)

Redis实现分布式锁(设计模式应用实战)

Redis缓存:java语言注释符号,附超全教程文档

spring boot 整合 redis

Redis 学习 —— 数据类型及操作