【Redis】Redis 初探

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
日志服务 SLS,月写入数据量 50GB 1个月
简介: 一 简介   Redis 是一款完全开源免费的高性能的key-value数据库,可以作为缓存,kv结构存储和队列,目前在互联网行业比较广泛使用。   Redis作为Key-value型数据库,它提供了Key-Value 映射关系。
一 简介
  Redis 是一款完全开源免费的高性能的key-value数据库,可以作为缓存,kv结构存储和队列,目前在互联网行业比较广泛使用。
  Redis作为Key-value型数据库,它提供了Key-Value 映射关系。除了常规的数值或字符串,Redis的键值能够提供 Lists,Sets,Sorted sets (有序集合),Hashes (哈希表) 多种结构。其中有序集合值得大家去关注。Redis支持诸如列表、集合或有序集合的交集、并集、差集等高级原子操作;同时,如果键值的类型是普通数字,Redis则提供自增等原子操作。
  Redis将数据存储于内存中,或被配置为使用虚拟内存。通过两种方式可以实现数据持久化:使用快照的方式,将内存中的数据不断写入磁盘;或使用类似MySQL的日志方式,记录每次更新的日志。前者性能较高,但是可能会引起一定程度的数据丢失;后者相反,性能较低,但是能保证数据尽量不丢失。

二 安装
安装依赖包
yum install gcc-c++
yum install -y tcl
获取redis软件
  1. wget http://download.redis.io/releases/redis-2.8.13.tar.gz
  2. tar -xzvf redis-2.8.13.tar.gz
  3. mv redis-2.8.13 /usr/local/redis
  4. cd /usr/local/redis
  5. make
修改配置文件
mkdir -p /etc/redis
cp redis.conf /etc/redis
注意修改
daemonize yes (no-->yes)设置后台启动。
启动redis
root@rac4:~# >/usr/local/bin/redis-server /etc/redis/redis.conf
如果启动失败会有如下报错:
  1. root@rac4:~# >redis-cli
  2. Could not connect to Redis at 127.0.0.1:6379: Connection refused
  3. not connected> exit
解决问题之后 重新启动
  1. root@rac4:~# >/usr/local/bin/redis-server /etc/redis/redis.conf
  2. root@rac4:~# >redis-cli
  3. 127.0.0.1:6379>
  4. 127.0.0.1:6379>
  5. 127.0.0.1:6379>
  6. 127.0.0.1:6379> set company youzan.com
  7. OK
  8. 127.0.0.1:6379> get company
  9. "youzan.com"
  10. 127.0.0.1:6379>
