redis内存数据库

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介:

===> Redis内存数据库简介:

                 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。


===> Redis 的特点:

            ->基于内存

    -> 持久化: RDB、AOF

            -> 消息机制:支持String,只支持Topic的消息(广播)  

            -> 丰富的数据类型

            -> 支持简单的事务

            -> 支持主从复制

            -> HA(哨兵): 对版本有要求,需要 2.4 版本以上


===> Redis的安装和配置: 需要gcc的编译器

            -> Redis 单机部署:

1
2
3
         tar  - zxvf redis - 3.0 . 5.tar .gz        
         make
         make PREFIX = / app / redis install

            -> Redis的相关命令

                    redis-benchmark       提供的一个压力测试工具,模拟:10万操作

                    redis-check-aof       检查AOF日志文件

                    redis-check-dump      检查RDB快照文件

                    redis-cli                     命令行

                    redis-sentinel        哨兵(Redis的HA) -----> 配置文件:sentinel.conf 2.4版本以上

                    redis-server      服务器

            -> 配置文件    

                    --- redis.conf

                            daemonize yes  改成yes 后,启动后会在后台运行

                            port 6379

            -> 服务启动命令:redis-server conf/redis.conf

            -> 客户端连接命令: redis-cli -p 6379  |  redis-cli  -h 192.168.10.210 -p 6379


===> Redis 集群的安装和配置:(星型架构,线型架构)

            -> 此处只讲解星型架构(此架构结构为单台服务器上使用不同端口启动三个服务组成集群,多台服务器同理)

                --- 主:6379端口               (关闭 RDB 和 AOF)

                --- 从:6380, 6381端口  (开启 RDB 和 AOF)

            -> 配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
     redis6379.conf
     daemonize yes
     #save 900 1
     #save 300 10
     #save 60 10000
             
     pidfile  / app / redis / pids / redis_6379.pid
     logfile  "/app/redis/logs/redis_6379/redis.log"
     dbfilename dump.rdb
     dir  "/data/redis_data/redis_6379"
         
     appendonly no
     appendfilename  "appendonly6379.aof"
             
     redis6380.conf
     port  6380
     slaveof  192.168 . 157.11  6380
         
     pidfile  / app / redis / pids / redis_6380.pid
     logfile  "/app/redis/logs/redis_6380/redis.log"
     dbfilename dump.rdb
     dir  "/data/redis_data/redis_6380"
         
     appendonly yes
     appendfilename  "appendonly6380.aof"
             
     redis6381.conf
     port  6381
 
     slaveof  192.168 . 157.11  6379
     pidfile  / app / redis / pids / redis_6381.pid
     logfile  "/app/redis/logs/redis_6381/redis.log"
     dbfilename dump.rdb
     dir  "/data/redis_data/redis_6381"
         
     appendonly yes
     appendfilename  "appendonly6381.aof"       

                 (*)注意:默认:从节点只读

1
2
3
(error) READONLY You can't write against a read only slave.
修改参数:
slave - read - only yes


            -> Redis的HA:哨兵机制(要在解压的安装包中copy sentinel.conf 文件到 /conf 目录下)

1
2
3
4
5
6
7
8
9
10
       sentinel monitor mymaster   192.168 . 10.210   6379   1
       #                              IP            端口   哨兵个数
       sentinel auth - pass   <master - name>  <password>
       # 配置连接主节点的密码
       sentinel down - after - milliseconds  mymaster   30000
       # 表示 30 秒内如果没有收到主节点的心跳,哨兵就认为主节点down
       sentinel  parallel - syncs  mymaster  1
       # 选举出新的主节点后,可以同时连接其他从节点的个数
       sentinel  failover - timeout  mymaster   180000
       # 失败切换时,允许的最大时间

                    ---哨兵启动命令:redis-sentinel sentinel.conf

            -> Redis的分片:

                    ---Twemproxy 是一种代理分片机制, 由 Twitter 开源

                        Twemproxy 作为代理,可接受来自多个程序 的访问,按照路由规则,转发给后台的各个 Redis 服务器, 再原路返回

                    --- 安装Twemproxy

