Redis的介绍和使用(NoSQL、Jedis)
Redis
本次介绍以下几个内容:
- NoSQL介绍
- Redis介绍
- Jedis的API
- 使用工具类来连接Redis
NoSQL介绍
NoSQL概念
Not Only SQL:不仅仅是SQL,指的就是非关系型数据库,它是关系型数据库有益的补充。最终的数据还是保存在关系型数据库中。非关系型数据库主要是提升数据库的查询速度,一般做为数据的缓存来使用。
优点
- 格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
- 速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘;
- 成本低:nosql数据库部署简单,基本都是开源软件。
缺点
- 不提供sql支持,学习和使用成本较高;
- 数据结构相对复杂,复杂查询方面不方便。
为什么要使用NOSQL
具体表现为对如下三高问题的解决:
High Performance - 数据库高并发访问
在同一个时间点,同时有海量的用户并发访问。往往要达到每秒上万次读写请求。关系数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求,硬盘IO就已经无法承受了。
- 如天猫的双11,从凌晨0点到2点这段时间,每秒达到上千万次的访问量。
- 12306春运期间,过年回家买火车抢票的时间,用户不断查询有没有剩余票。
Huge Storage - 海量数据的存储
数据库中数据量特别大,数据库表中每天产生海量的数据。
类似QQ,微信,微博,每天用户产生海量的用户动态,每天产生几千万条记录。对于关系数据库来说,在一张几亿条记录的表里面进行SQL查询,效率是极其低下乃至不可忍受的。
High Scalability && High Availability- 高可扩展性和高可用性的需求
关系型数据库进行扩展和升级是比较麻烦的一样事,对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移。
非关系型数据库可以通过不断的添加服务器节点来实现扩展,而不需对原有的数据库进行维护。
Redis介绍
Redis就是现在比较主流的非关系数据库。
Windows版Redis的下载
官网提供了Linux版的Redis下载
http://redis.io/download
Windows版的Redis,下载地址如下:
https://github.com/MSOpenTech/redis/tags
Redis的5种数据类型
redis是一种高级的key-value的存储系统,其中value支持五种数据类型,指的是它值的类型,键可以认为是字符串类型。redis不是用Java写的,是C语言写的。
值的数据类型 | 说明 |
---|---|
string类型 | 字符串 |
list类型 | 列表:元素可以重复,元素是有索引号,有先后顺序的 |
set类型 | 集合:元素是不可重复的,元素没有索引号,没有先后顺序的 |
hash类型 | 值由多个键值对组成 |
zset类型 | 集合:元素不可重复的,每个元素有索引号,还有一个分数值,可以根据分数进行排序 |
在Redis中以二进制保存,没有编码和解码的过程。
无论存入的是字符串、整数、浮点类型都会以字符串写入。
在Redis中字符串类型的值最多可以容纳的数据长度是512M,这是以后最常用的数据类型。
常用命令
命令 | 功能 |
---|---|
set 键 值 | 存入字符串类型的键和值,如果键不存在就是添加,存在就是修改 |
setnx 键 值 | 键不存在就是添加,存在不做任何操作,不会覆盖以前的键和值 |
get 键 | 通过键获取值 |
del 键 | 通过键删除键和值 |
list类型的操作命令
概述
在Redis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其左部(left)和右部(right)添加新的元素。
在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。
如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。
List中可以包含的最大元素数量是4G个(41亿个)
常用命令
命令 | 行为 |
---|---|
lpush 键 元素 元素 | 从左边添加1个或多个元素 |
rpush 键 元素 元素 | 从右边添加1个或多个元素 |
lpop 键 | 删除最左边的一个元素,并且返回 |
rpop 键 | 删除最右边的一个元素,并且返回 |
lrange 键 开始 结束 |
查找指定索引范围内元素返回,每个元素有2个索引号 索引号从左向右:0~length-1 索引号从右向左:-1~-length 如果要获取整个列表中所有的元素,索引号范围如何写?0~-1 |
llen 键 | 获取列表中有多少个元素 |
一个Redis服务器可以包括多个数据库,客户端可以只连接Redis中某个数据库,就好比一个mysql服务器中创建多个数据库,客户端连接时指定连接到哪个数据库。
Redis中有db0-db15编号的16个数据库。我们不能创建新的数据库,也不能删除数据库。数据库中也没有表的结构,客户端默认连接第0个数据库。但可以通过配置文件设定有多少个数据库。
Jedis的API介绍
Jedis的介绍
Redis不仅可以使用命令来操作,现在基本上主流的语言都有API支持,比如Java、C#、C++、PHP、Node.js、Go等。
在官方网站里列一些Java的客户端,有Jedis、Redisson、Jredis、JDBC-Redis等其中官方推荐使用Jedis和Redisson。
Jedis操作redis需要导入jar包或者Jedis的依赖。
Jedis类常用方法
- 每个方法就是redis中的命令名,方法的参数就是命令的参数。
- 每个Jedis对象似于JDBC中Connection对象,获取一个Jedis对象本质上就是获取一个连接对象。
连接和关闭 | 功能 |
---|---|
new Jedis(String host, int port) |
创建一个连接对象 参数1:主机名 参数2:端口号 6379 |
void close() | 关闭连接 |
对string操作的方法 | 说明 |
---|---|
set(String key,String value) | 添加字符串类型的键和值 |
String get(String key) | 通过键获取值 |
del(String … keys) | 删除一个或多个键和值 |
对list操作的方法 | 说明 |
---|---|
lpush(String key,String…values) | 从左边添加1个或多个元素 |
List<String> lrange(String key,long start,long end) | 获取一个范围内所有的元素 |
Jedis的基本操作
package com.ys;import redis.clients.jedis.Jedis;/*** Jedis的基本使用*/
public class Demo1Base {public static void main(String[] args) {//1.创建Jedis连接对象Jedis jedis = new Jedis("localhost", 6379);//2.向服务器添加1个字符串类型的键和值jedis.set("book","张三");//3.从服务器中通过键获取值String book = jedis.get("book");//4.关闭连接jedis.close();//5.打印输出到控制台System.out.println(book);}}
Jedis连接池的使用
jedis连接池的基本概念
jedis连接资源的创建与销毁是很消耗程序性能,所以jedis为我们提供了jedis的连接池
技术,jedis连接池在创建时初始化一些连接对象存储到连接池中,使用jedis连接资源时
不需要自己创建jedis对象,而是从连接池中获取一个资源进行redis的操作。使用完毕
后,不需要销毁该jedis连接资源,而是将该资源归还给连接池,供其他请求使用。
Jedis连接池API
用于创建连接池的配置信息
JedisPoolConfig配置类 | 功能说明 |
---|---|
JedisPoolConfig() | 构造方法,创建一个配置对象 |
void setMaxTotal() | 连接池中最大连接数 |
void setMaxWaitMillis() | 设置最长等待时间,单位是毫秒 |
JedisPool连接池类 | 说明 |
---|---|
JedisPool(配置对象,服务器名,端口号) |
构造方法,创建连接池的类 参数1:上面的配置对象 参数2:服务器名 参数3:端口号 |
Jedis getResource() | 从连接池中获取一个创建好的连接对象,返回Jedis对象 |
JedisPool的基本使用
package com.ys;import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;import java.util.List;/*** Jedis连接池的基本使用*/
public class Demo2Pool {public static void main(String[] args) {//1.创建连接池的配置对象JedisPoolConfig config = new JedisPoolConfig();//2.设置连接池的参数config.setMaxTotal(10); //最大连接数config.setMaxWaitMillis(2000); //最长等待时间为2秒钟//3.创建连接池,使用上面配置对象JedisPool pool = new JedisPool(config,"localhost", 6379);//4.从连接池中获取连接对象Jedis jedis = pool.getResource();//5.使用连接对象jedis.lpush("students", "张三", "李四", "王五");List<String> students = jedis.lrange("students", 0, -1);System.out.println(students);//6.关闭连接对象jedis.close();}}
ResourceBundle类的使用
使用ResourceBundle类得到jedis.properties中的port属性,并且输出
jedis.properties:
# 连接池的最大连接数
maxTotal=10
# 最长等待时间为2秒钟
maxWaitMillis=2000
# 服务器名字
host=localhost
# 端口号
port=6379
使用ResourceBundle类:
package com.ys;import java.util.ResourceBundle;public class Demo3Resource {public static void main(String[] args) {//1. 通过静态方法读取属性文件,参数是:属性文件的主文件名,没有扩展名ResourceBundle bundle = ResourceBundle.getBundle("jedis");//2. 获取属性值,通过键获取值String host = bundle.getString("host");//3.输出值System.out.println(host);}
}
使用工具类来连接Redis
jedis.properties配置文件:
# 主机名
host=localhost
# 端口号
port=6379
# 最大连接数
maxTotal=20
# 最长等待时间
maxWaitMillis=3000
JedisUtils.java:
package com.ys.utils;import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;import java.util.ResourceBundle;/*** Jedis连接池工具类*/
public class JedisUtils {private static JedisPool pool;//在静态代码块中创建连接池static {//读取配置文件ResourceBundle bundle = ResourceBundle.getBundle("jedis");//读取属性值int maxTotal = Integer.parseInt(bundle.getString("maxTotal"));int maxWaitMillis = Integer.parseInt(bundle.getString("maxWaitMillis"));int port = Integer.parseInt(bundle.getString("port"));String host = bundle.getString("host");//创建连接池配置对象JedisPoolConfig config = new JedisPoolConfig();//设置连接池的参数config.setMaxTotal(maxTotal);config.setMaxWaitMillis(maxWaitMillis);//创建连接池pool = new JedisPool(config, host, port);}/*** 获取连接对象*/public static Jedis getJedis() {return pool.getResource();}}
使用工具类:
package com.ys;import com.ys.utils.JedisUtils;
import redis.clients.jedis.Jedis;//使用连接池工具类
public class JedisUse {public static void main(String[] args) {//从连接池中获取连接对象Jedis jedis = JedisUtils.getJedis();//添加键和值jedis.set("car", "benchi");//取出String car = jedis.get("car");//输出System.out.println(car);//关闭连接jedis.close();}
}
以上就是本次分享的全部内容了,如果有不恰当的地方,欢迎指正。
Redis的介绍和使用(NoSQL、Jedis)相关推荐
- Redis 学习笔记-NoSQL数据库 常用五大数据类型 Redis配置文件介绍 Redis的发布和订阅 Redis_事务_锁机制_秒杀 Redis应用问题解决 分布式锁
1.NoSQL数据库 1.1 NoSQL数据库概述 NoSQL(NosQL = Not Only sQL ),意即"不仅仅是sQL",泛指非关系型的数据库.NoSQL不依赖业务逻辑 ...
- NoSQL数据库之Redis数据库:Redis的介绍与安装部署(redis-2.8.19/3.2.5)
NoSQL(NoSQL = Not Only SQL),它指的是非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的w ...
- Redis基础 概念 数据类型 常用指令 Jedis 持久化
Redis基础 概念 数据类型 常用指令 Jedis 持久化 1. Redis 简介 1.1 NoSQL概念 1.1.1 问题现象 1.1.2 NoSQL的概念 1.2 Redis概念 1.2.1 r ...
- Java Web学习day26------Redis基础、Redis数据类型、常用指令、jedis、持久化
Redis基础.Redis数据类型.常用指令.jedis.持久化 1. Redis 简介 1.1 NoSQL概念 1.2 Redis概念 1.3 Redis 的下载与安装 1.4 Redis服务器启动 ...
- 三大缓存框架ehcache、memcache和redis的介绍
三大缓存框架ehcache.memcache和redis的介绍 2016-04-12 架构说 4964 阅读 最近项目组有用到这三个缓存,去各自的官方看了下,觉得还真的各有千秋!今天特意归纳下各个缓存 ...
- Redis学习一Redis的介绍与安装部署
NoSql 介绍 NoSql 是key-value形式存储,和传统的数据库不一样,不一定遵循传统数据库的一些基本要求,比如遵循SQL标准(insert\update\delete\select).AC ...
- 6 redis 编译失败_Redis(NoSQL数据库)基础篇
一.Redis简介 1.1 Redis是什么 Redis是一个开源的,使用ANSI C 编写,高性能的Key-Value的NoSQL数据库. 2.2 Redis特点 (1)基于内存 (2)可持久化数据 ...
- Redis之 介绍和安装
Redis的介绍 NoSQL数据库概述 • NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL",泛指非关系型的 数据库. • NoSQL不依赖业务逻辑 ...
- Redisson--最好用的Redis客户端--介绍
原文网址:Redisson--最好用的Redis客户端--介绍_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Redisson这款最好用的Redis客户端. 官网 官网:Redisson: R ...
最新文章
- Centos 7网络属性配置及命令
- 对于PHP框架的简单认识
- Java设计模式(3 / 23):装饰者模式
- Windows 10如何消除文件夹右上角的“相对箭头”?
- golang-gui编程
- 工信部:2015年宽带城市20兆农村4兆
- 静态NAT、动态NAT、PAT(端口多路复用)的配置
- jvisualvm监控远程服务器,Jvisualvm监控远程tomcat
- java静态链表_Java数据结构——静态链表实现
- idea git输错密码的处理 win10
- QQ引流脚本,QQ扩列引流脚本实操演示
- 网站建设项目合同撰写
- (保姆级)利用ffmpeg将flv批量转mp4
- 精讲CS231N斯坦福计算机视觉公开课笔记
- onLoad和onShow触发时机及区别
- ZEN mining
- 俞军产品方法论|第三章 交易|摘要笔记
- 如何将实时直播链接到视频点播?
- linux修改torrent文件格式,最新版本μtorrent for Linux已经完全解决了中文文件名问题啦...
- 2022年N2观光车和观光列车司机考试题及在线模拟考试
热门文章
- goodsync文件服务器,GoodSync Enterprise Server Windows服务器版
- Office 2016安装包与教程
- Mysql使用索引为什么会变快?
- 微星GP63 (006CN) 拆机加固态
- Win11 实时防护无法开启问题
- Android 手机虚拟键判断是否开启
- 天玑1000L和麒麟980 哪个好
- 计算机桌面来回闪烁,电脑屏幕一直闪烁怎么办_电脑屏幕一直闪烁的解决方法 - 系统家园...
- 遍历List移除元素的若干种方法
- 阿里12位女合伙人成立的湖畔魔豆开始行动,聚焦0-3岁儿童发展领域