三 Redis配置文件介绍
  1. ####基本配置####
  2. daemonize yes #默认值no,该参数用于定制redis服务是否以守护模式运行。---
  3. pidfile /srv/redis/run/redis.pid #默认值/var/run/redis.pid,指定redis服务的进程号文件路径,以守护模式运行时需要配置本参数;
  4. port 6379 #默认值6379,指定redis服务的端口
  5. bind 127.0.0.1 #绑定ip,默认是本机所有网络设备
  6. timeout 0 #客户端空闲n秒后断开连接;默认是 0 表示不断开。
  7. loglevel notice ###设置服务端的日志级别,2.8版本默认是notice。有下列几种选择:
  8.     debug:记录详细信息,用于开发或调试;
  9.     verbose:提供很多有用的信息,但是又不像debug那么详尽,默认就是这一选项;
  10.     notice:适度提醒,多用于产品环境;
  11.     warning:仅显示重要的警告信息;
  12. logfile stdout #指定日志的输出路径,默认值stdout,表示输出到屏幕,守护模式时则输出到/dev/null;
  13. syslog-enabled no #如果要输出日志到syslog中,可以启动syslog-enabled yes,默认该选项值为no。
  14. databases 16 #指定数据库的数量,默认为16个,默认使用的数据库是DB 0。
  15. ####持久化相关配置###
  16. #save <seconds> <changes> ##指定多长时间刷新快照至磁盘,这个选项有两个属性值,只有当两个属性值均满足时才会触发;可以设置多种级别,例如默认的参数文件中就设置了:
  17. save 900 1 #每900秒(15分钟)至少一次键值变更时被触发;
  18. save 300 10 #每300秒(5分钟)至少10次键值变更时被触发;
  19. save 60 10000 #每60秒至少10000次键值变更时被触发;
  20. rdbcompression yes ##默认值yes,当dump数据库时使用LZF压缩字符串对象,如果CPU资源比较紧张,可以设置为no,选择不压缩;
  21. rdbchecksum yes
  22. # The filename where to dump the DB 数据库文件名
  23. dbfilename dump.rdb ##默认值dump.rdb,dump到文件系统中的文件名,注意只能是名称,不能是路径。
  24. dir /usr/local/webserver/redis/db ##默认值./,即当前目录,dump出的数据文件的存储路径;

  25. ####以下为复制相关的设置#####
  26. ####复制默认是不启用的,因此在默认的参数文件下列表参数均被注释####
  27. # slaveof <masterip> <masterport> ##指定主端ip和端口,用于创建一个镜像服务
  28. # masterauth <master-password> ##如果master配置了密码的话,此处也需做设置;
  29. slave-serve-stale-data yes ##默认值yes。当slave丢失与master端的连接,或者复制仍在处理,那么slave会有下列两种表现:
  30. #当本参数值为yes时,slave为继续响应客户端请求,尽管数据已不同步甚至没有数据(出现在初次同步的情况下)
  31. #当本参数值为no时,slave会返回"SYNC with master in progreee"的错误信息;
  32. slave-read-only yes ##默认从Redis是只读模式
  33. # repl-ping-slave-period 10 ###默认值10,指定slave定期ping master的周期;
  34. # repl-timeout 60 ##默认值60,指定超时时间。注意本参数包括批量传输数据和ping响应的时间。
  35. ####安全相关的设置####
  36. # requirepass foobared ###指定一个密码,客户端连接时也需要通过密码才能成功连接;
  37. # rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 ###重定义命令,例如将CONFIG命令更名为一个很复杂的名字:
  38. # rename-command CONFIG "" 取消这个命令;
  39. ####资源限制方面的设置###
  40. # maxclients 10000 #指定客户端的最大并发连接数,默认是没有限制,直到redis无法创建新的进程为止,设置该参数值为0也表示不限制,如果该参数指定了值,当并发连接达到指定值时,redis会关闭所有新连接,并返回'max number of clients reached'的错误信息;
  41. # maxmemory <bytes> #设置redis最大可使用内存。当达到最大内存后,redis会尝试按照设置的回收策略删除键值。如果无法删除键值,或者保留策略设置为不清除,那么redis就会向发出内存的请求返回错误信息。当把redis做为一级LRU的缓存时本参数较为有用。
  42. # maxmemory-policy volatile-lru ###默认值volatile-lru,指定清除策略,有下列几种方法:
  43. volatile-lru -> remove the key with an expire set using an LRU algorithm
  44. allkeys-lru -> remove any key accordingly to the LRU algorithm
  45. volatile-random -> remove a random key with an expire set
  46. allkeys->random -> remove a random key, any key
  47. volatile-ttl -> remove the key with the nearest expire time (minor TTL)
  48. noeviction -> don not expire at all, just return an error on write operations
  49. # maxmemory-samples 3 #默认值3,LRU和最小TTL策略并非严谨的策略,而是大约估算的方式,因此可以选择取样值以便检查。
  50. ####APPEND的配置-####
  51. ONLY模式的设置,默认情况下redis采用异步方式dump数据到磁盘上,极端情况下这可能会导致丢失部分数据(比如服务器突然宕机),如果数据比较重要,不希望丢失,可以启用直写的模式,这种模式下redis会将所有接收到的写操作同步到appendonly.aof文件中,该文件会在redis服务启动时在内存中重建所有数据。注意这种模式对性能影响非常之大。
  52. appendonly no ##默认值no,指定是否启用直写模式;
  53. # appendfilename appendonly.aof ###直写模式的默认文件名appendonly.aof
  54. appendfsync:调用fsync()方式让操作系统写数据到磁盘上,数据同步方式,有下列几种模式:
  55.     always:每次都调用,比如安全,但速度最慢;
  56.     everysec:每秒同步,这也是默认方式;
  57.     no:不调用fsync,由操作系统决定何时同步,比如快的模式;
  58.     no-appendfsync-on-rewrite:默认值no。当AOF fsync策略设置为always或everysec,后台保存进程会执行大量的I/O操作。某些linux配置下redis可能会阻塞过多的fsync()调用。
  59.     auto-aof-rewrite-percentage:默认值100
  60.     auto-aof-rewrite-min-size:默认值64mb
  61. # appendfsync always
  62. appendfsync everysec
  63. # appendfsync no
还有很多其他的参数,难以一次性介绍完整,有心的朋友可以看看redis.cnf文件里面自带的介绍。

