nginx

本贴最后更新于 2251 天前,其中的信息可能已经事过境迁

Nginx

Nginx 负载均衡策略

两种内嵌的负载均衡策略和其他的第三方均衡策略

  1. 默认情况轮询策略
    • 可以利用 weight 设置服务器权重, 权重高的服务器处理的请求数量多.
    • 可以设置离线属性, 将服务器临时离线.
    • fail_timeout=20s, 设置服务器失败超时时间, 如果服务器超时 20 秒不响应请求, 就将服务器自动离线.
  2. ip_hash: 根据客户端的 IP 地址映射到固定的服务器.
    • 有利于保持 Session 状态
  3. URL Hash, 根据 URL 映射到估计的服务器.

利于 Nginx 转发请求到 Tomcat

利用 Nginx 反向代理功能, 将请求从 80 端口转发到 8080

配置步骤:

  1. 在 /etc/nginx/conf.d 添加配置文件 1710.conf

     # 1710.canglaoshi.org
    
     upstream tom{
         server localhost:8080;
     }
    
     server{
         listen 80;
         server_name 1710.canglaoshi.org;
         location /{
             proxy_pass http://tom;
    
             proxy_redirect     off;
             proxy_set_header   Host             $host;
             proxy_set_header   X-Real-IP        $remote_addr;
             proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
             proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
             proxy_max_temp_file_size 0;
             proxy_connect_timeout      90;
             proxy_send_timeout         90;
             proxy_read_timeout         90;
             proxy_buffer_size          4k;
             proxy_buffers              4 32k;
             proxy_busy_buffers_size    64k;
             proxy_temp_file_write_size 64k;
    
     	}
     }
    
  2. 测试

     nginx -t
    
  3. 重新加载配置文件

     nginx -s reload
    
  4. 测试:

     http://1710.canglaoshi.org
    

Nginx

  1. Nginx 就是一个 Web 服务器, 能够处理 HTTP 协议
  2. Nginx 能够抗"高并发"
  3. Nginx 和 应用服务器 Tomcat, 搭建"反向代理"集群,可以解决"高并发"问题
  4. nginx 可以配置不同的负载均衡策略.
    • 默认轮询策略
    • ip_hash 策略
  5. 配置安装
    1. yum 安装
      • 配置文件/etc/nginx/
    2. 源码编译安装
      • 配置文件/usr/local/nginx/conf

Redis

是一种高性能的内存 KV(key-value)数据库.

  1. 高性能! 高并发高性能! 每秒千万级别的响应!
  2. 其底层采用 散列表 算法实现的!
  3. 只能存储 key - value 数据, 利用 key 查询 value.
  4. Redis 就是为了提高查询性能而存在! 经常与 关系型数据库配(MySQL)合使用, 作为关系型数据库的缓存使用!
  5. Redis 支持丰富的数据类型, 有 5 种

安装部署 Redis

  1. 利用 yum 安装 redis

     yum -y install redis
     //启动Redis
     systemctl start redis.service
     //关闭Redis
     systemctl stop redis.service
     //重新启动
     systemctl restart redis.service
     //设置开机启动redis
     systemctl enable redis.service
     //检查 
     ps -A|grep redis
    
  2. 使用 Redis 客户端登录

     redis-cli
     exit 
    

编译安装:

  1. redis.io 网站下载 redis

  2. 释放然后编译安装

     make
     make install
    

    安装目录 /usr/local/redis

  3. 启动 redis 服务器

    redis 会自动利用当前文件夹缓存数据, 如果当前文件夹不能写文件, 则会出现运行错误!

     cd
     redis-server
    

    启动以后就占了当前窗口, 关闭服务器请使用 Ctrl+c

  4. 再开启一个终端窗口, 执行客户端程序

     /usr/local/redis/redis-3.0.0/src/redis-cli
    

使用 Redis

详细的 Redis 命令请参考 http://redisdoc.com/

Redis 支持 5 种数据类型, Redis 为每种类型提供了一套操作,命令.

可以使用 help @ 类型 查询每套命令

查询操作 Value 是 String 类型的全部命令:

help @string

查询操作 Value 是 Hash 类型的全部命令:

help @hash

查询操作 Value 是 List 类型的全部命令:

help @list

查询操作 Value 是 Set 类型的全部命令:

help @set

查询操作 Value 是 Sorted-Set 类型的全部命令:

help @sorted-set

