您的位置:首页 > 数据库 > Redis

Java中使用Jedis操作Redis—Redis快速入门

2017-03-07 16:56 721 查看
     这里先说Java中使用Jedis操作Redis,稍后会整理Redis快速入门来详细介绍Redis(跟着项目走会更容易理解)。

 Java连接Redis:

 在Java程序中使用Redis之前,我们需要先确保在机器上安装了Redis服务及Java Redis驱动程序,并且你的机器上能够正常使用Java环境。

 1、Java的安装配置参考-Java开发环境配置-(略)

 2、安装Redis服务

 1)、下载Redis:

 Redis 官网 :http://redis.io/

 下载页面:http://redis.io/download

 官方文档:http://redis.io/documentation

 Windows_64位 版本下载:https://github.com/ServiceStack/redis-windows/tree/master/downloads点击打开链接

 2)、配置Redis:

 下载完成后,在C盘【Program Files】目录下新建文件夹【Redis】,右键解压redis ZIP包,把所有文件解压到Redis文件夹中。

 


 文件介绍:

 redis-benchmark.exe #基准测试

 redis-check-aof.exe # aof

 redischeck-dump.exe # dump

 redis-cli.exe # 客户端

 redis-server.exe # 服务器

 redis.windows.conf # 配置文件

 3)、启动Redis:

 进入cmd操作系统窗口

 使用【redis-server.exe redis.windows.conf】启动redis服务。

4000

 服务启动成功状态

 


 启动redis服务的doc窗口,不用关闭,因为服务需要一直执行,关闭服务,直接关闭窗口就行。

 4)、测试Redis:

 新打开一个doc窗口,用自带的客户端工具进行测试命令【redis-cli.exe】,启动redis客户端,如下

 


 3、下载Java redis驱动包(jedis.jar),确保下载最新驱动包,项目中引入jar包

 1)、首先在项目下创建一个文件夹,保存我们的jar包

 在项目名上右击,依次点击【new】-->【folder】,打开新建文件夹窗口。

 2)、输入文件夹名称【lib】,点击【ok】,我们通常在lib文件夹中存放从外部引入的jar包。

 3)、找到我们要引入的jar包,拖进lib文件夹中或者复制,打开选择框,我们选择默认的【copy fiels】,点击【OK】关闭。

 4)、此时,项目中看到的jar包只是复制到项目下,还不能使用

 再在项目名称上右击,依次选择【Build Path】-->【Configure Build Path...】。

 5)、在打开的窗口中,先选择【Libraries】页,再从右边的按钮中点击【Add JARs...】

 6)、在打开的窗口中,我们依次展开本项目的lib文件夹,然后选择我们刚才复制到项目中的jar包,然后点击【OK】关闭窗口。

 7)、此时,我们在刚才打开的【Libraries】页可以看到我们引入的jar包的名称,点击【OK】确认关闭窗口。

 8)、现在,我们就可以在项目中使用这个jar包了。

 Java连接到Redis服务器:

 参考以下示例代码:

 package redis;

 import redis.clients.jedis.Jedis;

 public class RedisTest {

   public static void main(String[] args) {

   Jedis jedis = new Jedis("localhost");

   System.out.println("Connection to server sucessfully");

   System.out.println("Server is running:"+jedis.ping());

   }

 }

 现在,编译并运行上面的程序来测试与Redis服务器的连接,可以根据需要更改路径,假设jedis.jar的当前版本在当前路径中可以使用。执行上面代码,将生成以下结果:

 $javac RedisTest.java

 $java RedisTest

 Connection to server sucessfully

 Server is running:PONG

 

 各个功能函数示例

 Redis Java字符串示例

 package redis;

 import redis.clients.jedis.Jedis;

 public class RedisStringTest {

    public static void main(String[] args) {

      //Connecting to Redis server on localhost

      Jedis jedis = new Jedis("localhost");

      System.out.println("Connection to server sucessfully");

      //set the data in redis string

      jedis.set("tutorial-name", "Redis tutorial");

      //get the stored data and print it

      System.out.println("Stored string in redis: "+jedis.get("tutorial-name"));

    }

 }

 执行上面程序,将生成以下结果:

 $javacRedisStringTest.java

 $javaRedisStringTest

 Connection to server sucessfully

 Stored string in redis: Redis tutorial

 Redis Java列表示例

 package redis;

 import java.util.List;

 import redis.clients.jedis.Jedis;

 public class RedisListTest {

    public static void main(String[] args) {

      //Connection to Redis server on localhost

      Jedis jedis = new Jedis("localhost");

      System.out.println("Connection to server sucessfully");

      //store data in redis list

      jedis.lpush("tutorial-list", "Redis");

      jedis.lpush("tutorial-list", "Mongodb");

      jedis.lpush("tutorial-list", "Mysql");

      //get the stored data and print it

      List<String> list = jedis.lrange("tutorial-list", 0, 5);

      for(int i=0;i<list.size();i++){

       System.out.println("List of storedin redis: "+list.get(i));

      }

    }

 }

 执行上面代码,将生成以下结果:

 $javac RedisListTest.java

 $java RedisListTest

 Connection to server sucessfully

 List of stored in redis: Mysql

 List of stored in redis: Mongodb

 List of stored in redis: Redis

 Redis Java键示例

 package redis;

 import java.util.Iterator;

 import java.util.Set;

 impo
