内容概要

因为项目中用户注册发送验证码,需要学习redis内存数据库,故而下午花了些时间进行初步学习。本博文性质属于对今日redis学习内容的小结。在看本博文前或者看完后,可以反问自己三个问题:Redis是什么(What)、为什么要用Redis/Redis有什么用?(Why)、如何使用Redis(How)。

  • Redis简述
  • Redis安装与简单应用
  • Jedis(Redis for Java)
  • JedisPool(Jedis数据库连接池)
  • JedisUtil(Redis简易封装的操纵工具)
    • jedis.properties
    • pulic static Jedis getJedis()
    • public static void close(Jedis jedis)
注:JedisUtil的设计及全部代码并非博主原创,系完全摘抄自博客园博主Roy-Xin的博文Jedis连接池

一 Redis简述

简述全文摘抄自百度百科

  • 特点

    • 支持网络[远程、分布式、主从模式]
    • 基于内存
    • 可持久化
    • 日志型
    • Key-Value数据库
    • 提供多种语言

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。

Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。

二 Redis安装与简单应用

  • step2:解压即安装
  • step3:运行服务端

    • D:\Program\Redis\redis-server.exe D:\Program\Redis\redis.windows.conf # 运行redis服务器
  • step4.1:客户端调用Redis(应用)存储/获取数据[基于String的key-value键值对]
    • D:\Program\Redis\redis-cli.exe -h 127.0.0.1 -p 6379 # 客户端调用redis服务
>set myKey abc
OK
>get myKey
"abc"
  • step4.2:密码问题

    • 查看当前redis有没有设置密码:(以下显示说明没有密码)
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) ""
+ 设置密码(方式一)
127.0.0.1:6379> config set requirepass abcdefg
OK
    + 再次查看当前redis就提示需要密码:
127.0.0.1:6379> config get requirepass
(error) NOAUTH Authentication required.
+ 设置密码(方式二:永久)
+ 打开配置文件 : redis.conf(假定设置为123)
requirepass foobared
requirepass 123
    + 保存后重启redis即可
  • step4.3:远程服务调用(需密码)

    • D:\Program\Redis\redis-cli.exe -h <host:127.0.0.1> -p <port:6379> -a <password:123> # 客户端调用redis服务

三 Jedis(Redis for Java)

  • jedis是官方首选的java客户端开发包
  • Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如java、C、C#、C++、php、Node.js、Go等。
  • 在官方网站里列一些Java的客户端,有Jedis、Redisson、Jredis、JDBC-Redis、等其中官方推荐使用Jedis和Redisson。
  • 在企业中用的最多的就是Jedis,Jedis同样也是托管在github上
  • 项目地址:https://github.com/xetorthio/jedis
  • 下载jedis解压后得到jar包如下:java操作redis数据库API(Jedis)
  • 基本用法
//连接redis服务器,192.168.0.100:6379
String ip="192.168.0.100";
jedis = new Jedis(ip, 6379);
//权限认证
jedis.auth("password");
public class RedisTest {
@Test
public void jedisPropertiesTest(){
Jedis jedis = JedisUtil.getJedis();
Print.print("ss: " + jedis.get("ss"));//output: ss:2423235
JedisUtil.close(jedis);
} @Test// 基于字符串存储的基本测试
public void baseTest(){
Jedis jedis = new Jedis("127.0.0.1",6379);
jedis.auth("123456");
//设置数据
jedis.set("zengtai","1125418540");
jedis.set("wangchen","2153253568");
jedis.close();//释放资源
Print.print("保存数据完成"); //获取数据
Print.print("ss: " + jedis.get("ss"));//output: ss:2423235
Print.print("xx: " + jedis.get("xx"));//output: xx:bhdjfsahsf
jedis.close();//释放资源
Print.print("获取数据完成"); //删除数据
jedis.del("xx");
jedis.close();//释放资源
Print.print("删除数据完成");
Print.print("xx: " + jedis.get("wangchen"));//output: xx:null
} @Test//数据结构测试(栈/队列)
public void dataStructureTest(){
Jedis jedis = new Jedis("127.0.0.1",6379);
jedis.auth("123456"); //设置数据
jedis.lpush("charsList","E","D","C","B");//添加List:B(0) C(1) D(2) E(3)
jedis.lpush("charsList","A");//往key对应list左侧插入一个元素
jedis.rpush("charsList","F");//往key对应list左侧插入一个元素
Print.print("rpop:"+jedis.rpop("charsList"));//output: rpop:F
Print.print("lpop:"+jedis.lpop("charsList"));//output: lpop:A Print.print("charsList[0]:"+jedis.lindex("charsList",0));//output: charsList[0]:B
Print.print("charsList[1]:"+jedis.lindex("charsList",1));//output: charsList[1]:C
jedis.lset("charsList",0,"<X>");//修改key对应list指定下标index的元素
Print.print("charsList[0]:"+jedis.lindex("charsList",0));//output: charsList[0]:<X> jedis.close();//释放资源
}
}

