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

[经验分享] Redis数据库基础与应用

[复制链接]

尚未签到

发表于 2016-12-20 07:15:10 | 显示全部楼层 |阅读模式
PS:原创文章,如需转载,请注明出处,谢谢!     
本文地址:http://flyer0126.iyunv.com/blog/2250973
 
一、Redis简介

    开源 key-value形式存储 数据结构服务器   与关系型不同之处:sql标准、acid属性、表结构

    特点:非关系型、分布式的、开源的、水平扩展的

    优势:数据高并发读写、海量数据高效率的存储和访问、对数据的高可扩展性和高可用性

 

    支持数据类型:string、hashes、lists、sets、sorted sets

    支持push\pop、add\remove 交\并集、各种不同的排序

    保证效率 数据缓存在内存中,周期性将更新数据写入磁盘或将修改操作写入追加的记录文件[数据快照或记录操作]

 
二、应用场景
    1. 应用架构

        1.1. 应用程序(Application)直接访问Redis

        1.2. 应用程序直接访问Redis,当Redis访问失败时才访问Mysql

    2. 适用场合

        2.1. 取最新N个数据的操作

        2.2. 排行榜应用,取top N 的操作

        2.3. 精确设定过期时间的应用

        2.4. 计数器的应用

        2.5. Uniq操作,获取某段时间所有数据排重值

        2.6. 实时系统,反垃圾系统

        2.7. Pub/Sub构建实时消息系统

        2.8. 构建队列系统

        2.9. 缓存

三、常用命令
    1. 键值相关命令

     expire 设置失效时间 

     select (0-15)选择数据库

     persist key 取消过期时间

     randomkey 随机返回key

     rename 重命名key

     type 返回key的数据类型

    2. 服务器相关命令

     ping 测试连接是否存活

     info 获取服务器信息和统计

     flushall 删除所有数据库中的所有key

完整命令目录:



  • Key(键)

    • DEL
    • DUMP
    • EXISTS
    • EXPIRE
    • EXPIREAT
    • KEYS
    • MIGRATE
    • MOVE
    • OBJECT
    • PERSIST
    • PEXPIRE
    • PEXPIREAT
    • PTTL
    • RANDOMKEY
    • RENAME
    • RENAMENX
    • RESTORE
    • SORT
    • TTL
    • TYPE
    • SCAN






  • String(字符串)

    • APPEND
    • BITCOUNT
    • BITOP
    • DECR
    • DECRBY
    • GET
    • GETBIT
    • GETRANGE
    • GETSET
    • INCR
    • INCRBY
    • INCRBYFLOAT
    • MGET
    • MSET
    • MSETNX
    • PSETEX
    • SET
    • SETBIT
    • SETEX
    • SETNX
    • SETRANGE

    • STRLEN 






  • Hash(哈希表)

    • HDEL
    • HEXISTS
    • HGET
    • HGETALL
    • HINCRBY
    • HINCRBYFLOAT
    • HKEYS
    • HLEN
    • HMGET
    • HMSET
    • HSET
    • HSETNX
    • HVALS

    • HSCAN 






  • List(列表)

    • BLPOP
    • BRPOP
    • BRPOPLPUSH
    • LINDEX
    • LINSERT
    • LLEN
    • LPOP
    • LPUSH
    • LPUSHX
    • LRANGE
    • LREM
    • LSET
    • LTRIM
    • RPOP
    • RPOPLPUSH
    • RPUSH
    • RPUSHX






  • Set(集合)

    • SADD
    • SCARD
    • SDIFF
    • SDIFFSTORE
    • SINTER
    • SINTERSTORE
    • SISMEMBER
    • SMEMBERS
    • SMOVE
    • SPOP
    • SRANDMEMBER
    • SREM
    • SUNION
    • SUNIONSTORE
    • SSCAN






  • SortedSet(有序集合)

    • ZADD
    • ZCARD
    • ZCOUNT
    • ZINCRBY
    • ZRANGE
    • ZRANGEBYSCORE
    • ZRANK
    • ZREM
    • ZREMRANGEBYRANK
    • ZREMRANGEBYSCORE
    • ZREVRANGE
    • ZREVRANGEBYSCORE
    • ZREVRANK
    • ZSCORE
    • ZUNIONSTORE
    • ZINTERSTORE
    • ZSCAN
    • ZRANGEBYLEX
    • ZLEXCOUNT
    • ZREMRANGEBYLEX






  • HyperLogLog

    • PFADD
    • PFCOUNT
    • PFMERGE






  • GEO(地理位置)

    • GEOADD
    • GEOPOS
    • GEODIST
    • GEORADIUS
    • GEORADIUSBYMEMBER
    • GEOHASH






  • Pub/Sub(发布/订阅)

    • PSUBSCRIBE
    • PUBLISH
    • PUBSUB
    • PUNSUBSCRIBE
    • SUBSCRIBE
    • UNSUBSCRIBE






  • Transaction(事务)

    • DISCARD
    • EXEC
    • MULTI
    • UNWATCH
    • WATCH






  • Script(脚本)

    • EVAL
    • EVALSHA
    • SCRIPT EXISTS
    • SCRIPT FLUSH
    • SCRIPT KILL
    • SCRIPT LOAD






  • Connection(连接)

    • AUTH
    • ECHO
    • PING
    • QUIT
    • SELECT






  • Server(服务器)

    • BGREWRITEAOF
    • BGSAVE
    • CLIENT GETNAME
    • CLIENT KILL
    • CLIENT LIST
    • CLIENT SETNAME
    • CONFIG GET
    • CONFIG RESETSTAT
    • CONFIG REWRITE
    • CONFIG SET
    • DBSIZE
    • DEBUG OBJECT
    • DEBUG SEGFAULT
    • FLUSHALL
    • FLUSHDB
    • INFO
    • LASTSAVE
    • MONITOR
    • PSYNC
    • SAVE
    • SHUTDOWN
    • SLAVEOF
    • SLOWLOG
    • SYNC
    • TIME








