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