内容概要

因为项目中用户注册发送验证码,需要学习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. 低级键盘钩子,在WIN7以上版本的问题

    最近在项目用到低级键盘钩子.发现一个很奇怪的事情,在开发环境和测试环境下都正常运行的键盘钩子, 到了现场环境,总是偶发性出现 键盘钩子不能用了,而且退出时产生1404 错误. 后经过阅读MSDN 的R ...

  2. windows安装mysql(5.7.26版本)压缩包

    1.解压安装包,进入文件夹,并创建一个data文件夹! 2.修改 my-default.ini 文件 [mysql] default-character-set=utf8 [mysqld] port ...

  3. Linux文件系统之目录清单

    挂载点:挂载:将设备关联到当前文件系统目录 文件系统:rootfs:根文件系统/boot:系统启动相关文件,如内核.initrd.以及grub(bootleader:引导加载器)/dev:设备文件,  ...

  4. JAVA-WEB-简单的四则运算

    首先附上选择题目数量和每行题数的JSP代码 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> ...

  5. SpringBoot统一异常处理后TX-LCN分布式事务无法捕获异常进行回滚

    通常我们使用SpringBoot都会进行统一异常处理,例如写一个BaseController,在BaseController里进行统一异常处理,然后其他的Controller都继承BaseContro ...

  6. javascript内置对象:Date

    JavaScript内置函数:Date时间<script>    var today=new Date();    weeks=["日","一",& ...

  7. Codeforces Round #456 (Div. 2) B题

    B. New Year's Evetime limit per test1 secondmemory limit per test256 megabytesinputstandard inputout ...

  8. 1250 Fibonacci数列(矩阵乘法)

    1250 Fibonacci数列 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 定义:f0=f1=1, fn=fn-1+fn ...

  9. assert 笔记

    目录 什么是assert? assert使用 assert错误使用 什么是assert? Python 的 assert 语句是一个 debug 的好工具,主要用于测试一个条件是否满足.如果测试的条件 ...

  10. Codeforces 1051 D.Bicolorings(DP)

    Codeforces 1051 D.Bicolorings 题意:一个2×n的方格纸,用黑白给格子涂色,要求分出k个连通块,求方案数. 思路:用0,1表示黑白,则第i列可以涂00,01,10,11,( ...