Redis

本次介绍以下几个内容:

  1. NoSQL介绍
  2. Redis介绍
  3. Jedis的API
  4. 使用工具类来连接Redis

NoSQL介绍

NoSQL概念

Not Only SQL:不仅仅是SQL,指的就是非关系型数据库,它是关系型数据库有益的补充。最终的数据还是保存在关系型数据库中。非关系型数据库主要是提升数据库的查询速度,一般做为数据的缓存来使用。

优点
  1. 格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
  2. 速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘;
  3. 成本低:nosql数据库部署简单,基本都是开源软件。
缺点
  1. 不提供sql支持,学习和使用成本较高;
  2. 数据结构相对复杂,复杂查询方面不方便。

为什么要使用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类常用方法

  1. 每个方法就是redis中的命令名,方法的参数就是命令的参数。
  2. 每个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)相关推荐

  1. Redis 学习笔记-NoSQL数据库 常用五大数据类型 Redis配置文件介绍 Redis的发布和订阅 Redis_事务_锁机制_秒杀 Redis应用问题解决 分布式锁

    1.NoSQL数据库 1.1 NoSQL数据库概述 NoSQL(NosQL = Not Only sQL ),意即"不仅仅是sQL",泛指非关系型的数据库.NoSQL不依赖业务逻辑 ...

  2. NoSQL数据库之Redis数据库:Redis的介绍与安装部署(redis-2.8.19/3.2.5)

     NoSQL(NoSQL = Not Only SQL),它指的是非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的w ...

  3. Redis基础 概念 数据类型 常用指令 Jedis 持久化

    Redis基础 概念 数据类型 常用指令 Jedis 持久化 1. Redis 简介 1.1 NoSQL概念 1.1.1 问题现象 1.1.2 NoSQL的概念 1.2 Redis概念 1.2.1 r ...

  4. Java Web学习day26------Redis基础、Redis数据类型、常用指令、jedis、持久化

    Redis基础.Redis数据类型.常用指令.jedis.持久化 1. Redis 简介 1.1 NoSQL概念 1.2 Redis概念 1.3 Redis 的下载与安装 1.4 Redis服务器启动 ...

  5. 三大缓存框架ehcache、memcache和redis的介绍

    三大缓存框架ehcache.memcache和redis的介绍 2016-04-12 架构说 4964 阅读 最近项目组有用到这三个缓存,去各自的官方看了下,觉得还真的各有千秋!今天特意归纳下各个缓存 ...

  6. Redis学习一Redis的介绍与安装部署

    NoSql 介绍 NoSql 是key-value形式存储,和传统的数据库不一样,不一定遵循传统数据库的一些基本要求,比如遵循SQL标准(insert\update\delete\select).AC ...

  7. 6 redis 编译失败_Redis(NoSQL数据库)基础篇

    一.Redis简介 1.1 Redis是什么 Redis是一个开源的,使用ANSI C 编写,高性能的Key-Value的NoSQL数据库. 2.2 Redis特点 (1)基于内存 (2)可持久化数据 ...

  8. Redis之 介绍和安装

    Redis的介绍 NoSQL数据库概述 • NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL",泛指非关系型的 数据库. • NoSQL不依赖业务逻辑 ...

  9. Redisson--最好用的Redis客户端--介绍

    原文网址:Redisson--最好用的Redis客户端--介绍_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Redisson这款最好用的Redis客户端. 官网 官网:Redisson: R ...

最新文章

  1. Centos 7网络属性配置及命令
  2. 对于PHP框架的简单认识
  3. Java设计模式(3 / 23):装饰者模式
  4. Windows 10如何消除文件夹右上角的“相对箭头”?
  5. golang-gui编程
  6. 工信部:2015年宽带城市20兆农村4兆
  7. 静态NAT、动态NAT、PAT(端口多路复用)的配置
  8. jvisualvm监控远程服务器,Jvisualvm监控远程tomcat
  9. java静态链表_Java数据结构——静态链表实现
  10. idea git输错密码的处理 win10
  11. QQ引流脚本,QQ扩列引流脚本实操演示
  12. 网站建设项目合同撰写
  13. (保姆级)利用ffmpeg将flv批量转mp4
  14. 精讲CS231N斯坦福计算机视觉公开课笔记
  15. onLoad和onShow触发时机及区别
  16. ZEN mining
  17. 俞军产品方法论|第三章 交易|摘要笔记
  18. 如何将实时直播链接到视频点播?
  19. linux修改torrent文件格式,最新版本μtorrent for Linux已经完全解决了中文文件名问题啦...
  20. 2022年N2观光车和观光列车司机考试题及在线模拟考试

热门文章

  1. goodsync文件服务器,GoodSync Enterprise Server Windows服务器版
  2. Office 2016安装包与教程
  3. Mysql使用索引为什么会变快?
  4. 微星GP63 (006CN) 拆机加固态
  5. Win11 实时防护无法开启问题
  6. Android 手机虚拟键判断是否开启
  7. 天玑1000L和麒麟980 哪个好
  8. 计算机桌面来回闪烁,电脑屏幕一直闪烁怎么办_电脑屏幕一直闪烁的解决方法 - 系统家园...
  9. 遍历List移除元素的若干种方法
  10. 阿里12位女合伙人成立的湖畔魔豆开始行动,聚焦0-3岁儿童发展领域