今天学习了淘淘商城中的redis的使用,在这里把它记录下来。html
Redis的安装是很简单的,安装以前咱们须要c语言的编译环境。若是没有gcc须要在线安装。yum install gcc-c++
。前端
第一步:redis的源码包上传到linux系统。
第二步:解压缩redis。tar -zxvf redis-3.0.0.tar.gz
第三步:编译。进入redis源码目录。make
第四步:安装。make install PREFIX=/usr/local/redis
,PREFIX参数指定redis的安装目录。java
1.运行redis
在redis的安装目录下直接运行./redis-server
就能够启动redis,但这是前端启动。若是咱们想后台启动就须要:
①进入redis-3.0.0.tar.gz解压出来的文件夹,复制里面的redis.conf文件到安装目录下。而后将daemonize改成yes
②执行./redis-server redis.conf
运行redis。这样redis就后台运行了,咱们可使用ps aux|grep redis
来查看redis的运行状态
咱们可使用如下命令来进入操做redis:node
./redis-cli ##进入redis客户端 ./redis-cli -h 192.168.72.121 -p 6379 ##链接指定ip和端口的redis服务器 ./redis-cli shutdown ##关闭redis客户端
2.redis中的五种类型
先来看几个操做数据库的基本命令:linux
KEYS * ##得到当前数据库的全部键 EXISTS key [key ...] ##判断键是否存在,返回个数,若是key有同样的也是叠加数 DEL key [key ...] ##删除键,返回删除的个数 TYPE key ##获取减值的数据类型(string,hash,list,set,zset) FLUSHALL ##清空全部数据库 Expire key second ##设置key的过时时间 Ttl key ##查看key的有效期 Persist key ##清除key的过时时间。Key持久化。
redis中全部的数据都是Key-value类型的,其中有五种主要数据类型:字符串类型(string),散列类型(hash),列表类型(list),集合类型(set),有序集合类型(zset)。而在这五种类型中,咱们最经常使用的是字符串类型,散列类型。这里简单介绍一下字符串类型和散列类型:
①字符串类型stringc++
SET ##赋值,用法: SET key value GET ##取值,用法: GET key INCR ##递增数字,仅仅对数字类型的键有用,至关于Java的i++运算,用法: INCR key INCRBY ##增长指定的数字,仅仅对数字类型的键有用,至关于Java的i+=3,用法:INCRBY key increment,意思是key自增increment,increment能够为负数,表示减小。 DECR ##递减数字,仅仅对数字类型的键有用,至关于Java的i–,用法:DECR key DECRBY ##减小指定的数字,仅仅对数字类型的键有用,至关于Java的i-=3,用法:DECRBY key decrement,意思是key自减decrement,decrement能够为正数,表示增长。 INCRBYFLOAT ##增长指定浮点数,仅仅对数字类型的键有用,用法:INCRBYFLOAT key increment APPEND ##向尾部追加值,至关于Java中的”hello”.append(“ world”),用法:APPEND key value STRLEN ##获取字符串长度,用法:STRLEN key MSET ##同时设置多个key的值,用法:MSET key1 value1 [key2 value2 ...] MGET ##同时获取多个key的值,用法:MGET key1 [key2 ...]
②散列类型hashredis
HSET ##赋值,用法:HSET key field value HMSET ##一次赋值多个字段,用法:HMSET key field1 value1 [field2 values] HGET ##取值,用法:HSET key field HMGET ##一次取多个字段的值,用法:HMSET key field1 [field2] HGETALL ##一次取全部字段的值,用法:HGETALL key HEXISTS ##判断字段是否存在,用法:HEXISTS key field HSETNX ##当字段不存在时赋值,用法:HSETNX key field value HINCRBY ##增长数字,仅对数字类型的值有用,用法:HINCRBY key field increment HDEL ##删除字段,用法:HDEL key field HKEYS ##获取全部字段名,用法:HKEYS key HVALS ##获取全部字段值,用法:HVALS key HLEN ##获取字段数量,用法:HLEN key
其余的数据类型就不详细介绍了,相关资料能够点击传送门shell
Redis的全部数据都是保存到内存中的。
Rdb:快照形式,按期把内存中当前时刻的数据保存到磁盘。Redis默认支持的持久化方案,一直开启,不会被关闭。
经过上图咱们能够看到,dump.rdb会在如下状况保存一次。数据库
aof形式:append only file。把全部对redis数据库操做的命令,增删改操做的命令。保存到文件中。数据库恢复时把全部的命令执行一遍便可。要想开启aof模式须要在redis.conf配置文件中将appendonly改成yesruby
Redis集群搭建的方式有多种,例如使用zookeeper等,但从redis3.0以后版本支持redis-cluster集群,Redis-Cluster采用无中心结构,每一个节点保存数据和整个集群状态,每一个节点都和其余全部节点链接。其redis-cluster架构图以下:
其架构细节:
一、全部的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
二、节点的fail是经过集群中超过半数的节点检测失效时才生效。
三、客户端与redis节点直连,不须要中间proxy层.客户端不须要链接集群全部节点,链接集群中任何一个可用节点便可。
四、redis-cluster把全部的物理节点映射到[0-16383]slot上(不必定是平均分配),cluster 负责维护node<->slot<->value。
五、Redis集群预分好16384个哈希槽,当须要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪一个槽中。
Redis集群中至少应该有三个节点。要保证集群的高可用,须要每一个节点有一个备份机。
Redis集群至少须要6台服务器。因为条件限制,这里采用与淘淘商城相同的方式搭建伪分布式。在一台虚拟机运行6个redis实例。须要修改redis的端口号7001-7006。
第一步:建立6个redis实例,每一个实例运行在不一样的端口。须要修改redis.conf配置文件,将端口号修改为7001-7006。除此以外,还须要把cluster-enabled yes前的注释去掉。
第二步:启动每一个redis实例。这里咱们能够本身写一个shell脚本,这里给出个人也就是淘淘商城中所使用的脚本:
cd redis01 ./redis-server redis.conf cd .. cd redis02 ./redis-server redis.conf cd .. cd redis03 ./redis-server redis.conf cd .. cd redis04 ./redis-server redis.conf cd .. cd redis05 ./redis-server redis.conf cd .. cd redis06 ./redis-server redis.conf cd ..
关闭集群的脚本也相似:
./redis-cli -p 7001 shutdown ./redis-cli -p 7002 shutdown ./redis-cli -p 7003 shutdown ./redis-cli -p 7004 shutdown ./redis-cli -p 7005 shutdown ./redis-cli -p 7006 shutdown
记得在运行脚本前要添加可执行(x)的权限:chmod u+x fileName.sh
第三步:使用ruby脚本搭建集群。
首先咱们须要安装ruby运行环境
yum install ruby yum install rubygems
而后咱们须要安装ruby脚本运行使用的包,将这个文件放在集群文件根目录下,而后运行
gem install redis-3.0.0.gem
文件我上传在了CSDN。
这时咱们就能够启动集群环境了,运行下面这条命令:
./redis-trib.rb create --replicas 1 192.168.72.121:7001 192.168.72.121:7002 192.168.72.121:7003 192.168.72.121:7004 192.168.72.121:7005 192.168.72.121:7006
从这条命令咱们能够看出使用6个节点来建立一个集群,集群中每一个主节点有1个从节点。运行过程当中输入一个yes就成功了。须要注意的是在真正搭建的时候必定要关闭防火墙。这时候咱们查看进程
第四步:链接Redis集群
由于每个节点都是互联互通的,因此咱们不论连哪一个节点都是能够的。
redis的客户端有不少,从官网中咱们能够看出来,不只支持的语言众多,并且不少语言有不止一种链接方式。
这里咱们采用在JAVA中使用最普遍的Jedis做为实例。
@Test public void testJedis() throws Exception { // 第一步:建立一个Jedis对象。须要指定服务端的ip及端口。 Jedis jedis = new Jedis("192.168.25.153", 6379); // 第二步:使用Jedis对象操做数据库,每一个redis命令对应一个方法。 String result = jedis.get("hello"); // 第三步:打印结果。 System.out.println(result); // 第四步:关闭Jedis jedis.close(); }
使用起来很简单,不过一般在链接单机版的时候咱们采用的是链接池的方式。
@Test public void testJedisPool() throws Exception { // 第一步:建立一个JedisPool对象。须要指定服务端的ip及端口。 JedisPool jedisPool = new JedisPool("192.168.25.153", 6379); // 第二步:从JedisPool中得到Jedis对象。 Jedis jedis = jedisPool.getResource(); // 第三步:使用Jedis操做redis服务器。 jedis.set("jedis", "test"); String result = jedis.get("jedis"); System.out.println(result); // 第四步:操做完毕后关闭jedis对象,链接池回收资源。 jedis.close(); // 第五步:关闭JedisPool对象。 jedisPool.close(); }
链接集群的方式就又稍微不同了。
@Testjava public void testJedisCluster() throws Exception { // 第一步:使用JedisCluster对象。须要一个Set<HostAndPort>参数。Redis节点的列表。 Set<HostAndPort> nodes = new HashSet<>(); nodes.add(new HostAndPort("192.168.72.121", 7001)); nodes.add(new HostAndPort("192.168.72.121", 7002)); nodes.add(new HostAndPort("192.168.72.121", 7003)); nodes.add(new HostAndPort("192.168.72.121", 7004)); nodes.add(new HostAndPort("192.168.72.121", 7005)); nodes.add(new HostAndPort("192.168.72.121", 7006)); JedisCluster jedisCluster = new JedisCluster(nodes); // 第二步:直接使用JedisCluster对象操做redis。在系统中单例存在。 jedisCluster.set("hello", "100"); String result = jedisCluster.get("hello"); // 第三步:打印结果 System.out.println(result); // 第四步:系统关闭前,关闭JedisCluster对象。 jedisCluster.close(); }
本文做者: catalinaLi
本文连接: http://catalinali.top/2017/bu...版权声明: 原创文章,有问题请评论中留言。非商业转载请注明做者及出处。