1
2
3
4
        git clone https: / / github.com / twitter / twemproxy.git
        cd twemproxy /
        
        CFLAGS = "-ggdb3 -O0"  autoreconf  - fvi && . / configure  - - prefix = / app / proxy  - - enable - debug = log && make &&  make install



                    --- 配置文件:nutcracker.yml  (需要在解压的安装包/conf 目录下copy 到安装目录的 conf 目录下)

1
2
3
4
5
6
7
8
9
10
11
        alpha:
        listen:  127.0 . 0.1 : 22121
        hash : fnvla_64
        distribution: ketama
          auto_eject_hosts: true
          redis: true
          server_retry_timeout:  2000
          server_failure_limit:  1
          servers:
          -  192.168 . 10.210 : 6380
          -  192.168 . 10.210 : 6381

                    --- 检查配置文件是否正确:  ./nutcracker  -t  conf/nutcracker.yml

                    --- 启动代理服务器: ./nutcracker -d -c  conf/nutcracker.yml

                    --- 此时连接Redis 需要使用 Twemproxy 配置的端口连接: redis-cli  -p  22121

===> Redis的操作:基于key-value形式 

            -> 

                    --- 

===> Redis的事务: 不是真正的事务

            -> Redis的事务的本质:将一组操作放入队列中,批量执行

            -> 对比Oracle和Redis的事务

                 image.png

            -> Redis 的事务实例:(银行转账)

1
2
3
4
5
6
       set  tom  1000
       set  mike  1000
       multi
       decrby tom  100
       incrby mike  100
       exec


===> Redis的锁机制

            -> 核心:当事务提交的时候,如果监控的值,发生变化,则提交失败

         命令:watch

            -> Redis 的锁实例:(买票

1
2
3
4
5
6
7
8
9
10
11
12
13
14
       set  ticket  1        
       set  tom  1000
           
       用户一:tom
       multi
       decr ticket
       decrby tom  100
       exec   - - - - - - - > 提交的时候,慢了一点
           
       1 ) (integer)  - 1    = = = = > 票数不可能是 - 1
       2 ) (integer)  900
           
       用户二:在tom提交前,已经把票买走了  
       decr ticket


===> Redis的消息机制

            -> Redis 消息系统类型

                    --- 同步消息系统:需要对方的回答

                    --- 异步消息系统:不需要等待对方回答

            -> Redis 消息类型

                    --- Queue: 队列(点对对)

                    --- Topic: 主题 (广播)

                    (*)Redis和Kafka:只支持Topic

                    (*)  JMS: Java Message Service ----> 都支持:Queue和Topic

 推荐:Weblogic


            -> Redis 消息相关命令

                    publish: 发布消息 指定频道

                    subscribe:订阅消息 指定频道

                    psubscribe:订阅消息 使用通配符指定频道



===> Redis的持久化:  RDB、AOF

            -> 持久化作用:进行恢复

            -> RDB:快照的方式。每隔一段时间,把内存中的数据写到rdb文件中

                    --- 优点:恢复的速度快

                    --- 缺点:如果在两次RDB之间发生了掉电,数据肯定丢失

                    --- 参数:

                            规则:从下往上

                            save 900 1      在15分钟内,如果有1个key的value发生了变化,就产生RDB文件

                            save 300 10     在5分钟内,如果有10个key的value发生了变化,就产生RDB文件

                            save 60 10000   在60秒内,如果有1w个key的value发生了变化,就产生RDB文件

                            

                            stop-writes-on-bgsave-error yes 如果在写RDB文件的时候产生了错误,停止新的数据写入

                            rdbcompression yes 是否压缩(优点:节约了空间  缺点:恢复的效率低),可以设置为:no

                            rdbchecksum yes  校验和来检查RDB文件是否是好的

                            dbfilename dump.rdb  如果在集群下,一台主机上运行多个Redis的实例,建议区别rdb文件

                            dir ./    保存的目录



            -> AOF:append only file(记录日志)

                    --- 优点:数据安全性高

                    --- 缺点:恢复速度慢,需要重做日志,达到恢复的目的

                    --- 默认禁用

                    --- 参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
         appendonly no   = = = > yes      #开启AOF                
         appendfilename  "appendonly.aof"   # 如果在集群下,一台主机上运行多个Redis的实例,建议区别aof文件
                   
         # 什么时候记录日志???
         # appendfsync always  # 每个操作都记录日志。最安全,性能最差
         appendfsync everysec   # 默认:每秒
         # appendfsync no      # 由操作系统决定
         no - appendfsync - on - rewrite no  # 重写发生的时候,是否写入aof的新日志
         # 什么时候执行AOF重写?
         auto - aof - rewrite - percentage  100
         auto - aof - rewrite - min - size  64mb
                             
         # 什么是AOF的重写:rewrite
         set  0
         incr i
         incr i
                                 = = = = = = > 问题: AOF文件太大了
         100
         * * * *
         incr i
 
         最终:i  =  100
                 
         # 演示:AOF的重写
         模拟: 10 万个操作
         bin / redis - benchmark  - 100000        

