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

[经验分享] Redis系列(1)之安装

[复制链接]

尚未签到

发表于 2015-7-21 11:11:08 | 显示全部楼层 |阅读模式
Redis系列(1)之安装
  由于项目的需要,最近需要研究下Redis。Redis是个很轻量级的NoSql内存数据库,它有多轻量级的呢,用C写的,源码只有3万行,空的数据库只占1M内存。它的功能很丰富,可以将其用作缓存,队列系统等。我们的项目就是用其作为缓存系统。关于Redis的介绍这里就不多说,刚上手完了一会,感觉还不错。那么熟悉Redis就从安装开始。
  

1. Redis 单机的安装
  相比于Hbase的安装,Redis的安装非常简单。


  • 首先从官网上下载安装包,注意Redis的版本规则是次版本(即小数点后的数字)是偶数的话就是稳定版本(如2.4,2.6),如果为奇数则为非稳定版本。我使用的是2.8.17
  • 解压安装包好后,进入目录,由于redis是用c写的运行make进行编译



1 tar xzvf redis.2.8.17.tar.gz
2 cd redis.2.8.17
3 make

  • 运行make test检查编译是否OK,OK的话有提示



1 192:redis-2.8.17 rcf$ make test
2 ...
3 \o/ All tests passed without errors!
4
5 Cleanup: may take some time... OK

  • 运行make install , 将 可执行文件复制到/usr/local/bin里面,这样就可以在哪都运行redis了。需要注意下root的权限问题。



1 192:redis-2.8.17 rcf$ sudo make install
2 Password:
3 cd src && /Applications/Xcode.app/Contents/Developer/usr/bin/make install
4
5 Hint: It's a good idea to run 'make test' ;)
6
7     INSTALL install
8     INSTALL install
9     INSTALL install
10     INSTALL install
11     INSTALL install

  • 这个时候会有5个可执行文件,他们分别是redis-server,redis-cli,redis-benchmark,redis-check-aof,redis-check-dump,各文件功能如下表所示。

文件名说明
redis-serverRedis服务器
redis-cliRedis命令行客户端
redis-benchmarkRedis性能测试工具
redis-check-aofAOF文件修复工具
redis-check-dumpRDB文件检查工具


  • 运行redis-server就可以启动Redis了。Redis的默认端口号是6379. 然后运行redis-cli就可以进行客户端操作了。