String 类型操作

  1. 添加数据到数据库

     set key value
     set message 'Hello World!'
    

    可以指定 数据的过期时间, 过期会自动删除

     set message 'Hello World!' EX 20
     set message 'Hello World!' PX 20000
    
  2. 查询数据

     get key
     get message
    
  3. 追加操作: 给 Value 追加信息

     append key 追加信息
     append message  'Hello Tom'
     append error 'File not Found!' 
    

    如果 key 不存在, 则会自动创建 key, 如果存在则在 key 的 value 后面追加信息

  4. 操作整数

     set times 50
     incr times  //将value增加1
     decr times  //将value减少1
     incrby times 8 //将value增加8
     decrby times 50 //将value减少50
    
  5. 操作浮点数

     set total 45.67
     incrbyfloat total 239 //增加 239
     incrbyfloat total -23 //减少 23
    
  6. 检查字符串长度

     set message "Hello World!"
     strlen message //返回 12
    
  7. 批量添加, 批量获取

     mset key1 value1 key2 value2 key3 value3...
     mget key1 key2 key3 ...
    

Hash 类型

Value 数据类型是 Hash, 也就说 value 是一张散列表.

命令:

	hset key 属性 值
	hmset key 属性1 值1 属性2 值2 属性3 值3
	hvals key // 获取全部的value
	hkeys key // 获取全部的key
	hget key 属性 //获取一个属性值
	hmget key 属性1 属性2  //获取多个属性值

List 类型

List 类型是一种队列类型, 可以作为缓存队列使用

lpush key value //将数据从 左侧插入到List 队列
rpush key value //将数据从 右侧插入到List 队列
lpop key //将数据从 左侧弹出队列
rpop key //将数据从 右侧弹出队列

blpop key 超时时间 //将数据从左侧弹出队列, 如果没有数据则发生阻塞, 等待数据时如果等待超时则报错误
brpop key 超时时间 //将数据从右侧弹出队列, 如果没有数据则发生阻塞, 等待数据时如果等待超时则报错误

通用操作

删除 key

del key

查询全部 key

keys *

设置(重置)过期时间

EXPIRE key 秒

Jedis

Redis 推荐的访问 Redis Java API 是 Jedis

网站: https://github.com/xetorthio/jedis

使用步骤:

  1. 导入 Jedis

     <dependency>
     	<groupId>junit</groupId>
     	<artifactId>junit</artifactId>
     	<version>4.12</version>
     </dependency>
     <dependency>
     	<groupId>redis.clients</groupId>
     	<artifactId>jedis</artifactId>
     	<version>2.9.0</version>
     	<type>jar</type>
     	<scope>compile</scope>
     </dependency>
    
  2. 连接到 Redis

     @Test
     public void testJedis(){
     	Jedis jedis = 
     			new Jedis("192.168.4.117");
     	jedis.set("Message", "Hello World!");
     	String msg = jedis.get("Message");
     	System.out.println(msg);
     	long len = jedis.strlen("Message");
     	System.out.println(len); 
     }
    

    Redis 有哪些操作命令, jedis API 也提供了对应的操作方法.

Spring Data Redis

Spring 提供了更加简洁的 Redis 操作 API.

Redirecting…

使用步骤:

  1. 导入包:

     <dependency>
     	<groupId>junit</groupId>
     	<artifactId>junit</artifactId>
     	<version>4.12</version>
     </dependency>
     <dependency>
     	<groupId>redis.clients</groupId>
     	<artifactId>jedis</artifactId>
     	<version>2.9.0</version>
     	<type>jar</type>
     	<scope>compile</scope>
     </dependency>
     <dependency>
     	<groupId>org.springframework.data</groupId>
     	<artifactId>spring-data-redis</artifactId>
     	<version>2.0.6.RELEASE</version>
     </dependency>
    
  2. 配置 RedisTempalte

     <bean id="jedisConnFactory" 
         class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
     	 <!-- 连接Redis时候自动管理Redis连接池 -->
     	 <property name="usePool" value="true"/>
     	 <property name="hostName" 
     	 	value="192.168.4.117"></property>   	
     </bean>
    
     <!-- redis template definition -->
     <bean id="redisTemplate" 
         class="org.springframework.data.redis.core.RedisTemplate" >
     	<property name="connectionFactory"
     		ref="jedisConnFactory"/>
     </bean>	
    
  3. 测试:

     @Test
     public void testSpringRedis(){
     	//初始化Spring容器
     	ClassPathXmlApplicationContext ctx = 
     		new ClassPathXmlApplicationContext(
     		"spring-redis.xml");
     	RedisTemplate<String, Object> template=
     		ctx.getBean("redisTemplate",
     		RedisTemplate.class);
     	//创建一个对象list
     	List<String> list=
     			new ArrayList<String>();
     	list.add("Andy");
     	list.add("Jerry");
     	//利用RedisTemplate将对象list存储到Redis中
     	template.opsForValue().set("myList", list);
     	Object obj=template.opsForValue().get("myList");
     	System.out.println(obj); 
     }
    
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    311 引用 • 546 回帖

相关帖子

回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...