15df8
rt redis.clients.jedis.Jedis;

 public class RedisKeyTest {

    public static void main(String[] args) {

      //Connection to Redis server on localhost

      Jedis jedis = new Jedis("localhost");

      System.out.println("Connection to server successfully");

      //清空数据

      System.out.println("清空库中所有数据:"+jedis.flushDB());

      //判断key是否存在

      System.out.println("判断key999键是否存在:"+jedis.exists("key999"));

      System.out.println("新增key001,value001键值对:"+jedis.set("key001", "value001"));

      System.out.println("判断key001是否存在:"+jedis.exists("key001"));

      System.out.println("新增key002,value002键值对:"+jedis.set("key002", "value002"));

      //输出系统中所有的key

      Set<String> keys = jedis.keys("*");

      Iterator<String> it = keys.iterator();

      while(it.hasNext()){

       String key = it.next();

       System.out.println("keys: "+key);

      }

      //删除某个key,若key不存在,则忽略该命令。

      System.out.println("系统中删除key002: " +jedis.del("key002"));

      System.out.println("判断key002是否存在:"+jedis.exists("key002"));

    }

 }

 执行上面程序,将生成下面结果:

 Connection to server successfully

 清空库中所有数据:OK

 判断key999键是否存在:false

 新增key001,value001键值对:OK

 判断key001是否存在:true

 新增key002,value002键值对:OK

 keys: key002

 keys: key001

 系统中删除key002: 1

 判断key002是否存在:false

 Redis快速入门

 Redis是一个开源、高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的Web应用程序。

 Redis有三个主要特点,使它优越于其他键值数据存储系统:

 1、Redis将其数据库完全保存在内存中,仅使用磁盘进行持久化。

 2、与其他键值数据存储相比,Redis有一组相对丰富的数据类型。

 3、Redis可以将数据复制到任意数量的从机中。

 Redis优点:

 1、异常快-Redis非常快,每秒可执行大约110000次的设置(set)操作,每秒大约可执行81000次的读取/获取(get)操作。

 2、支持丰富的数据类型-Redis支持开发人员常用的大多数数据类型,例如列表、集合、排序集、散列等。这使得Redis很容易被用来解决各种问题,因为我们知道哪些问题可以更好地使用哪些数据类型来处理解决。

 3、操作具有原子性-所有的Redis操作都是原子操作,这确保如果两个客户端并发访问,Redis服务器能接收更新的值。

 4、多实用工具-Redis是一个多实用工具,可用于多种用例,如:缓存,消息队列,应用程序中任何短期数据,例如web应用程序中的会话,网页命中计数等。

 Redis与其他键值存储系统:

 1、Redis是键值数据库系统的不同进化路线,它的值可以包含更复杂的数据类型,可在这些数据类型上定义原子操作。

 2、Redis是一个内存数据库,但在磁盘数据库上是持久的,因此它代表了一个不同的权衡,在这种情况下,在不能大于存储器(内存)的数据集的限制下实现非常高的写和读速度。

 3、内存数据库的另一个优点,它与磁盘上的相同数据结构相比,复杂数据结构在内存中存储表示更容易操作,因此,Redis可以做很少的内部复杂性。

 Redis环境安装与配置

 Server端安装

 1、下载

 Windows_64位 版本下载:https://github.com/ServiceStack/redis-windows/tree/master/downloads

 2、安装

 1)、下载后,在C盘【Program Files】目录下新建文件夹【Redis】,右键解压redis ZIP包,把所有文件解压到Redis文件夹中。

 几个exe程序的功能:

 redis-benchmark.exe:性能测试,用以模拟同时由N个客户端发送M个
