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

相关推荐
西岸行者1 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意1 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码1 天前
嵌入式学习路线
学习
毛小茛1 天前
计算机系统概论——校验码
学习
babe小鑫1 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms1 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下1 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。1 天前
2026.2.25监控学习
学习
im_AMBER1 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J1 天前
从“Hello World“ 开始 C++
c语言·c++·学习