• 企业架构LNMP学习笔记47


    企业架构队列缓存中间件分布式redis:

    一直想学习下这块的。今天总算学到了,好好把redis的这块内容理解下。

    1)能够描述Redis作用及其业务适用场景 ;

    2)能够安装配置启动Redis;

    3)能够使用命令行客户端简单操作Redis;

    4)能够实现操作基本数据类型;

    5)能够理解描述Redis数据持久化机制;数据可以保存到磁盘中了。

    6)能够操作安装php的redis扩展;

    7)能够操作和实现Redis的主从模式

    facebook用memcached,其他公司用Redis比较多。这两款软件都是使用的比较多的缓存中间件。

    业务背景:

    模拟运维设计方案:

    根据以上业务需求,准备加入Redis缓存中间件服务器,可以使用到Redis更加丰富的功能。

    在商城业务中实现:

    1)session共享存储到Redis;

    2)Openresty(Nginx+lua)动态限制IP访问。做一个动态防火墙,动态的机制。

    Redis介绍:

    介绍:

    NoSQL 非关系数据库key->value键值对。

    (memcache、Redis、mongoDB)

    这两天把这个学完,然后再看下mysql数据库。

    Redis是Remote Dictionary Server(远程数据服务器)的缩写。

    由意大利人antire开发的一款内存高速缓存数据库。

    该软件使用C语言编写,它的数据模型为Key-Value。

    它支持丰富的数据结构,比如String(字符串)、 list(双向列表)、Hash(哈希)、Set(集合)、Sorted set(zset 有序集合)。

    可持久化(保存数据到磁盘中),保证数据安全性。

    Redis业务使用场景:

    ①[Sort Set]排行榜应用,取top n操作,例如sina微博热门话题(点击量特别高,存到Redis合适。)

    ②[List]获得最新N个数据 或 某个分类的最新数据

    ③[String]计数器应用(memcache)

    ④[Set]sns(social network site)获得共同好友

    ⑤[Set]防攻击系统(ip判断)黑白名单等等

    对比memcached:

    1)Redis不仅仅支持简单的K/V类型的数据,同时还提供list、set、zset、hash等数据结构的存储;

    2)Redis支持master-slave(主-从模式)的应用;

    3)Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

    4)Redis单个value存储String的最大限制是512MB,memcached只能保存1MB的数据。

    5)Redis是单核的,memcached是多核的。

    由于redis只能使用单核,而memcached可以使用多核,所以在比较上,平均每一个核上redis在储存小数据时比memcached性能更高。而却100K以上数据中,memcached性能要高于redis,虽然redis最近也在储存大数据的性能上进行优化,但是比起memcached还是有点逊色。结论是无论你使用那个,每秒处理请求的次数都不会成为瓶颈。

    你需要关注内存使用率。对于key-vlaue这样简单的数据储存,memcached的内存使用率更高,如果采用hash结构,redis的内存使用率会更高,当然这都依赖于具体的应用场景。

    公司使用Redis或memcached,我们运维的工作就达到了。

    大概了解。

    安装与配置:

    官方网址: https://redis.io

    github: https://github.com/redis/redis

    上传软件到目录中:

    redis-4.3.0.tgz php扩展 server01和server03安装

    redis-5.0.5.tar.gz redis软件 server08安装

    解压编译安装:

    1. shell > tar xvf redis-5.0.5.tar.gz
    2. shell > cd redis-5.0.5

    查找github上安装方法: 

    make PREFIX=/usr/locl/redis install

    使用文件:/usr/local/redis/bin

    redis-cli  命令行客户端

    redis-server  服务器端

    测试启动:这个只是测试启动,不是后台启动。

    ./redis-server
    1. [root@server08 bin]# ll
    2. total 32736
    3. -rwxr-xr-x 1 root root 4366568 Sep 15 17:25 redis-benchmark
    4. -rwxr-xr-x 1 root root 8111808 Sep 15 17:25 redis-check-aof
    5. -rwxr-xr-x 1 root root 8111808 Sep 15 17:25 redis-check-rdb
    6. -rwxr-xr-x 1 root root 4806792 Sep 15 17:25 redis-cli
    7. lrwxrwxrwx 1 root root 12 Sep 15 17:25 redis-sentinel -> redis-server
    8. -rwxr-xr-x 1 root root 8111808 Sep 15 17:25 redis-server
    9. [root@server08 bin]# ./redis-server
    10. 7606:C 15 Sep 2023 17:26:11.195 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
    11. 7606:C 15 Sep 2023 17:26:11.195 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=7606, just started
    12. 7606:C 15 Sep 2023 17:26:11.195 # Warning: no config file specified, using the default config. In order to specify a config file use ./redis-server /path/to/redis.conf
    13. 7606:M 15 Sep 2023 17:26:11.195 * Increased maximum number of open files to 10032 (it was originally set to 1024).
    14. _._
    15. _.-``__ ''-._
    16. _.-`` `. `_. ''-._ Redis 5.0.5 (00000000/0) 64 bit
    17. .-`` .-```. ```\/ _.,_ ''-._
    18. ( ' , .-` | `, ) Running in standalone mode
    19. |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
    20. | `-._ `._ / _.-' | PID: 7606
    21. `-._ `-._ `-./ _.-' _.-'
    22. |`-._`-._ `-.__.-' _.-'_.-'|
    23. | `-._`-._ _.-'_.-' | http://redis.io
    24. `-._ `-._`-.__.-'_.-' _.-'
    25. |`-._`-._ `-.__.-' _.-'_.-'|
    26. | `-._`-._ _.-'_.-' |
    27. `-._ `-._`-.__.-'_.-' _.-'
    28. `-._ `-.__.-' _.-'
    29. `-._ _.-'
    30. `-.__.-'
    31. 7606:M 15 Sep 2023 17:26:11.196 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
    32. 7606:M 15 Sep 2023 17:26:11.196 # Server initialized
    33. 7606:M 15 Sep 2023 17:26:11.196 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
    34. 7606:M 15 Sep 2023 17:26:11.196 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
    35. 7606:M 15 Sep 2023 17:26:11.196 * Ready to accept connections

    检查redis的进程:

    1. [root@server08 ~]# ps aux |grep redis
    2. root 7614 0.0 0.4 153996 8120 pts/1 Sl+ 17:38 0:00 ./redis-server *:6379
    3. root 7619 0.0 0.0 112812 972 pts/0 S+ 17:39 0:00 grep --color=auto redis

    可以看到端口是6379。

    Redis后台启动服务:

    复制配置文件到软件目录下:

    将Redis.conf从/root/soft/ redis-5.0.5复制到/usr/local/redis/bin目录下面:

     然后再启动:

    1. [root@server08 bin]# ./redis-server ./redis.conf
    2. 7642:C 15 Sep 2023 18:23:50.484 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
    3. 7642:C 15 Sep 2023 18:23:50.484 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=7642, just started
    4. 7642:C 15 Sep 2023 18:23:50.484 # Configuration loaded

    再检查下进程:

    1. [root@server08 bin]# ps aux |grep redis
    2. root 7614 0.1 0.4 153996 8120 pts/1 Sl+ 17:38 0:02 ./redis-server *:6379
    3. root 7645 0.0 0.0 112812 972 pts/0 R+ 18:24 0:00 grep --color=auto redis

    命令行客户端简单使用:

    telnet可以连接redis,没有本身redis-cli更加好用。

    简单数据操作和查看操作语法帮助:

    1. [root@server08 bin]# ./redis-cli
    2. 127.0.0.1:6379> get name
    3. "devops"
    4. 127.0.0.1:6379> help get
    5. GET key
    6. summary: Get the value of a key
    7. since: 1.0.0
    8. group: string
    9. 127.0.0.1:6379>

    系统状态信息:

    1. 127.0.0.1:6379> info
    2. # Server
    3. redis_version:5.0.5
    4. redis_git_sha1:00000000
    5. redis_git_dirty:0
    6. redis_build_id:64d379e5a99fe9ba
    7. redis_mode:standalone
    8. os:Linux 3.10.0-1160.95.1.el7.x86_64 x86_64
    9. arch_bits:64
    10. multiplexing_api:epoll
    11. atomicvar_api:atomic-builtin
    12. gcc_version:4.8.5
    13. process_id:7614
    14. run_id:f2488e23b691df175c11bc55299b8153fe9642e3
    15. tcp_port:6379
    16. uptime_in_seconds:3043
    17. uptime_in_days:0
    18. hz:10
    19. configured_hz:10
    20. lru_clock:274960
    21. executable:/usr/local/redis/bin/./redis-server
    22. config_file:
    23. # Clients
    24. connected_clients:1
    25. client_recent_max_input_buffer:2
    26. client_recent_max_output_buffer:0
    27. blocked_clients:0
    28. # Memory
    29. used_memory:854240
    30. used_memory_human:834.22K
    31. used_memory_rss:13312000
    32. used_memory_rss_human:12.70M
    33. used_memory_peak:854240
    34. used_memory_peak_human:834.22K
    35. used_memory_peak_perc:100.00%
    36. used_memory_overhead:841014
    37. used_memory_startup:791248
    38. used_memory_dataset:13226
    39. used_memory_dataset_perc:21.00%
    40. allocator_allocated:1419664
    41. allocator_active:1708032
    42. allocator_resident:11173888
    43. total_system_memory:2076344320
    44. total_system_memory_human:1.93G
    45. used_memory_lua:37888
    46. used_memory_lua_human:37.00K
    47. used_memory_scripts:0
    48. used_memory_scripts_human:0B
    49. number_of_cached_scripts:0
    50. maxmemory:0
    51. maxmemory_human:0B
    52. maxmemory_policy:noeviction
    53. allocator_frag_ratio:1.20
    54. allocator_frag_bytes:288368
    55. allocator_rss_ratio:6.54
    56. allocator_rss_bytes:9465856
    57. rss_overhead_ratio:1.19
    58. rss_overhead_bytes:2138112
    59. mem_fragmentation_ratio:16.39
    60. mem_fragmentation_bytes:12499744
    61. mem_not_counted_for_evict:0
    62. mem_replication_backlog:0
    63. mem_clients_slaves:0
    64. mem_clients_normal:49694
    65. mem_aof_buffer:0
    66. mem_allocator:jemalloc-5.1.0
    67. active_defrag_running:0
    68. lazyfree_pending_objects:0
    69. # Persistence
    70. loading:0
    71. rdb_changes_since_last_save:1
    72. rdb_bgsave_in_progress:0
    73. rdb_last_save_time:1694770733
    74. rdb_last_bgsave_status:ok
    75. rdb_last_bgsave_time_sec:-1
    76. rdb_current_bgsave_time_sec:-1
    77. rdb_last_cow_size:0
    78. aof_enabled:0
    79. aof_rewrite_in_progress:0
    80. aof_rewrite_scheduled:0
    81. aof_last_rewrite_time_sec:-1
    82. aof_current_rewrite_time_sec:-1
    83. aof_last_bgrewrite_status:ok
    84. aof_last_write_status:ok
    85. aof_last_cow_size:0
    86. # Stats
    87. total_connections_received:3
    88. total_commands_processed:7
    89. instantaneous_ops_per_sec:0
    90. total_net_input_bytes:175
    91. total_net_output_bytes:29617
    92. instantaneous_input_kbps:0.00
    93. instantaneous_output_kbps:0.00
    94. rejected_connections:0
    95. sync_full:0
    96. sync_partial_ok:0
    97. sync_partial_err:0
    98. expired_keys:0
    99. expired_stale_perc:0.00
    100. expired_time_cap_reached_count:0
    101. evicted_keys:0
    102. keyspace_hits:2
    103. keyspace_misses:0
    104. pubsub_channels:0
    105. pubsub_patterns:0
    106. latest_fork_usec:0
    107. migrate_cached_sockets:0
    108. slave_expires_tracked_keys:0
    109. active_defrag_hits:0
    110. active_defrag_misses:0
    111. active_defrag_key_hits:0
    112. active_defrag_key_misses:0
    113. # Replication
    114. role:master
    115. connected_slaves:0
    116. master_replid:2eef306e4bb9be70779e4e52a1b66dc0d303d75f
    117. master_replid2:0000000000000000000000000000000000000000
    118. master_repl_offset:0
    119. second_repl_offset:-1
    120. repl_backlog_active:0
    121. repl_backlog_size:1048576
    122. repl_backlog_first_byte_offset:0
    123. repl_backlog_histlen:0
    124. # CPU
    125. used_cpu_sys:1.742750
    126. used_cpu_user:1.361523
    127. used_cpu_sys_children:0.000000
    128. used_cpu_user_children:0.000000
    129. # Cluster
    130. cluster_enabled:0
    131. # Keyspace
    132. db0:keys=1,expires=0,avg_ttl=0

    配置环境变量:

    1. [root@server08 bin]# tail -5 /etc/profile
    2. unset i
    3. unset -f pathmunge
    4. PATH=/usr/local/java/bin:$PATH
    5. PATH=/usr/local/mysql/bin:$PATH
    6. PATH=/usr/local/redis/bin:$PATH
    source /etc/profile
  • 相关阅读:
    利用Python进行数据分析【送书第六期:文末送书】
    企业应用现代化实用教程 | 如何快、准、狠地进行应用容器化改造?
    Python中,我们可以使用pandas和numpy库对Excel数据进行预处理,包括读取数据、数据清洗、异常值剔除等
    Pandas---DataFrame函数说明
    MLX90363KDC 3轴X,Y,Z 磁力计位置传感器IC
    用echarts在vue2中实现3d饼图
    多媒体数据处理实验2:PCA
    python+django高校体育乒乓球场地预约管理系统_s2409
    JavaScript 面向对象的基本用法
    Java并发—利用AQS实现自定义锁
  • 原文地址:https://blog.csdn.net/chang_chunhua/article/details/132902025