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

相关推荐
梦云澜3 小时前
论文阅读(五):乳腺癌中的高斯图模型和扩展网络推理
论文阅读·人工智能·深度学习·学习
王磊鑫4 小时前
计算机组成原理(2)王道学习笔记
笔记·学习
汉克老师4 小时前
GESP2024年3月认证C++六级( 第三部分编程题(1)游戏)
c++·学习·算法·游戏·动态规划·gesp6级
东京老树根5 小时前
Excel 技巧21 - Excel中整理美化数据实例,Ctrl+T 超级表格(★★★)
笔记·学习·excel
CPU NULL7 小时前
新版IDEA创建数据库表
java·数据库·spring boot·sql·学习·mysql·intellij-idea
jacob~7 小时前
c++学习第十二天
学习
_Eden_7 小时前
Ansible入门学习之Playbook快速入门
学习·ansible
_Eden_7 小时前
Ansible介绍与入门学习
运维·学习·ansible
STONE_KKK7 小时前
半小时速通flume-flume正文学习
学习·性能优化·flume
半夏知半秋8 小时前
rust学习-所有权
开发语言·后端·学习·rust