Java学习Day45:兰喜村(Redis)

1.redis概念

1.是什么

redis(c语言开发的高并发键值对数据库)是nosql的一种,是键值存储数据库;

其核心概念是三高:高并发,高可用性和高扩展性;

优点:快速存取高并发

缺点:存储的数据缺少结构化

2.数据种类

字符串类型:String型,使用

set、get key value来存取

append key value 将value追加到原key对应的value后

setnx <key><value>只有在 key 不存在时 设置 key 的值**

哈希散列类型:Map<String,Map<String,String>>

hset myhset username viki

hset myhset password 123

list列表型:左压,左右弹;

集合类型set:

有序集合sortset:

2.redis常用指令:

1.在某个数据库内 keys *

2.del key1,key2

3.exists key

4.type key

3.jedis

Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如java、C、C#、C++、php、Node.js、Go等。 在官方网站里列一些Java的客户端,有Jedis、Redisson、Jredis、JDBC-Redis、等其中官方推荐使用Jedis和Redisson。 在企业中用的最多的就是Jedis,Jedis同样也是托管在github上,地址:GitHub - redis/jedis: Redis Java client

依赖:

<dependency>

<groupId>redis.clients</groupId>

<artifactId>jedis</artifactId>

<version>2.9.0</version>

</dependency>

jedis连接池使用步骤:

jedis连接资源的创建与销毁是很消耗程序性能,所以jedis为我们提供了jedis的池化技术,jedisPool在创建时初始化一些连接资源存储到连接池中,使用jedis连接资源时不需要创建,而是从连接池中获取一个资源进行redis的操作,使用完毕后,不需要销毁该jedis连接资源,而是将该资源归还给连接池,供其他请求使用。

1.修改配置redis.conf

java 复制代码
#bind 127.0.0.1 -::1
要注释掉
protected-mode no
原来是yes,修改为no

关闭防火墙

2.配置jedis.utils工具类

JedisUtils.java

java 复制代码
import java.util.ResourceBundle;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class JedisUtils {
	
	private static JedisPoolConfig poolConfig = null;
	private static JedisPool jedisPool = null;
	private static Integer maxTotal = null;
	private static Integer maxIdle = null;
	private static String host = null;
	private static Integer port = null;
	
	static{
		
		//读取配置文件 获得参数值
		ResourceBundle rb = ResourceBundle.getBundle("jedis");
		maxTotal = Integer.parseInt(rb.getString("jedis.maxTotal"));
		maxIdle = Integer.parseInt(rb.getString("jedis.maxIdle"));
		port = Integer.parseInt(rb.getString("jedis.port"));
		host = rb.getString("jedis.host");
		
		poolConfig = new JedisPoolConfig();
		poolConfig.setMaxTotal(maxTotal);
		poolConfig.setMaxIdle(maxIdle);
		jedisPool = new JedisPool(poolConfig,host,port);
	}

	public static Jedis getJedis(){
		Jedis jedis = jedisPool.getResource();
		return jedis;
	}
	
}

jedis.properties

java 复制代码
jedis.host=localhost
jedis.port=6379
jedis.maxTotal=30
jedis.maxIdle=10

4.redis集群

1.准备工作

在/redis/src下创建一个集群包group,在其中创建三个不同的端口的实例

7001,7002,7003,然后在其文件夹下均配置redis.conf配置文件,

6379->7001

6379->7002

6379->7003

修改端口号与自己对应

并在redis配置文件中加上replica-announce-ip 192.168.XX.XX指定与实例绑定的ip信息

2.启动

为了方便查看日志,我们打开3个ssh窗口,分别启动3个redis实例,启动命令:

第1个

redis-server 7001/redis.conf

第2个

redis-server 7002/redis.conf

第3个

redis-server 7003/redis.conf

配置主从,分别用 . / redis - cli -p 700X 连接slave,使用 slaveof 192.168.XX.XX 7001

将其设置为7001master的slave

3.查看

在7001中使用

连接 7001

redis-cli -p 7001

查看状态

info replication

4.哨兵

哨兵用来监控master,可以使用多个哨兵,一般为单数13579,当原master出错后,哨兵会投票,将票数最多的slave票选为新的master;

过程:

1.在group下创建三个文件夹s1,s2,s3

2.每个目录下创建按一个目录创建一个sentinel.conf文件,添加下面的内容:

java 复制代码
port 27001
sentinel announce-ip 192.168.XX.XX
sentinel monitor mymaster 192.168.XX.XX 7001 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
dir "/tmp/s1"

解读:

  • port 27001:是当前sentinel实例的端口

  • sentinel monitor mymaster 192.168.XX.XX 7001 2:指定主节点信息

    • mymaster:主节点名称,自定义,任意写

    • 192.168.150.XX XX:主节点的ip和端口

    • 2:选举master时的quorum值

然后将s1/sentinel.conf文件拷贝到s2、s3两个目录中(在/tmp目录执行下列命令):

复制代码
cp s1/sentinel.conf s2
cp s1/sentinel.conf s3

修改s2、s3两个文件夹内的配置文件,将端口分别修改为27002、27003

3.启动:

打开三个redis实例

java 复制代码
# 第1个
redis-sentinel s1/sentinel.conf
# 第2个
redis-sentinel s2/sentinel.conf
# 第3个
redis-sentinel s3/sentinel.conf

将其中监听的master被shutdown后,会由哨兵票选出新的master,原master启动后自动成为slave

相关推荐
代码AC不AC1 小时前
【C++】异常
c++·学习·异常
Cristiano777.1 小时前
周学习记录
学习
py有趣3 小时前
LeetCode算法学习之鸡蛋掉落
学习·算法·leetcode
小马爱打代码4 小时前
RabbitMQ:系统学习笔记
笔记·学习·rabbitmq
YJlio4 小时前
进程和诊断工具速查手册(8.13):VMMap / DebugView / LiveKd / Handle / ListDLLs 一页式现场排障清单
数据库·笔记·学习
青衫码上行5 小时前
【Java Web学习 | 第12篇】JavaScript(6)DOM
java·开发语言·前端·javascript·学习
YangYang9YangYan5 小时前
中专生学历提升与职业发展指南
大数据·人工智能·学习·数据分析
深蓝海拓6 小时前
YOLO v11的学习记录(五) 使用自定义数据从头训练一个实例分割的模型
学习·yolo
Gary Studio6 小时前
鋰電池充電芯片學習
学习
菜鸟‍6 小时前
【前端学习】React学习【万字总结】
前端·学习·react.js