IDEA使用redis
图形化界面:Java使用redis。你只需要导入jedis的jar包,启动redis数据库就可以使用代码连接redis了。
Jedis jedis=new Jedis("127.0.0.1",6379);
jedis.set("java","hello redis");
System.out.println(jedis.mget("java"));//mget函数可以取多个key
Jedis jedis=new Jedis("127.0.0.1",6379);
Map<String,String> map=new HashMap<>();
map.put("hello","redis");
map.put("world","redisworld");
jedis.hmset("coder",map);
System.out.println(jedis.hget("coder","hello"));
redis 发布订阅
redis也可以实现简单发布订阅的问题
首先可以在多台客户端使用subscribe + channel,在一台上publish +channel+message。下面用Java实现一下。
第一个项目
Main.java
Jedis jedis=new Jedis("127.0.0.1",6379);
jedis.subscribe(new RedisSubscribe(),"channelname");
//你需要在RedisSubscribe类中重新拓展JedisPubSub类
RedisSubscribe.java
public class RedisSubscribe extends JedisPubSub{
@Override
public void onMessage(String channel,String message){
System.out.println(channel+" "+message);
}
}
......//还有几个方法要重写,因为没用到就不写了
另建一个项目
Jedis jedis=new Jedis("127.0.0.1",6379);
jedis.publish("channelname","hello");
redis事务
这里就简单讲一下使用,通过multi启动一个事务,然后下面的语句命令都会被放入到一个队列中,如果语句没有语法错误,最后以exec结束依次执行事务中的语句,但是会出现一个问题,如果事务中的语句语法没错但是是与之前有错误冲突比如类型不同但是用了同一个keyName,事务之前的语句不会回滚,所有redis的事务比较鸡肋。
multi
set string string
get string
exec
multi
get a aa
sef a aa
multi
set c ccc
sadd c ccc
exec
redis持久化
redis可以在redis-windows.conf文件中设置持久化策略,我讲一下基本的策略。
快照:
redis默认配置,save 900 1 save 300 10 save 60 10000一刀切全部保存的磁盘一般不用
append only file
使用appenfsync everysecond 每个操作要求持久化,严禁使用
redis是一个内存数据库,内存有大小
maxmemory----设置最大值
使用LRU最近使用算法,很长时间不用的进行淘汰,删除
maxmemory-policy noeviction------虽然有长时间不用但redis认为可能有用不会删
maxmemory-policy volatile-lru 按照lru算法删除
Cluster分区实现原理
槽概念(slot) Cluster有一个16384长度的槽的概念,他们的编号从0、1、。。。。16383。只有master节点才能拥有槽的使用权,如果只是master的slave,他只负责槽的使用,具体哪个master控制哪个槽通过master的为序列结构解决。
位序列结构:一个master节点护一个16384/8字节的位序列。
槽实现也是体现了一致性哈希,如果有一个区宕机,不会影响他的位置。