SETs/GETs 查询 (类似于 Apache 的ab 工具)

 redis-check-aof.exe:更新日志检查

 redis-check-dump.exe:本地数据库检查

 redis-cli.exe:客户端

 redis-server.exe:服务端
 2)、将路径添加至系统环境变量
 3)、cmd下启动redis-server
 注:由于此处未指定配置文件,系统采用默认参数
 3、下载对应的配置文件
 由上面cmd输出可知当前版本,原页面上打开所有发布版本,找到对应版本。
 下载zip文件,拷贝出redis.conf配置文件至安装目录。
 注:如果配置文件的版本和当前exe程序的版本不匹配,很容易由于参数不一致导致server端无法启动。
 4、通过指定的配置文件启动服务
 5、客户端访问测试
 另启动一个cmd窗口。

 Redis配置

 在Redis中,Redis的根目录,有一个配置文件(redis.conf)。当然我们可以通过Redis CONFIG命令获取和设置所有的Redis配置。

 语法:

 以下是Redis中的CONFIG命令的基本语法

 redis 127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME

 示例:

 redis 127.0.0.1:6379> CONFIG GET loglevel

 1) "loglevel"

 2) "notice"

 要获取所有配置设置,请使用*代替CONFIG_SETTING_NAME

 示例:

 redis 127.0.0.1:6379> CONFIG GET *

 1) "dbfilename"

 2) "dump.rdb"

 3) "requirepass"

 4) ""

 5) "masterauth"

 ......

 编辑配置:

 要更新配置,可以直接编辑redis.conf文件,也可以通过CONFIG set命令更新配置。

 语法:

 以下是CONFIG SET命令的基本语法。

 redis 127.0.0.1:6379> CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE

 示例:

 redis 127.0.0.1:6379> CONFIG SET loglevel "notice" 

 OK 

 redis 127.0.0.1:6379> CONFIG GET loglevel  

 1) "loglevel" 

 2) "notice"

 Redis数据类型

 Redis支持5中数据类型。

 1、字符串

 Redis的字符串是一个字节序列。Redis的字符串是二进制安全的,这意味着它们的长度不由任何特殊的终止字符决定。因此,可以在一个字符串中存储高达512兆字节的任何内容。

 示例:

 redis 127.0.0.1:6379> set name "zifuchuan.com" 

 OK 

 redis 127.0.0.1:6379> get name 

 "zifuchuan.com"

 注:set和get是Redis命令,name是Redis中使用的键,zifuchuan.com是存储在redis中的字符串的值。Redis命令不区分大小写,如set/SET/Set都是同一个命令。字符串值的最大长度为512MB。

 2、散列/哈希

 Redis散列/哈希(Hashes)是键值对的集合。是字符串字段和字符串值之间的映射。因此它们用于表示对象。

 示例:

 redis 127.0.0.1:6379> HMSET ukey username "gaosure" password "gaosure123" points 200

 redis 127.0.0.1:6379> HMGET ukey username

 1)
