Redis的定义
开源的
使用c语言编写
Kv存储系统
Nosql数据库(非关系型数据库)
与关系型数据库的差别:
存储方式:
Nosql:kv key:{“name”,zhansan ”age”18}
关系行数据库:表结构还要主外键关联
读写数据:
Nosql:读写数据快。不提供主外键关联
关系数据库:读写速度慢
常见的nosql:
Mongodb:(文档型数据库)bson 二进制的json
Redis:(kv)
Hbase:(海量数据分布式存储系统,属于hadoop生态体系)
安装部署(linux)
- 安装步骤
1)下载一个redis安装包
2)上传到linux
3)解压redis安装包 tar -zxvf redis-2.8.19.tar.gz
4)进入redis解压包目录,编译 make
5)安装: make PREFIX=/usr/local/redis/ install
配置:
拷贝一份redis.conf文件到安装目录
启动redis:
bin/redis-server ./redis.conf
Bin/redis-cli ./redis.conf
安装图形化
第一步:
rz 上传redis.2.8.19.tar.gz
工具上传:第二种上传方式
弹出图形化上传页面
第二步:
ll 查看上传的文件
第三步:
tar -zxvf redis-2.8.19.tar.gz 解压到当前目录
第四步:进入解压目录编译 make 将.c编译成可执行.o文件
第五步:安装到指定目录 make PREFIX=/usr/local/redis install
第六步:拷贝redis.conf到指定目录 cp redis.conf /usr/local/redis/
第七步:进入安装目录/usr/local/redis/bin下有几个可执行文件
redis-benchmark —-性能测试工具
redis-check-aof —-检查修复aof文件 appendonly file 日志文件、数据持久化
redis-check-dump —-检查快照持久化文件
redis-cli —-命令行客户端
redis-server —-redis服务器启动命令
第七步:启动redis-server
2)配置redis
i.选择redis节点1为主服务器,进入/home/ redis/redis-2.8.17。使用vi redis.conf命令,修改文件中的daemonize no修改为daemonize yes,设置服务器的端口port,如使用端口8586。
ii.选择redis节点2为从服务器,进入/home/ redis/redis-2.8.17。从属服务器的设置和主服务步骤一致,另需添加主服务器地址和端口号,如图
3)配置Sentinel管理器
i.创建sentinel-idc.conf(自定义)文件。在文件中写入以下内容,红色部分根据具体的需求可以修改并保存文件
ii.各项参数说明:
port 28586 –sentinel监听端口(自定义只有没有被使用的端口都可被定义)
sentinel monitor mymaster 10.136.90.180 8586 1 —redis主服务器 master1 为主服务器名称(由于在此以10.136.90.180为主服务器,则使用180上的Redis的服务器的ip和port。主服务器的名可自定义但必须所有的名称一致,即所有红色字体中的master1必须同时修改)
sentinel failover-timeout mymaster 18000 —故障转移超时时间
sentinel down-after-milliseconds mymaster 30000 —主服务器宕机时间
sentinel parallel-syncs mymaster 1 —执行故障转移是,1个从服务器参与同步
iii.将文件放入到主服务器及从服务器的安装目录下,如下图:
iv.注意:主从服务器配置文件中的sentinel monitor mymaster 10.136.90.180 8586 1中的主服务的名称、ip、端口必须是一致。只有这样才能保证sentinel管理的主服务器是一致的并保证Redis的高可用。
4)启动redis主程序和Sentinel管理器
i.进入主服务器Redis的src目录,使用./redis-server redis.conf,启动主服务器的Redis服务。使用./redis-server sentinel-idc.conf –sentinel,启动主服务器的管理器。
ii.同样启动从服务器的redis服务器和Sentinel管理器。
iii.注意:Sentinel管理器启动后,不可使用“ctrl+C”或“ctrl+Z”退出
测试
4Redis客户端应用(jedis) &jedis分片(集群)
官网:www.redis.io
4.1Redis客户端(jedis)
1)下载jar
2)实例化jedis,操作redis缓存
Jedis conn= new Jedis("192.168.13.111", 6379);
conn.flushAll();
conn.set("stringkey1", "aaaaaaaaaa");
System.out.println(conn.get("stringkey1"));
conn.set("stringkey2", "hello");
conn.append("stringkey2", " world!");
System.out.println(conn.get("stringkey2"));
List<String> listval = listTest(conn);
for (String string : listval) {
System.out.println(string);
}
List类型:
public static List<String> listTest(Jedis conn){
conn.lpush("listkey1", "aa","bb","cc");
return conn.lrange("listkey1", 0, -1);
}
Jedis分片
什么是分片:redis可以把客户端请求分不到不同的服务器。
JedisPoolConfig poolConfig = new JedisPoolConfig();
//设置连接池最大连接数
poolConfig.setMaxIdle(500);
Hashing algo = Hashing.MURMUR_HASH;
List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>(2);
JedisShardInfo A = new JedisShardInfo("192.168.13.111", 6379);
JedisShardInfo B = new JedisShardInfo("192.168.13.111", 6380);
shards.add(A );
shards.add(B);
//Jedis的连接池配置poolConfig
// 分片信息 shards
//hash算法 algo
pool = new ShardedJedisPool(poolConfig , shards , algo );
模拟一个6380端口服务器:
1)拷贝一份redis.conf重命名为redis6380.conf cp redis.conf redis6380.conf
2)Vi编辑redis6380.conf
pidfile /var/run/redis6380.pid
port 6380
测试:
private static int index;
public static void main(String[] args) {
ShardedJedis jds = pool.getResource();
System.out.println(jds.get("5"));
// ShardedJedis jds;
// for (int i = 0; i < 100; i++) {
// jds= pool.getResource();
// String key = String.valueOf(index++);
// System.out.println(jds.set(key , "aaaaaaaaaaaaaaa"));
// System.out.println(key+":"+jds.getShard(key).getClient().getPort());
// }
}
Jedis客户端无法连接redis服务器
检查redis服务端ip地址和端口号是否正确;
检查redis服务端是否设置客户端访问密码:jedis.auth(“123456”);
检查inux防火墙是否关闭
Linux关闭防火墙命令步骤:
永久性生效,重启后不会复原
开启:chkconfig iptables on
关闭:chkconfig iptables off
即时生效,重启后复原
开启:service iptables start
关闭:service iptables stop
Redis运维
- 持久化
RDB:是使用快照的方式来把一段时间的数据做持久化 dump.rdb
优势:持久化的文件较小。
劣势:因为存储的是一段时间的数据,所以会导致这一时间段的数据丢失
AOF:是以记录日志的方式
优势:每修改同步,每秒钟同步一次,不同步
劣势:文件较大
具体配置
appendonly yes
2.列表内容
主从复制
在REPLICATION下面有一个slaveof
3.常用运维命令以及注意事项
运维命令
DBSIZE Key的数量
FLUSHALL 清空当前服务器管理的数据库中的所有Keys
FLUSHDB 清空当前数据库中的所有Keys
SAVE RDB持久化模式
SHUTDOWN停止server端
SLAVEOF host port手动配置当前为从服务器
monitor 打开控制台
client kill 关闭某个客户端
sync 手动同步
Bgrewriteaof 后台写aof
Bgsave 后台写rdb
shutdown save|nosave 关闭服务器—保存/不保存
info 显示服务器信息
注意事项
如果不小心flushall了,应该首先关闭redis服务进程shutdown nosave
然后编辑aof然后在aof日志文件里面的flashall三行标识符删除掉
重启