设为首页 收藏本站
查看: 921|回复: 0

[经验分享] Redis(一)

[复制链接]

尚未签到

发表于 2018-11-3 06:20:33 | 显示全部楼层 |阅读模式
  介绍:redis是使用内存存储的非关系型数据库;除了能存储普通的字符串键之外,还可以存储其他4种数据结构;既可以作为主数据库使用,也可以作为其他存储系统的辅助数据库;附加功能有发布订阅,主从复制,持久化等。
  数据结构:
  String:存储字符串或数字值;get,set,del
  List:可以有序地存储多个字符串;LPUSH,RPUSH(将元素推入列表左端,右端)LPOP,RPOP;LINDEX(获取列表在给定位置上的一个元素);LRANGE(用于获取列表在给定范围上的所有元素)
  Set:可以无序地存储多个字符串;与list的区别是list可以存储多个相同的字符串;SADD添加;SREM移除;SISMEMBER检查一个元素是否已经存在于集合;
  Hash(散列):可以存储多个键值对之间的映射;HSET,HGET;HGETALL;HDEL;
  Zset(有序集合):也是存储多个键值对,是有序的;键被称为成员member,值被称为分值score;分值必须为浮点数;既可以根据成员访问元素,又可以根据分值以及分值的排列顺序访问元素;ZADD;ZRANGE;ZRANGEBYSCORE;ZREM
  发布与订阅:
  SUBSCRIBE;UNSUBSCRIBE;PUBLISH;PSUBSCRIBE;PUNSUBSCRIBE
  事务:
  一个客户端在不被其他客户端打扰的情况下执行多个命令;命令被MULTI命令和EXEC包围;所有命令被放到一个队列里面;最简单的方法就是把事务放到线程里执行;
  WATCH命令:对键进行监视,直到用户执行EXEC命令的这段时间里,如果有其他客户端抢先对任何被监视的键进行替换,更新或删除等操作,当用户尝试执行EXEC命令时,事务将失败并返回一个错误;
  Redis中并不会在执行watch命令时对数据进行加锁,只会在数据已经被其他客户端抢先修改的情况下,通知执行了watch命令的客户端。这种做法为乐观锁。目的是尽可能地减少客户端的等待时间。
  非事务型流水线:
  Redis执行事务的过程中,会延迟已入队的命令直到客户端发送EXEC命令;通过减少客户端与redis服务器之间的网络通信次数来提升redis执行多个命令时的性能;
  在需要执行大量命令的情况下,为了通过一次性发送所有命令,来减少通信次数并降低延迟值,但是这些命令没有必要作为事务被multi和exec包围时,通过Pipeline流水线一次性发送,尽可能地减少应用程序与redis之间的通信往返次数。
  键的过期时间:
  EXPIRE key-name seconds让给定键在指定的秒数之后过期
  持久化:
  1. 快照持久化
  BGSAVE命令(创建一个子进程去备份);如果系统发生崩溃,用户将丢失最近一次快照之后更改的所有数据。
  SAVE命令;在快照完成前不响应其他命令,可以配置一个时间,超出时间后自动转为BGSAVE形式。
  2. AOF只追加文件
  将被执行的写命令写到AOF文件的末尾,以此来记录数据发生的变化;
  写入频率选项:always(受硬盘性能限制),everysec(每秒写一次),no(人为决定)
  缺陷:AOF文件会不断变大。占用硬盘空间,且还原时间长。
  解决:BGREWRITEAOF命令(创建子进程),移除AOF文件中冗余命令,重写AOF文件。
  复制:
  主从复制,客户端向主服务器写入,从服务器实时得到更新;
  从服务器连接一个主服务器时,主服务器会执行BGSAVE操作,创建一个快照文件,发送给从服务器;
  从服务器也可以拥有自己的从服务器,形成主从链;
  总结:
  1. 使用复制和AOF持久化可以极大地保障数据安全
  2. 在多个客户端同时处理相同的数据时,可以使用watch,multi,exec等命令来防止数据出错


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-629960-1-1.html 上篇帖子: .NET分布式缓存Redis从入门到实战 下篇帖子: Redis(二) 自动补全
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表