"gaosure"

 注:散列/哈希数据类型用于存储包含用户的基本信息的用户对象。这里的HMSET是Redis命令,ukey是键的名称。

 3、列表

 Redis列表只是字符串列表,按插入顺序排序。可以向Redis列表的头部或尾部添加元素。

 示例:

 redis 127.0.0.1:6379> lpush alist redis 

 (integer) 1 

 redis 127.0.0.1:6379> lpush alist mongodb 

 (integer) 2 

 redis 127.0.0.1:6379> lpush alist sqlite 

 (integer) 3 

 redis 127.0.0.1:6379> lrange alist 0 10  

 1) "sqlite" 

 2) "mongodb" 

 3) "redis"

 注:列表的最大长度为2^32 - 1个元素(4294967295,每个列表可容纳超过40亿个元素)。

 4、集合

 Redis集合是字符串的无序集合。在Redis中,您可以添加,删除和测试成员存在的时间O(1)复杂性。

 示例:

 redis 127.0.0.1:6379> sadd yiibailist redis 

 (integer) 1 

 redis 127.0.0.1:6379> sadd yiibailist mongodb 

 (integer) 1 

 redis 127.0.0.1:6379> sadd yiibailist sqlite 

 (integer) 1 

 redis 127.0.0.1:6379> sadd yiibailist sqlite 

 (integer) 0 

 redis 127.0.0.1:6379> smembers yiibailist  

 1) "mongodb" 

 2) "redis" 

 3) "sqlite"

 注:在上面的示例中,sqlite被添加了两次,但是由于集合的唯一属性,所以它只算添加一次。一个集合中的最大成员数量为2^32 - 1(即4294967295,每个集合中元素数量可达40亿个)个。

 5、可排序集合

 Redis可排序集合类似于Redis集合,是不重复的字符集合。 不同之处在于,排序集合的每个成员都与分数相关联,这个分数用于按最小分数到最大分数来排序的排序集合。虽然成员是唯一的,但分数值可以重复。

 示例:

 redis 127.0.0.1:6379> zadd yiibaiset 0 redis

 (integer) 1 

 redis 127.0.0.1:6379> zadd yiibaiset 0 mongodb

 (integer) 1 

 redis 127.0.0.1:6379> zadd yiibaiset 1 sqlite

 (integer) 1 

 redis 127.0.0.1:6379> zadd yiibaiset 1 sqlite

 (integer) 0 

 redis 127.0.0.1:6379> ZRANGEBYSCORE yiibaiset 0 1000  

 1) "mongodb" 

 2) "redis" 

 3) "sqlite"

 注:因为 ‘sqlite‘ 的排序值是 1 ,其它两个元素的排序值是 0 ,所以 ‘sqlite‘ 排在最后一个位置上。

 Redis命令

 Redis命令是用于Redis服务器上执行一些操作。

 要在Redis服务器上运行命令,需要一个Redis客户端。Redis客户端在Redis包中有提供,这个包在前面安装过程就有安装。

 Redis客户端基本语法:redis-cli

 要启动Redis客户端,请打开终端并键入命令redis-cli。这样讲连接到本地的Redis服务器,现在可以运行任何的Redis命令了。

 连接到在本地机器上运行的Redis服务器并执行PING命令,该命令检查服务器是否正在运行

 在远程服务器上运行命令

 要在远程服务器上运行命令,需要通过客户端redis-cli连接到服务器

 语法:

 redis-cli -h host -p port -a password

 示例:

 以下示例显示如何连接到Redis远程服务器,在主机(host)127.0.0.1,端口(port)6379上运行,并使用密码为 mypass。

 redis-cli -h 127.0.0.1 -p 6379 -a "mypass" 

 redis 127.0.0.1:6379> 

 redis 127.0.0.1:6379> PING  

 PONG

 


 已在主机(host)上:

 


 Redis键命令

 Redis的键命令用于管理Redis中的键。以下是使用键命令的语法。

 语法:

 redis 127.0.0.1:6379> COMMAND KEY_NAME

 示例:

 redis 127.0.0.1:6379> SET akey redis

 OK 

 redis 127.0.0.1:6379> DEL akey

 (integer) 1

 127.0.0.1:6379> GET akey

 (nil)

 注:在上面的例子中,DEL是Redis的删除命令,而akey是键的名称。如果键被删除,则命令的输出将为(integer) 1,否则为(integer) 0。

 下表列出了与键相关的一些基本命令。

 