===> Redis 问题链接:(找了几个比较经典的问题处理链接,留作收藏,以后备用


            -> http://blog.sina.com.cn/s/blog_a1e9c7910102vmx5.html

            -> http://blog.csdn.net/a491857321/article/details/52006376

本文转自   tianshuai369   51CTO博客,原文链接:http://blog.51cto.com/songqinglong/2066611

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1月前
|
存储 NoSQL Redis
【Redis】利用Redis List实现数据库分页快速查询
【Redis】利用Redis List实现数据库分页快速查询
118 0
|
1月前
|
存储 缓存 NoSQL
利用Redis List实现数据库分页快速查询的有效方法
利用Redis List实现数据库分页快速查询的有效方法
|
1月前
|
NoSQL Java 数据库连接
使用Java实现从数据库查出数据存入Redis,并在查询时先查Redis,如果Redis中没有数据再从数据库中读取
使用Java实现从数据库查出数据存入Redis,并在查询时先查Redis,如果Redis中没有数据再从数据库中读取
365 1
|
10天前
|
NoSQL MongoDB Redis
Python与NoSQL数据库(MongoDB、Redis等)面试问答
【4月更文挑战第16天】本文探讨了Python与NoSQL数据库(如MongoDB、Redis)在面试中的常见问题,包括连接与操作数据库、错误处理、高级特性和缓存策略。重点介绍了使用`pymongo`和`redis`库进行CRUD操作、异常捕获以及数据一致性管理。通过理解这些问题、易错点及避免策略,并结合代码示例,开发者能在面试中展现其技术实力和实践经验。
137 8
Python与NoSQL数据库(MongoDB、Redis等)面试问答
|
20天前
|
NoSQL 安全 Redis
redis内存限制与淘汰策略
Redis内存管理包括限制和淘汰策略。`maxmemory`配置参数决定内存上限,无设置时64位系统默认不限制,可能导致系统资源耗尽,生产环境建议设定合理值。当内存满时,未设置淘汰策略会导致写入错误。Redis提供8种淘汰策略,如LRU(最近最少使用)和LFU(最不经常使用),以及随机或基于过期时间的删除。需根据数据重要性、访问频率和一致性选择合适策略。
280 0
|
26天前
|
存储 缓存 NoSQL
Redis 服务器指南:高性能内存数据库的完整使用指南
Redis 服务器指南:高性能内存数据库的完整使用指南
|
28天前
|
存储 缓存 NoSQL
Redis的内存淘汰策略是什么?
【4月更文挑战第2天】Redis内存淘汰策略在内存满时,通过删除旧数据为新数据腾空间。策略包括:volatile-lru/LFU(基于LRU/LFU算法淘汰有过期时间的键),volatile-random/ttl(随机/按TTL淘汰),allkeys-lru/LFU(所有键的LRU/LFU),allkeys-random(随机淘汰所有键),以及noeviction(不淘汰,返回错误)。选择策略要考虑访问模式、数据重要性和性能需求。
|
1月前
|
NoSQL 应用服务中间件 Linux
Redis的内存回收机制
Redis的内存回收机制
25 2
|
1月前
|
缓存 NoSQL 数据库
[Redis]——数据一致性,先操作数据库,还是先更新缓存?
[Redis]——数据一致性,先操作数据库,还是先更新缓存?
|
10天前
|
关系型数据库 MySQL 分布式数据库
《MySQL 简易速速上手小册》第6章:MySQL 复制和分布式数据库(2024 最新版)
《MySQL 简易速速上手小册》第6章:MySQL 复制和分布式数据库(2024 最新版)
46 2