这里先说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服务。
服务启动成功状态
启动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
for(int i=0;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;
import 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
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。
下表列出了与键相关的一些基本命令。
编号 | 命令 | 描述 |
1 | DEL key | 此命令删除一个指定键(如果存在)。 |
2 | DUMP key |
此命令返回存储在指定键的值的序列化版本。 |
3 | EXISTS key |
此命令检查键是否存在。 |
4 | EXPIRE key seconds |
设置键在指定时间秒数之后到期/过期。 |
5 | EXPIREAT key timestamp |
设置在指定时间戳之后键到期/过期。这里的时间是Unix时间戳格式。 |
6 | PEXPIRE key milliseconds |
设置键的到期时间(以毫秒为单位)。 |
7 | PEXPIREAT key milliseconds-timestamp |
以Unix时间戳形式来设置键的到期时间(以毫秒为单位)。 |
8 | KEYS pattern |
查找与指定模式匹配的所有键。 |
9 | MOVE key db |
将键移动到另一个数据库。 |
10 | PERSIST key |
删除指定键的过期时间,得永生。 |
11 | PTTL key |
获取键的剩余到期时间。 |
12 | RANDOMKEY |
从Redis返回一个随机的键。 |
13 | RENAME key newkey |
更改键的名称。 |
14 | PTTL key |
获取键到期的剩余时间(以毫秒为单位)。 |
15 | RENAMENX key newkey | 如果新键不存在,重命名键。 |
16 | TYPE 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中管理字符串的基本命令。
编号 | 命令 | 描述说明 |
1 | SET key value |
此命令设置指定键的值。 |
2 | GET key |
获取指定键的值。 |
3 | GETRANGE key start end |
获取存储在键上的字符串的子字符串。 |
4 | GETSET key value |
设置键的字符串值并返回其旧值。 |
5 | GETBIT key offset |
返回在键处存储的字符串值中偏移处的位值。 |
6 | MGET key1 [key2..] |
获取所有给定键的值。 |
7 | SETBIT key offset value |
存储在键上的字符串值中设置或清除偏移处的位。 |
8 | SETEX key seconds value |
使用键和到期时间来设置值。 |
9 | SETNX key value |
设置键的值,仅当键不存在时。 |
10 | SETRANGE key offset value |
在指定偏移处开始的键处覆盖字符串的一部分。 |
11 | STRLEN key |
获取存储在键中的值的长度。 |
12 | MSET key value [key value …] |
为多个键分别设置它们的值。 |
13 | MSETNX key value [key value …] |
为多个键分别设置它们的值,仅当键不存在时。 |
14 | PSETEX key milliseconds value |
设置键的值和到期时间(以毫秒为单位)。 |
15 | INCR key |
将键的整数值增加1。 |
16 | INCRBY key increment |
将键的整数值按给定的数值增加。 |
17 | INCRBYFLOAT key increment |
将键的浮点值按给定的数值增加。 |
18 | DECR key |
将键的整数值减1。 |
19 | DECRBY key decrement |
按给定数值减少键的整数值。 |
20 | APPEND key value |
将指定值附加到键。 |
Redis连接命令
下表列出了与Redis连接相关的一些基本命令。
序号 | 命令 | 说明 |
1 | AUTH password |
使用给定的密码验证服务器。 |
2 | ECHO message |
打印给定的字符串信息。 |
3 | PING |
检查服务器是否正在运行。 |
4 | QUIT |
关闭当前连接。 |
5 | SELECT index |
更改当前连接的所选数据库。 |