编号命令描述
1DEL key此命令删除一个指定键(如果存在)。
2DUMP key
此命令返回存储在指定键的值的序列化版本。
3EXISTS key
此命令检查键是否存在。
4EXPIRE key seconds
设置键在指定时间秒数之后到期/过期。
5EXPIREAT key timestamp
设置在指定时间戳之后键到期/过期。这里的时间是Unix时间戳格式。
6PEXPIRE key milliseconds
设置键的到期时间(以毫秒为单位)。
7PEXPIREAT key milliseconds-timestamp
以Unix时间戳形式来设置键的到期时间(以毫秒为单位)。
8KEYS pattern
查找与指定模式匹配的所有键。
9MOVE key db
将键移动到另一个数据库。
10PERSIST key
删除指定键的过期时间,得永生。
11PTTL key
获取键的剩余到期时间。
12RANDOMKEY
从Redis返回一个随机的键。
13RENAME key newkey
更改键的名称。
14PTTL key
获取键到期的剩余时间(以毫秒为单位)。
15RENAMENX key newkey如果新键不存在,重命名键。
16TYPE key返回存储在键中的值的数据类型。
 

 

 Redis字符串命令

 Redis字符串命令用于管理Redis中的字符串值。以下是使用Redis字符串命令的语法。

 redis 127.0.0.1:6379> COMMAND KEY_NAME

 示例:

 redis 127.0.0.1:6379> SET mykey "redis" 

 OK 

 redis 127.0.0.1:6379> GET mykey 

 "redis"

 在上面的例子中,SET和GET是redis中的命令,而mykey是键的名称。

 下表列出了一些用于在Redis中管理字符串的基本命令。

 

编号命令描述说明
1SET key value
此命令设置指定键的值。
2GET key
获取指定键的值。
3GETRANGE key start end
获取存储在键上的字符串的子字符串。
4GETSET key value
设置键的字符串值并返回其旧值。
5GETBIT key offset
返回在键处存储的字符串值中偏移处的位值。
6MGET key1 [key2..]
获取所有给定键的值。
7SETBIT key offset value
存储在键上的字符串值中设置或清除偏移处的位。
8SETEX key seconds value
使用键和到期时间来设置值。
9SETNX key value
设置键的值,仅当键不存在时。
10SETRANGE key offset value
在指定偏移处开始的键处覆盖字符串的一部分。
11STRLEN key
获取存储在键中的值的长度。
12MSET key value [key value …]
为多个键分别设置它们的值。
13MSETNX key value [key value …]
为多个键分别设置它们的值,仅当键不存在时。
14PSETEX key milliseconds value
设置键的值和到期时间(以毫秒为单位)。
15INCR key
将键的整数值增加1。
16INCRBY key increment
将键的整数值按给定的数值增加。
17INCRBYFLOAT key increment
将键的浮点值按给定的数值增加。
18DECR key
将键的整数值减1。
19DECRBY key decrement
按给定数值减少键的整数值。
20APPEND key value
将指定值附加到键。
 

 

 Redis连接命令

 下表列出了与Redis连接相关的一些基本命令。

 

序号命令说明
1AUTH password
使用给定的密码验证服务器。
2ECHO message
打印给定的字符串信息。
3PING
检查服务器是否正在运行。
4QUIT
关闭当前连接。
5SELECT index
更改当前连接的所选数据库。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: