内容概要

因为项目中用户注册发送验证码,需要学习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. Django form表单修改数据

    form: #!/usr/bin/env python #coding:utf8 from django.forms import Form,ModelForm import models class ...

  2. TensorFlow 拾遗

     1..Here None in placeholder means that a dimension can be of any length.   2..   3.. 4.. 5.. tf.mul ...

  3. P3254——DP&&入门

    题目 给定一个$n \times m$的$01$矩形,选择其中为$1$的位置,要求互不相邻,问方案数. 解决方案 直接dp因为状态较多,数组很难直接表示出来,我们采用二进制状态压缩存储. 用$dp[i ...

  4. BZOJ 1027: [JSOI2007]合金 (计算几何+Floyd求最小环)

    题解就看这位仁兄的吧-不过代码还是别看他的了- 同样的方法-我200ms,他2000ms. 常数的幽怨- CODE #include <bits/stdc++.h> using names ...

  5. Educational Codeforces Round 73 (Rated for Div. 2) A. 2048 Game

    链接: https://codeforces.com/contest/1221/problem/A 题意: You are playing a variation of game 2048. Init ...

  6. Codeforces Round #454 Div. 1 [ 906A A. Shockers ] [ 906B B. Seating of Students ] [ 906C C. Party ]

    PROBLEM A. Shockers 题 http://codeforces.com/contest/906/problem/A 906A 907C 解 水题,按照题意模拟一下就行了 如果是 ‘ ! ...

  7. CentOS 7 yum update 升级提示:PackageKit 锁定解决方案

    CentOS 7 系列新安装后都会进行yum update操作,但每次都会遇到PackageKit 锁定问题,提示如下: /var/run/yum.pid 已被锁定,PID 为 2694 的另一个程序 ...

  8. C++自定义方法类、调用

    如求矩形.圆的面积的方法,可以写成一个area类 area.h中只声明,不实现: #ifndef AREA_H //防止重复引用 #define AREA_H class area{//自定义类 pu ...

  9. ubuntu安装chrome driver

    首先下载Chrome Driver(Firefox Driver的安装与该步骤相同) 链接: http://chromedriver.storage.googleapis.com/index.html ...

  10. codeforces708C

    CF708C Centroids 题意翻译 给定一颗树,你有一次将树改造的机会,改造的意思是删去一条边,再加入一条边,保证改造后还是一棵树. 请问有多少点可以通过改造,成为这颗树的中心?(如果以某个点 ...