45.大数据之旅——java分布式项目06

本文介绍了Redis的基本概念,包括其作为内存数据库的优势和持久化特性。Redis由Salvatore Sanfilippo开发,已被众多知名公司采用。内容涵盖了Redis的安装、基础指令、数据类型、Jedis API的使用以及Shard数据分片的实现。
摘要由CSDN通过智能技术生成

Redis介绍


Redis 介绍
Redis是REmote DIctionary Server(远程字典服务器)的缩写,它以字典结构(key-value键值对结构)存储数据,并允许其他应用通过TCP协议读写字典中的内容。所以,redis是一个key-value存储系统,或者说是一个key-value数据库。

Redis是用C语言开发的,并提供了几十种不同编程语言的客户端库,即我们用java语言也可以操作redis。

这种字典形式的存储结构与常见的MySQL 等关系数据库的二维表形式的存储结构有很大的差异。
关系型数据库存储的数据都是结构化数据

Redis字典结构(k-v)的存储方式使得开发者可以将程序中的数据直接映射到Redis中,数据在Redis中的存储形式和其在程序中的存储方式非常相近。

使用Redis的另一个优势是其对不同的数据类型提供了非常方便的操作方式,如使用集合类型存储文章标签,Redis可以对标签进行如交集、并集这样的集合运算操作。

Redis存储数据的介质是内存,所以可以提供高效的读取。

所以,redis数据库,我们也称之为非关系型数据库(Nosql)。而mysql,oracle等数据库称之为关系型数据库。这两种类型的数据库,没有优劣之分,看具体的应用场景。

Redis的内存存储和持久化
Redis数据库中的所有数据都存储在内存中。由于内存的读写速度远快于硬盘,因此Redis在性能上对比其他基于硬盘存储的数据库有非常明显的优势,在一台普通的笔记本电脑上,Redis可以在一秒内读写超过十万个键值。

将数据存储在内存中也有问题,例如,程序退出后内存中的数据会丢失。不过 Redis提供了对持久化的支持,即将可以内存中的数据异步写入到硬盘中,同时不影响继续提供服务。

Redis 技术起源
2008年,意大利的一家创业公司Merzia 推出了一款基于MySQL的网站实时统计系统LLOOGG ,然而没过多久该公司的创始人Salvatore Sanfilippo便开始对MySQL的性能感到失望,于是他决定亲自为LLOOGG量身定做一个数据库,并于2009年开发完成,这个数据库就是Redis。

不过Salvatore Sanfilippo并不满足只将Redis用于LLOOGG这一款产品,而是希望让更多的人使用它,于是在同一年Salvatore Sanfilippo将Redis开源发布,并开始和Redis的另一名主要的代码贡献者Pieter Noordhuis一起继续着Redis的开发,直到今天。

Salvatore Sanfilippo自己也没有想到,短短的几年时间,Redis就拥有了庞大的用户群体。Hacker News在2012年发布了一份数据库的使用情况调查 ,结果显示有近12%的公司在使用Redis。国内如新浪微博、知乎,国外如GitHub、Stack Overflow、Flickr、暴雪和Instagram,都是Redis的用户。

VMware公司从2010年开始赞助Redis的开发,Salvatore Sanfilippo和Pieter Noordhuis也分别于同年的3月和5月加入VMware,全职开发Redis。

Redis 网址
官网:http://redis.io/
指令学习地址:https://redis.io/commands (Redis 有100多个指令,但常用的就10多个)
在这里插入图片描述

Redis 安装


在这里插入图片描述

Redis基础指令


在这里插入图片描述

Redis数据类型及指令


在这里插入图片描述

Redis-单机的多服务实例启动


在这里插入图片描述

Jedis API


在这里插入图片描述
实现步骤:
1.下载Jedis依赖jar包
2.在maven工程里,建立测试类
3.调用Jedis的API
代码:

@Test
public void testConnect(){
Jedis jedis=new Jedis("192.168.234.206",6379);
jedis.set("test01","helloredis");
jedis.close();
 
}
 
@Test
public void testGeneralAPI(){
Jedis jedis=new Jedis("192.168.234.206",6379);
Set<String> set=jedis.keys("*");
for(String key:set){
System.out.println(key);
}
jedis.del("name");
jedis.get("name");
jedis.append("name","123214");
jedis.incr("name");
jedis.incrBy("name", 2);
//只要把redis的指令掌握好,API不用学。因为方法名和指令名及指令作用都是一样的
jedis.close();
 
}
 

Shard数据分片


利用Jedis实现Shard分片
代码:

/*
 * jedis shard数据分片,利用池化的思想,管理多个redis服务实例,并对k-v数据进行存储和管理
 * 程序员只需要通过API进行key-value做CRUD即可。
 * shard数据分片用的是哈希一致性算法,一致性哈希算法有个一特性——平衡性,指的是让最后的哈希结果尽可能均匀分布到各个桶里。
 * 这弥补了简单hash算法可能带来的数据倾斜问题。
 */
@Test
public void testShard(){
JedisPoolConfig config=new JedisPoolConfig();
List<JedisShardInfo>  serverList=new ArrayList<>();
serverList.add(new JedisShardInfo("192.168.234.206",6379));
serverList.add(new JedisShardInfo("192.168.234.206",6380));
 
ShardedJedisPool pool=new ShardedJedisPool(config, serverList);
 
ShardedJedis  jedis=pool.getResource();
 
for(int i=0;i<1000;i++){
jedis.set(i+"",i+"");
}
//用完后将jedis 连接还到池子
pool.returnResource(jedis);
 
 
}

上一篇 44.大数据之旅——java分布式项目05

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值