四、高级应用



    1. 安全性

         设置客户端连接后进行任何其他指令前需要使用的密码

requirepass flyer0126 (redis.conf)


          连接后auth授权或者登录时授权

auth flyer0126   ||   ./src/redis-cli -a flyer0126
 

    2. 主从复制

         特点:master可以拥有多个salve;多个slave可以连接同一个master外,还可以连接到其他的slave;主从复制不会阻塞master,在同步数据时,master可以继续处理client请求;提高系统的伸缩性。

          主从复制过程:

          slave与master建立连接,发送sync同步命令;master会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存;后台完成保存后,将文件同步至salve;salve将文件保存到硬盘上。

          配置主从服务器:

          slave服务器上配置(redis.conf):

slaveof  主机ip 端口  #指定主机的ip及端口
masterauth flyer0126 #指定主机密码(权限)
           如何判定主从:info (role)

    3. 事务处理

          对事务的支持比较简单,只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令,当一个client在一个连接中发出multi命令时,这个连接会进入一个事务上下文,该连接后续的命令不会立即执行,而是先放到一个队列中,当执行exec命令时,redis会顺序的执行队列中的所有命令。

          discard 取消当前事务

          事务里的某一命令执行错误,整个事务不会回滚。

    4. 持久化机制

          snapshotting(快照) 默认  保存数据

          将内存中数据以快照方式写入到二进制文件中,默认的文件名为dump.rdb,可以通过配置设置自动做快照持久化的方式,可以配置redis在n秒内如果超过m个key的修改就自动做快照。

          save 300 10 #300s内如果超过10个key被修改,则发起快照保存。

          由于快照方式是在一定间隔时间做一次的,如果redis意外down掉的话,就会丢失最后一次快照后的所有修改。

          Append-only file(aof) 记录操作

          比快照方式有更好的持久化性,使用aof时,redis会将每一个收到的写命令都通过write函数追加到文件中,当redis重启时会通过重新执行文件(appendonly.aof)中保存的写命令来在内存中重建整个数据库内容。

          由于os会在内存中缓存write做的修改,不会立即写到磁盘上,这样aof的持久化还是有可能会丢失部分数据的修改。可以通过配置 通过fsync函数强制os写入磁盘的时机。

appendonly yes //启用aof持久化方式
# appendfsync always // 收到命令就写入磁盘,最慢,但是保证完全的持久化
# appendfsync everysec //每秒写入一次,在性能和持久化方面做了折中
# appendfsync no //完全依赖os,性能最好,持久化没保证
 

    5. 发布订阅(Pub/Sub)消息

          消息通信模式,主要解决消息发布和消息订阅之间的耦合。

          Redis作为pub/sub的server,在订阅者和发布者之间起到了消息路由的功能。订阅者通过subscribe命令向redis server订阅自己消息类型,redis将消息类型成为通道(channel)。当发布者通过publish命令向redis server发送特定类型的消息时,订阅该消息类型的全部client都会收到此消息。

    6. 虚拟内存的使用

          Redis的虚拟内存与操作系统的虚拟内存不同,但思路和目的相同,暂时将不经常访问的数据从内存交换到磁盘中,从而腾出宝贵的内存空间用于其他需要访问的数据。

          对于redis,提高数据库容量的办法就是使用虚拟内存把那些不经常访问的数据交换到磁盘上。

虚拟内存配置
vm-enabled yes                            # 开启vm功能
vm-swap-file /tmp/redis-swap  #交换出来的value保存的文件路径
vm-max-memory 1000000        #redis使用的最大内存上限
vm-page-size 32                           #每个页面的大小32字节
vm-pages 134217728                    #最多使用多少页面
vm-max-threads 4                        #用于执行value对象换入的工作线程数量
           

五、图形化管理

Redis Desktop Manager

一款基于Qt5的跨平台Redis桌面管理软件
DSC0000.png
 

支持: Windows 7+, Mac OS X 10.10+, Ubuntu 14+
特点: C++ 编写,响应迅速,性能好。但不支持数据库备份与恢复。
项目地址: https://github.com/uglide/RedisDesktopManager



Redis Client
  
DSC0001.png
 
项目简介: 使用Java编写,功能丰富,缺点是性能稍差,网络不好时,会不时断线。
项目地址: https://github.com/caoxinyu/RedisClient



Redis Studio
  
DSC0002.png
 
项目简介: 又一个C++编写的redis管理工具,仅支持windows平台,支持xp操作系统。
项目地址: https://github.com/cinience/RedisStudio
 
六、示例项目
    使用PHP利用Redis做数据库实现的示例项目,主要包括:用户登录、退出、添加、编辑、删除、分页、关注、取消关注等功能,主要目的为熟悉Redis各数据类型的应用。
    具体实现代码见附件,为本人简单实现,欢迎拍砖~

DSC0003.jpg
  

运维网声明 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-316571-1-1.html 上篇帖子: Redis最为常用的数据类型 下篇帖子: Ehcache/Redis/Tair缓存性能对比
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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