【Redis】Redis 初探

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云原生内存数据库 Tair,内存型 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的情况下,这个参数才会生效。

相关实践学习
基于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
目录
相关文章
|
存储 NoSQL Redis
Redis初探
   大概在2010年的时候,有一次和一个同事聊天,那个时候知道了Redis,对于技术的追随至今,还没有下载一个Redis版本玩玩,   只有1万多行代码,以性能惊人著称。
1270 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服务端: .
863 0
|
16天前
|
NoSQL Java Redis
软件开发常见流程之宝塔初始化安装环境配置,Lam前面不选,直接跳商城,在宝塔内点击软件商城,安Mysql5.7,安java项目管理器,安Ngnix最新版,安Redis
软件开发常见流程之宝塔初始化安装环境配置,Lam前面不选,直接跳商城,在宝塔内点击软件商城,安Mysql5.7,安java项目管理器,安Ngnix最新版,安Redis
|
19天前
|
存储 消息中间件 缓存
apt安装Redis 7
【7月更文挑战第2天】
|
23天前
|
存储 NoSQL 关系型数据库
Redis系列学习文章分享---第一篇(Redis快速入门之初始Redis--NoSql+安装redis+客户端+常用命令)
Redis系列学习文章分享---第一篇(Redis快速入门之初始Redis--NoSql+安装redis+客户端+常用命令)
52 1
|
1月前
|
NoSQL Redis Windows
win10下Redis安装、启动教程
win10下Redis安装、启动教程
24 2
|
1月前
|
消息中间件 缓存 NoSQL
Redis单实例安装
Redis单实例安装
29 1
|
1月前
|
NoSQL Linux 网络安全
基于 centOS7 的 redis 安装
基于 centOS7 的 redis 安装
69 1
|
16天前
|
NoSQL Linux Redis
redis的安装和配置
redis的安装和配置
46 0
|
16天前
|
NoSQL Redis Windows
redis双击闪退解决方法,windows版的redis资源,redis安装,win资源可下
redis双击闪退解决方法,windows版的redis资源,redis安装,win资源可下