Nginx
Nginx 负载均衡策略
两种内嵌的负载均衡策略和其他的第三方均衡策略
- 默认情况轮询策略
- 可以利用 weight 设置服务器权重, 权重高的服务器处理的请求数量多.
- 可以设置离线属性, 将服务器临时离线.
- fail_timeout=20s, 设置服务器失败超时时间, 如果服务器超时 20 秒不响应请求, 就将服务器自动离线.
- ip_hash: 根据客户端的 IP 地址映射到固定的服务器.
- 有利于保持 Session 状态
- URL Hash, 根据 URL 映射到估计的服务器.
利于 Nginx 转发请求到 Tomcat
利用 Nginx 反向代理功能, 将请求从 80 端口转发到 8080
配置步骤:
-
在 /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; } }
-
测试
nginx -t
-
重新加载配置文件
nginx -s reload
-
测试:
http://1710.canglaoshi.org
Nginx
- Nginx 就是一个 Web 服务器, 能够处理 HTTP 协议
- Nginx 能够抗"高并发"
- Nginx 和 应用服务器 Tomcat, 搭建"反向代理"集群,可以解决"高并发"问题
- nginx 可以配置不同的负载均衡策略.
- 默认轮询策略
- ip_hash 策略
- 配置安装
- yum 安装
- 配置文件/etc/nginx/
- 源码编译安装
- 配置文件/usr/local/nginx/conf
- yum 安装
Redis
是一种高性能的内存 KV(key-value)数据库.
- 高性能! 高并发高性能! 每秒千万级别的响应!
- 其底层采用 散列表 算法实现的!
- 只能存储 key - value 数据, 利用 key 查询 value.
- Redis 就是为了提高查询性能而存在! 经常与 关系型数据库配(MySQL)合使用, 作为关系型数据库的缓存使用!
- Redis 支持丰富的数据类型, 有 5 种
安装部署 Redis
-
利用 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
-
使用 Redis 客户端登录
redis-cli exit
编译安装:
-
redis.io 网站下载 redis
-
释放然后编译安装
make make install
安装目录 /usr/local/redis
-
启动 redis 服务器
redis 会自动利用当前文件夹缓存数据, 如果当前文件夹不能写文件, 则会出现运行错误!
cd redis-server
启动以后就占了当前窗口, 关闭服务器请使用 Ctrl+c
-
再开启一个终端窗口, 执行客户端程序
/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 类型操作
-
添加数据到数据库
set key value set message 'Hello World!'
可以指定 数据的过期时间, 过期会自动删除
set message 'Hello World!' EX 20 set message 'Hello World!' PX 20000
-
查询数据
get key get message
-
追加操作: 给 Value 追加信息
append key 追加信息 append message 'Hello Tom' append error 'File not Found!'
如果 key 不存在, 则会自动创建 key, 如果存在则在 key 的 value 后面追加信息
-
操作整数
set times 50 incr times //将value增加1 decr times //将value减少1 incrby times 8 //将value增加8 decrby times 50 //将value减少50
-
操作浮点数
set total 45.67 incrbyfloat total 239 //增加 239 incrbyfloat total -23 //减少 23
-
检查字符串长度
set message "Hello World!" strlen message //返回 12
-
批量添加, 批量获取
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
使用步骤:
-
导入 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>
-
连接到 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.
使用步骤:
-
导入包:
<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>
-
配置 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>
-
测试:
@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); }
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于