1 92:redis-2.8.17 rcf$ redis-server
2 [3360] 27 Nov 22:50:08.984 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
3 [3360] 27 Nov 22:50:08.985 * Increased maximum number of open files to 10032 (it was originally set to 256).
4                 _._                                                  
5            _.-``__ ''-._                                             
6       _.-``    `.  `_.  ''-._           Redis 2.8.17 (00000000/0) 64 bit
7   .-`` .-```.  ```\/    _.,_ ''-._                                   
8  (    '      ,       .-`  | `,    )     Running in stand alone mode
9  |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
10  |    `-._   `._    /     _.-'    |     PID: 3360
11   `-._    `-._  `-./  _.-'    _.-'                                   
12  |`-._`-._    `-.__.-'    _.-'_.-'|                                 
13  |    `-._`-._        _.-'_.-'    |           http://redis.io        
14   `-._    `-._`-.__.-'_.-'    _.-'                                   
15  |`-._`-._    `-.__.-'    _.-'_.-'|                                 
16  |    `-._`-._        _.-'_.-'    |                                 
17   `-._    `-._`-.__.-'_.-'    _.-'                                   
18       `-._    `-.__.-'    _.-'                                       
19           `-._        _.-'                                          
20               `-.__.-'                                               
21
22 [3360] 27 Nov 22:50:08.986 # Server started, Redis version 2.8.17
23 [3360] 27 Nov 22:50:08.986 * The server is now ready to accept connections on port 6379
  


  • 至此看似redis安装完成了,其实不然。你会发现这个redis-server命令在生产开发环境中并不很好用,这个时候可以用脚本来更好的控制Redis。在util文件中,有脚本redis_init_script来控制redis-server的开始关闭,但是需要进行配置。通过查看这个脚本,不难发现其实用的也是redis-server这个命令。只是相比于简单的使用redis-server命令,它使用了这种方式:
  redis-server ${conf}      
  ${conf} 表示配置文件的路径。由此可见,我们可以自定义配置文件的路径,以及通过修改配置文件来优化redis。



1 #!/bin/sh
2 #
3 # Simple Redis init.d script conceived to work on Linux systems
4 # as it does use of the /proc filesystem.
5
6 REDISPORT=6379
7 EXEC=/usr/local/bin/redis-server
8 CLIEXEC=/usr/local/bin/redis-cli
9
10 PIDFILE=/var/run/redis_${REDISPORT}.pid
11 CONF="/etc/redis/${REDISPORT}.conf"
12
13 case "$1" in
14     start)
15         if [ -f $PIDFILE ]
16         then
17                 echo "$PIDFILE exists, process is already running or crashed"
18         else
19                 echo "Starting Redis server..."
20                 $EXEC $CONF
21         fi  
22         ;;  
23     stop)
24         if [ ! -f $PIDFILE ]
25         then
26                 echo "$PIDFILE does not exist, process is not running"
27         else
28                 PID=$(cat $PIDFILE)
29                 echo "Stopping ..."
30                 $CLIEXEC -p $REDISPORT shutdown
31                 while [ -x /proc/${PID} ]
32                 do  
33                     echo "Waiting for Redis to shutdown ..."
34                     sleep 1
35                 done
36                 echo "Redis stopped"
37                 $CLIEXEC -p $REDISPORT shutdown
38                 while [ -x /proc/${PID} ]
39                 do  
40                     echo "Waiting for Redis to shutdown ..."
41                     sleep 1
42                 done
43                 echo "Redis stopped"
44         fi
45         ;;
46     *)
47         echo "Please use start or stop as first argument"
48         ;;
49 esac
  


  • 通过修改REDISPORT和CONF两个参数我们就可以修改redis的端口以及配置文件和持久化文件,日志文件的路径。新建两个文件夹并各自命名,比如新建以下两个文件。当然我也可以将下面的两个文件目录合并在一起。比如我新建目录/rcf/6379 用来存放配置文件和持久化文件。

目录名说明
/etc/redis存放redis配置文件
/var/redis/端口号存放redis持久化文件


  • 配置文件去哪里搞呢?在redis-2.8.17的src的redis.cof 复制到/rcf/6379目录下,并从命名为6379.conf.  注意,redis_init_script的CONF参数在这里需要设置为CONF=/rcf/6379/${REDISPORT}.conf。 同时还需要对6379.conf进行下修改。关于conf内的其他配置,我们下次再介绍。

参数说明
daemonizeyes使redis以守护进程模式运行
pidfile/var/run/redis_端口号.conf设置redis的PID文件位置。需要与redis_init_script的PIDFILE参数一致
port端口号设置redis监听的端口号
dir/var/redis/端口号设置持久化文件存放位置
  
  至此,我们就可以以守护进程的方式来运行redis了。
  



1 192:utils rcf$ ./redis_init_script
2 Please use start or stop as first argument
3 192:utils rcf$ ./redis_init_script start
4 Starting Redis server...
5
6 192:utils rcf$ redis-cli
7 127.0.0.1:6379> ping
8 PONG
  
  

2. Redis 的简单使用

2.1 Redis的启动与关闭


  • server启动方式

    • 直接运行可执行文件,运行redis-server来启动,但是该方法不是守护进程方式。
    • 经过上章节配置后,可以使用redis_init_script start脚本来启动,比较灵活。
    • 使用redis-server ${conf}的方式来启动,需要配置${conf}配置文件路径,该方式等同于redis_init_script方式。


  • client启动方式

    • 直接运行可执行文件,运行redis-cli来启动,该方式启动是交互性的命令行操作。还可以通过-h和-p参数来自定义地址和端口号,比如


  





1 userdeMacBook-Pro:utils rcf$ redis-cli -h 127.0.0.1 -p 6379
2 127.0.0.1:6379> ping
3 PONG
4 127.0.0.1:6379>
  




    • redis-cli ${cmd}直接来进行相关操作,${cmd}是具体的操作,比如:





1 userdeMacBook-Pro:utils rcf$ redis-cli ping
2 PONG
  


  • Redis的关闭,使用redis-cli shutdown命令。当redis收到shutdown命令后,会先切断所有客户端的链接,然后根据配置执行持久化,最后完成退出。Redis可以妥善处理SIGTERM信号,所以使用'kill Redis的进程'也可以正常结束Redis,效果跟redis-cli shutdown一样。

2.2 Redis的配置设置


  • 第一种在启动的时候,使用redis-server ${conf},
  • 第二种直接传入配置设置,redis-server ${conf} --loglevel warning 。其中--loglevel warning操作会覆盖${conf}中关于redis-server的设置,但是Redis的配置较多,且该方式不灵活,所以不推荐。
  • 第三种在Redis运行的时候通过CONFIG SET命令在不重启redis的情况下动态修改部分配置,这种方式较灵活,但是并不能对所以的配置有效,只支持部分配置。



1 127.0.0.1:6379> config get loglevel
2 1) "loglevel"
3 2) "notice"
4 127.0.0.1:6379> config set loglevel warning
5 OK
6 127.0.0.1:6379> config get loglevel
7 1) "loglevel"
8 2) "warning"
9 127.0.0.1:6379>
  

2.3 Redis的基本概念
  Redis是个字典结构的存储服务器,它实际上一个Redis实例提供了多个来存储数据的字典,客户段可以制定将数据存放在哪个字典中。这个跟关系型数据库实例可以创建多个数据库有点类似,但是两者又有较大的区别。


  • redis的字典数据库是以数字命令的,每一个数据库对外都是一个以0开始的递增的数字命名,Redis默认支持16个数据库,可以通过配置参数databases来修改这一参数。客户端与redis建立连接后会自动选择0号数据库,不过可以通过select命令跟换数据库。因此Redis不支持自定义数据库的名字,每个数据库以编号命名,开发者必须自己记录哪些数据库存储了哪些数据。



1 127.0.0.1:6379> select 0
2 OK
3 127.0.0.1:6379> set foo 1
4 OK
5 127.0.0.1:6379> get foo
6 "1"
7 127.0.0.1:6379> select 1
8 OK
9 127.0.0.1:6379[1]> get foo
10 (nil)

  • Redis也不支持为每个数据库分别设置不同的访问密码,所以一个客户端要么可以访问所有数据,要么连一个数据库也没有访问权限。
  • 最重要的一点,多个数据库之间并不是完全隔离的,比如FLUSHALL命令可以清除一个Redis实例中所有数据库的数据。
  • 因此,Redis的数据库更像是一种命名空间,且不适应存放不同应用程序的数据。由于Redis是个轻量级的数据库,一个空的redis实例占用内存只有1M,所以可以通过建立多个Redis实例的方式来避免以上缺点。

2.4 Redis的数据类型
  Redis支持一下几种数据类型:


  • 字符串类型,string
  • 散列类型,hash
  • 列表类型,list
  • 集合类型,set
  • 有序集合类型,zset

2.5 Redis的基础操作


  • select 0 选择数据库


  • keys pattern ,返回所有符合pattern的所有键, 使用该命令需要遍历所有的键,数据量大时性能,生产环境时候不建议使用。pattern支持以下通配符

符号含义
匹配单个字符
*匹配多个字符(包括0个)
[]匹配括号内的任一字符,可以使用“-”表示一个范围,如a[b-d]可以匹配ab,ac,ad
  \x

匹配字符x,用于转义


  • exists key 判断一个键是否存在,存在返回1,否则返回0.


  • del key1 [key2 ...],可以删除一个或者多个key,返回值为为删除键的个数。DEL命令不支持通配符,但是可以用以下两个方法来实现,

    • 结合linux的管道和xargs命令实现所有符合规则的键。比如要删除所以以"user:"开头的键,可以使用redis-cli keys "user:*" | xargs redis-cli del
    • del支持多个键作为参数,所以可以执行redis-cli del  `redis-cli keys "user:*"`,注意 这里用的是"`"而不是单引号。


  • set key value , 添加键key,其值为value。
  • get key ,获取键key的值。
  • type key,查看建Key的值的类型。



总结:
  本节主要介绍了Redis的安装,基础的概念,以及基本的操作。经过本节的学习,对于Redis已经有了基础的了解,下一节我们将学习下Redis的数据类型以及相关操作。
  

运维网声明 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-89016-1-1.html 上篇帖子: Redis在Windows+linux平台下的安装配置(转) 下篇帖子: Redis数据类型
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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