四 JedisPool(Jedis数据库连接池)

+ [【推荐(JedisUtil/连接池JedisPool)】Jedis连接池](https://www.cnblogs.com/xinruyi/p/9391140.html)
//1 获得连接池配置对象,设置配置项
JedisPoolConfig config = new JedisPoolConfig();
// 1.1 最大连接数
config.setMaxTotal(30);
//1.2 最大空闲连接数
config.setMaxIdle(10);
//获得连接池
JedisPool jedisPool = new JedisPool(config, "localhost", 6379); Jedis jedis = null;
try {
//3.获得核心对象
jedis = jedisPool.getResource();
//4.设置数据
jedis.set("name", "xinruyi");
//5.获得数据
String name = jedis.get("name");
System.out.println(name);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (jedis != null) {
jedis.close();
}
} //虚拟机关闭时,释放pool资源
if(jedisPool!=null){
jedisPool.close();
}

五 JedisUtil(Redis简易封装的操纵工具)

实现Redis操纵(JedisUtil类)所依赖的工具有:

  • Redis数据库服务

  • Jedis(Redis for Java - API)
    • jedis是官方首选的java客户端开发包
    • Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持
      • 比如 java、C、C#、C++、php、Node.js、Go等
    • 在官方网站里列一些Java的客户端,有Jedis、Redisson、Jredis、JDBC-Redis等
      • 其中,官方推荐使用Jedis和Redisson
    • 在企业中用的最多的就是Jedis,Jedis同样也是托管在github上
    • 地址:https://github.com/xetorthio/jedis
    • 下载jedis解压后得到jar包如下:java操作redis数据库API(Jedis)
  • JedisPool(Jedis连接池)
  • ResourceBundle(读取属性配置文件jedis.properties)
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig; import java.util.ResourceBundle; public final class JedisUtil {
private JedisUtil() {
} private static JedisPool jedisPool;
private static int maxtotal;
private static int maxwaitmillis;
private static String host;
private static int port;
private static int timeout;
private static String auth;//密码 /*读取 jedis.properties 配置文件*/
static {
ResourceBundle rb = ResourceBundle.getBundle("jedis");
maxtotal = Integer.parseInt(rb.getString("maxtotal"));
maxwaitmillis = Integer.parseInt(rb.getString("maxwaitmillis"));
host = rb.getString("host");
port = Integer.parseInt(rb.getString("port"));
auth = rb.getString("auth");
timeout = Integer.parseInt(rb.getString("timeout"));
} /*创建连接池*/
static {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(maxtotal);
jedisPoolConfig.setMaxWaitMillis(maxwaitmillis);
jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout, auth);
} /*获取jedis*/
public static Jedis getJedis() {
return jedisPool.getResource();
} /**
* 根据指定的分数据库索引[dabaseIndex],获取Redis分数据库
* + 参考文献
* + [Redis 分库](https://www.cnblogs.com/DillGao/p/8494710.html)
* + Redis 可以分库,相当于 MySQL 中的 database。
* + 控制数据库总数在 redis配置文件中设置,默认是 16 个。
* + 数据库名称是整数索引标识,而不是由一个数据库名称字符串。
* + 选择数据库用 select 命令: redis>select 2
* + reidis 中的操作,默认是 数据库 0;
* + 每个数据库都有属于自己的空间,不必担心数据库之间的key冲突。
* @param dabaseIndex
* @return
*/
public static Jedis getJedis(int dabaseIndex){
Jedis jedis = jedisPool.getResource();
jedis.select(dabaseIndex);
return jedis;
} /*关闭Jedis*/
public static void close(Jedis jedis) {
if (jedis != null) {
jedis.close();
}
}
}

jedis.properties [jedis(redis for java)连接池配置信息]

maxtotal=100
maxwaitmillis=3000
host=127.0.0.1
port=6379
auth=123456
timeout=1000

测试与示例

    @Test
public void jedisPropertiesTest(){
Jedis jedis = JedisUtil.getJedis();
Print.print("aiqing: " + jedis.get("aiqing"));//output: aiqing:sdvwtrguyw32
JedisUtil.close(jedis);//释放资源
}

六 参考文献

七 推荐文献

