1:Jedis与Redisson对比
2.1. 概况对比
Jedis是Redis的Java实现的客户端,其API提供了比较全面的Redis命令的支持;Redisson实现了分布式和可扩展的Java数据结构,和Jedis相比,功能较为简单。
Redisson的宗旨是促进使用者对Redis的关注分离,从而让使用者能够将精力更集中地放在处理业务逻辑上。可以认为是jedis的补充,不能替换jedis。
2.2.可伸缩性
Jedis中的方法调用是比较底层的暴露的Redis的API,也即Jedis中的Java方法基本和Redis的API保持着一致,了解Redis的API,也就能熟练的使用Jedis。
而Redisson中的方法则是进行比较高的抽象,每个方法调用可能进行了一个或多个Redis方法调用。
2.3. 编程模型
Jedis使用阻塞的I/O,且其方法调用都是同步的,程序流需要等到sockets处理完I/O才能执行,不支持异步。Jedis客户端实例不是线程安全的,所以需要通过连接池来使用Jedis。
Redisson使用非阻塞的I/O和基于Netty框架的事件驱动的通信层,其方法调用是异步的。Redisson的API是线程安全的,所以可以操作单个Redisson连接来完成各种操作。
2.4. 数据结构
Jedis仅支持基本的数据类型如:String、Hash、List、Set、Sorted Set。
Redisson不仅提供了一系列的分布式Java常用对象,不支持字符串存储,Redisson的实现类中只支持集合操作,不能对普通字符做操作。
不支持很多redis特性,比如排序,事务,管道,集群等
还提供了许多分布式服务,其中包括(BitSet, Set, Multimap, SortedSet, Map, List, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, AtomicLong, CountDownLatch)。
并且是线程安全的,在分布式开发中,Redisson可提供更便捷的方法。
2:代码实例
jedis单机使用方式
public static void main(String[] args) {
// 开启Jedis连接池
JedisPoolConfig jpc = new JedisPoolConfig();
jpc.setMaxTotal(50);
jpc.setMinIdle(10);
JedisPool jp = new JedisPool(jpc,"192.168.1.18",19000);
// 开启Jedis客户端
Jedis jedis = jp.getResource();
jedis.set("k1","v1");
System.out.println(jedis.get("k1"));
jedis.close();
}
jedis集群使用方式
public class JedisClusterTest {
public static void main(String[] args) throws IOException {
Set<HostAndPort> nodes = new HashSet<>();
HostAndPort hap = new HostAndPort("192.168.1.18",6379);
nodes.add(hap);
JedisCluster jedisCluster =
new JedisCluster(
nodes, 1000,
1000, 1,
new GenericObjectPoolConfig());
jedisCluster.set("k1","v1");
jedisCluster.get("k1");
jedisCluster.close();
}
}
Redisson使用方式
public class RedissonTest {
public static void main(String[] args) {
Config config = new Config();
config.setCodec(new org.redisson.client.codec.StringCodec());
config. useSingleServer().setAddress("192.168.1.18:19000");
RedissonClient redisson = Redisson.create(config);
RBucket<String> keyObject = redisson.getBucket("k2");
keyObject.set("v2");
System.out.println(keyObject.get());
redisson.shutdown();
}
}
3:codis能做什么
Codis介绍
Codis开发是专门解决分布式方案才诞生的
Codis是豌豆荚开发的分布式redis解决方案
线上动态配置实现无限扩容,插槽分配和漂移
单节点和集群操作对客户端透明
线上可以在一定程序上达到一个资源漂移的效果
codis的强大之处服务端透明化,不需要关心多少集群,只需要关心第三方的proxy。
Codis的组成部分
命令命令作用
Codis Dashboard
Codis集群管理工具
Codis Proxy
集群代理,代理多个Codis
Codis Server
代替了窗台的redis-Server
Codis Group
组的概念,可以让集群出现更多的用法
Codis Admin
集群管理的命令行工具
Codis FE
图形界面处理
1.环境的准备
yum install -y gcc glibc gcc-c++ make git
git clone https://github.com/CodisLabs/codis.git -b release3.2(去GIT上下载)
yum -y install glibc-2.17
wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
2.需要的包
3.开始部署
安装go语言环境
1.常规操作
tar -xf go1.7.3.linux-amd64.tar.gz
cd go
2.添加环境变量
vim /etc/profile
export GOROOT=/root/codis/go
export GOPATH=/root/codis/go_path/codis
export PATH=PATH:JAVA_HOME/bin:$GOROOT/bin
source /etc/profile
tar -xf codis3.2.2-go1.8.5-linux.tar.gz
cd codis3.2.2-go1.8.5-linux
mkdir conf/redis/{redis_6381,reids_6382}
拷贝redis的配置文件到以上目录下
cp redis.cnf conf/redis/redis_6381/
codis-server redis.cnf
开启两个服务
netstat -lnput |grep codis