四 遇到的问题
1 编译的时候报错
In file included from adlist.c:34:
zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory
zmalloc.h:55:2: error: #error "Newer version of jemalloc required"
make[1]: *** [adlist.o] Error 1
make[1]: Leaving directory `/root/redis-2.8.13/src'
解决方法
Selecting a non-default memory allocator when building Redis is done by setting the `MALLOC` environment variable. Redis is compiled and linked against libc malloc by default, with the exception of jemalloc being the default on Linux systems. This default was picked because jemalloc has proven to have fewer fragmentation problems than libc malloc.  
To force compiling against libc malloc, use:  
    % make MALLOC=libc  
To compile against jemalloc on Mac OS X systems, use:  
    % make MALLOC=jemalloc
编译的时候指定MALLOC=libc的方式
  1. root@rac4:~/redis-2.8.13# >make MALLOC=libc
  2. cd src && make all
2 因为我的是虚拟机,内存只有500M,上面安装了MySQL 导致系统内存不足,刚刚启动报错
[22270] 11 May 09:52:10.453 # Server started, Redis version 2.8.13
[22270] 11 May 09:52:10.458 # 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.
[22270] 11 May 09:52:10.458 * The server is now ready to accept connections on port 6379
解决方法
  按照提示执行 sysctl vm.overcommit_memory=1 。这里科普一下 vm.overcommit_memory
默认值为:0
该参数有三个值,分别是:
0:当用户空间请求更多的的内存时,内核尝试估算出剩余可用的内存。
1:当设这个参数值为1时,内核允许超量使用内存直到用完为止,主要用于科学计算
2:当设这个参数值为2时,内核会使用一个决不过量使用内存的算法,即系统整个内存地址空间不能超过swap+50%的RAM值,50%参数的设定是在overcommit_ratio中设定。
关于 vm.overcommit_ratio
默认值为:50
这个参数值只有在vm.overcommit_memory=2的情况下,这个参数才会生效。

目录
相关文章
|
存储 NoSQL Redis
Redis初探
   大概在2010年的时候,有一次和一个同事聊天,那个时候知道了Redis,对于技术的追随至今,还没有下载一个Redis版本玩玩,   只有1万多行代码,以性能惊人著称。
1395 0
|
NoSQL API PHP
redis 初探
2014年6月24日 17:50:57 解压redis后进入源码目录,只用执行make命令就可以完成安装了 安装完成后到src目录里,将 redis-server redis-cli redis.conf redis-benchmark redis-check-aof redis-check-dump 这几个文件复制到同一个目录下边(也不必要在同一个目录下边) 启动redis服务端: .
914 0
|
6月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
1月前
|
缓存 负载均衡 监控
135_负载均衡:Redis缓存 - 提高缓存命中率的配置与最佳实践
在现代大型语言模型(LLM)部署架构中,缓存系统扮演着至关重要的角色。随着LLM应用规模的不断扩大和用户需求的持续增长,如何构建高效、可靠的缓存架构成为系统性能优化的核心挑战。Redis作为业界领先的内存数据库,因其高性能、丰富的数据结构和灵活的配置选项,已成为LLM部署中首选的缓存解决方案。
|
2月前
|
存储 缓存 NoSQL
Redis专题-实战篇二-商户查询缓存
本文介绍了缓存的基本概念、应用场景及实现方式,涵盖Redis缓存设计、缓存更新策略、缓存穿透问题及其解决方案。重点讲解了缓存空对象与布隆过滤器的使用,并通过代码示例演示了商铺查询的缓存优化实践。
189 1
Redis专题-实战篇二-商户查询缓存
|
1月前
|
缓存 运维 监控
Redis 7.0 高性能缓存架构设计与优化
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Redis 7.0高性能缓存架构,探索函数化编程、多层缓存、集群优化与分片消息系统,用代码在二进制星河中谱写极客诗篇。
|
6月前
|
缓存 NoSQL Java
Redis+Caffeine构建高性能二级缓存
大家好,我是摘星。今天为大家带来的是Redis+Caffeine构建高性能二级缓存,废话不多说直接开始~
951 0
|
2月前
|
缓存 NoSQL 关系型数据库
Redis缓存和分布式锁
Redis 是一种高性能的键值存储系统,广泛用于缓存、消息队列和内存数据库。其典型应用包括缓解关系型数据库压力,通过缓存热点数据提高查询效率,支持高并发访问。此外,Redis 还可用于实现分布式锁,解决分布式系统中的资源竞争问题。文章还探讨了缓存的更新策略、缓存穿透与雪崩的解决方案,以及 Redlock 算法等关键技术。
|
6月前
|
消息中间件 缓存 NoSQL
基于Spring Data Redis与RabbitMQ实现字符串缓存和计数功能(数据同步)
总的来说,借助Spring Data Redis和RabbitMQ,我们可以轻松实现字符串缓存和计数的功能。而关键的部分不过是一些"厨房的套路",一旦你掌握了这些套路,那么你就像厨师一样可以准备出一道道饕餮美食了。通过这种方式促进数据处理效率无疑将大大提高我们的生产力。
238 32
|
6月前
|
缓存 NoSQL Java
Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡
Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡
169 5
Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡
下一篇
oss云网关配置