Redis之快速入门与应用[教程/总结]的更多相关文章

  1. Spring Boot 2.0 的快速入门(图文教程)

    摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! Spring Boot 2.0 的快速入门(图文教程) 大家都 ...

  2. MyBatis学习总结-MyBatis快速入门的系列教程

    MyBatis学习总结-MyBatis快速入门的系列教程 [MyBatis]MyBatis 使用教程 [MyBatis]MyBatis XML配置 [MyBatis]MyBatis XML映射文件 [ ...

  3. 零基础快速入门SpringBoot2.0教程 (三)

    一.SpringBoot Starter讲解 简介:介绍什么是SpringBoot Starter和主要作用 1.官网地址:https://docs.spring.io/spring-boot/doc ...

  4. 零基础快速入门SpringBoot2.0教程 (二)

    一.SpringBoot2.x使用Dev-tool热部署 简介:介绍什么是热部署,使用springboot结合dev-tool工具,快速加载启动应用 官方地址:https://docs.spring. ...

  5. Redis内存数据库快速入门

    Redis简介 Redis是一个开源(BSD许可),内存数据结构存储,用作数据库,缓存和消息代理.它支持数据结构,如 字符串,散列,列表,集合,带有范围查询的排序集,位图,超级日志,具有半径查询和流的 ...

  6. html快速入门(基础教程+资源推荐)

    1.html究竟是什么? 从字面上理解,html是超文本标记语言hyper text mark-up language的首字母缩写,指的是一种通用web页面描述语言,是用来描述我们打开浏览器就能看到的 ...

  7. 零基础快速入门SpringBoot2.0教程 (四)

    一.JMS介绍和使用场景及基础编程模型 简介:讲解什么是小写队列,JMS的基础知识和使用场景 1.什么是JMS: Java消息服务(Java Message Service),Java平台中关于面向消 ...

  8. Redis 快速入门

    Redis 快速入门 谈到Redis,大家应该都不陌生.它是用c语言开发的一个高性能键值数据库,主要用于缓存领域.本章通过Redis的安装,Redis的五大数据类型,Redis的Java客户端,Red ...

  9. Golang快速入门

    Go语言简介: Golang 简称 Go,是一个开源的编程语言,Go是从2007年末由 Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian L ...

随机推荐

  1. Quartz框架介绍

    一.Quartz概述: Quartz是一个完全由Java编写的开源任务调度的框架,通过触发器设置作业定时运行规则,控制作业的运行时间.其中quartz集群通过故障切换和负载平衡的功能,能给调度器带来高 ...

  2. HTML中dl元素的高度问题

    dl元素通常用来创建一个描述列表,但是在我使用的过程中发现了一个小问题. 定义及用法 在MDN中 <dl> 元素的定义是:一个包含术语定义以及描述的列表,通常用于展示词汇表或者元数据 (键 ...

  3. 【SQL-历史执行语句查询】 查询对数据库执行了哪些SQL

    Sql语句 QS.creation_time as '创建时间', ), (( THEN DATALENGTH(st.text) ) ) AS '查询语句' , ST.text as '执行文本', ...

  4. java8 time计算时间差

    最近使用Java8编写代码时,需要计算时间差,现整理如下 前言 本次使用了Java8提供的ChronoUnit工具类,它主要提供以下几种时间维度 枚举 枚举 说明 NANOS 毫微秒(毫秒的10000 ...

  5. DP-------bzoj2699 更新

    题目描述: 对于一个数列A[1..N],一种寻找最大值的方法是:依次枚举A[2]到A[N],如果A[i]比当前的A[1]值要大,那么就令A[1]=A[i],最后A[1]为所求最大值.假设所有数都在范围 ...

  6. Rapid Object Detection using a Boosted Cascade of Simple Features 部分翻译

    Rapid ObjectDetection using a Boosted Cascade of Simple Features 使用简单特征级联分类器的快速目标检测 注:部分翻译不准处以红色字体给出 ...

  7. 2019ICPC上海网络赛 A Lightning Routing I 点分树(动态点分治)+线段树

    题意 给一颗带边权的树,有两种操作 \(C~e_i~w_i\),将第\(e_i\)条边的边权改为\(w_i\). \(Q~v_i\),询问距\(v_i\)点最远的点的距离. 分析 官方题解做法:动态维 ...

  8. python_re模块

    正则表达式:http://www.regexlab.com/zh/regref.htm

  9. Light Switching(SPOJ LITE)—— 线段树成段更新异或值

    题目连接:http://www.spoj.com/problems/LITE/en/. 题意:有若干个灯泡,每次对一段操作,这一段原先是亮的,就关了:原先是关着的,就打开.询问某一段的打开的灯泡的个数 ...

  10. windos系统下使tomcat按天生成控制台日志catalina.out

    windos系统下的tomcat默认不会记录控制台catalina.out日志,只有访问日志,不便于排错 修改启动文件 1.打开bin下面的startup.bat文件,把 call "%EX ...