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

相关推荐
我是小哪吒2.044 分钟前
书籍推荐-《对抗机器学习:攻击面、防御机制与人工智能中的学习理论》
人工智能·深度学习·学习·机器学习·ai·语言模型·大模型
✎ ﹏梦醒͜ღ҉繁华落℘1 小时前
WPF学习(四)
学习·wpf
✎ ﹏梦醒͜ღ҉繁华落℘2 小时前
WPF学习(动画)
学习·wpf
循环过三天2 小时前
3-1 PID算法改进(积分部分)
笔记·stm32·单片机·学习·算法·pid
生如夏花℡3 小时前
HarmonyOS学习记录3
学习·ubuntu·harmonyos
之歆3 小时前
Python-封装和解构-set及操作-字典及操作-解析式生成器-内建函数迭代器-学习笔记
笔记·python·学习
幽络源小助理3 小时前
SpringBoot基于JavaWeb的城乡居民基本医疗信息管理系统
java·spring boot·学习
虾球xz4 小时前
CppCon 2018 学习:EFFECTIVE REPLACEMENT OF DYNAMIC POLYMORPHISM WITH std::variant
开发语言·c++·学习
Chef_Chen4 小时前
从0开始学习R语言--Day38--辛普森多样性指数
学习
Allen_LVyingbo4 小时前
Python常用医疗AI库以及案例解析(2025年版、上)
开发语言·人工智能·python·学习·健康医疗