Java 中使用 Redis

来源:互联网 发布:淘宝上冲网易宝靠谱吗 编辑:程序博客网 时间:2024/05/21 10:57
 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。

Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

Redis 与其他 key - value 缓存产品有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。

Redis 优势

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

Redis与其他key-value存储有什么不同?

  • Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。

  • Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

  • Window 下安装

    下载地址:https://github.com/MSOpenTech/redis/releases。

    Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我们下载 Redis-x64-xxx.zip压缩包到 C 盘,解压后,将文件夹重新命名为redis

    打开一个 cmd 窗口 使用cd命令切换目录到 C:\redis 运行 redis-server.exe redis.windows.conf 。

    如果想方便的话,可以把 redis 的路径加到系统的环境变量里,这样就省得再输路径了,后面的那个 redis.windows.conf 可以省略,如果省略,会启用默认的。输入之后,会显示如下界面:

    Redis 安装

    这时候另启一个cmd窗口,原来的不要关闭,不然就无法访问服务端了。

    切换到redis目录下运行 redis-cli.exe -h 127.0.0.1 -p 6379 。

    设置键值对 set myKey abc

    取出键值对 get myKey

    Redis 安装


    Linux 下安装

    下载地址:http://redis.io/download,下载最新文档版本。

    本教程使用的最新文档版本为 2.8.17,下载并安装:

    $ wget http://download.redis.io/releases/redis-2.8.17.tar.gz$ tar xzf redis-2.8.17.tar.gz$ cd redis-2.8.17$ make

    make完后 redis-2.8.17目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli,两个程序位于安装目录 src 目录下:

    下面启动redis服务.

    $ cd src$ ./redis-server

    注意这种方式启动redis 使用的是默认配置。也可以通过启动参数告诉redis使用指定配置文件使用下面命令启动。

    $ cd src$ ./redis-server redis.conf

    redis.conf是一个默认的配置文件。我们可以根据需要使用自己的配置文件。

    启动redis服务进程后,就可以使用测试客户端程序redis-cli和redis服务交互了。 比如:

    $ cd src$ ./redis-cliredis> set foo barOKredis> get foo"bar"

    Ubuntu 下安装

    在 Ubuntu 系统安装 Redi 可以使用以下命令:

    $sudo apt-get update$sudo apt-get install redis-server

    启动 Redis

    $ redis-server

    查看 redis 是否启动?

    $ redis-cli

    以上命令将打开以下终端:

    redis 127.0.0.1:6379>

    127.0.0.1 是本机 IP ,6379 是 redis 服务端口。现在我们输入 PING 命令。

    redis 127.0.0.1:6379> pingPONG

    以上说明我们已经成功安装了redis。

  • Redis 命令用于在 redis 服务上执行操作。

    要在 redis 服务上执行命令需要一个 redis 客户端。Redis 客户端在我们之前下载的的 redis 的安装包中。

    语法

    Redis 客户端的基本语法为:

    $ redis-cli

    实例

    以下实例讲解了如何启动 redis 客户端:

    启动 redis 客户端,打开终端并输入命令 redis-cli。该命令会连接本地的 redis 服务。

    $redis-cliredis 127.0.0.1:6379>redis 127.0.0.1:6379> PINGPONG

    在以上实例中我们连接到本地的 redis 服务并执行 PING 命令,该命令用于检测 redis 服务是否启动。


    在远程服务上执行命令

    如果需要在远程 redis 服务上执行命令,同样我们使用的也是 redis-cli 命令。

    语法

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

    实例

    以下实例演示了如何连接到主机为 127.0.0.1,端口为 6379 ,密码为 mypass 的 redis 服务上。

    $redis-cli -h 127.0.0.1 -p 6379 -a "mypass"redis 127.0.0.1:6379>redis 127.0.0.1:6379> PINGPONG
  • Redis 键命令用于管理 redis 的键。

    语法

    Redis 键命令的基本语法如下:

    redis 127.0.0.1:6379> COMMAND KEY_NAME

    实例

    redis 127.0.0.1:6379> SET runoobkey redisOKredis 127.0.0.1:6379> DEL runoobkey(integer) 1

    在以上实例中 DEL 是一个命令, runoobkey 是一个键。 如果键被删除成功,命令执行后输出(integer) 1,否则将输出 (integer) 0


    Redis keys 命令

    下表给出了与 Redis 键相关的基本命令:

    序号命令及描述1DEL key
    该命令用于在 key 存在时删除 key。2DUMP key 
    序列化给定 key ,并返回被序列化的值。3EXISTS key 
    检查给定 key 是否存在。4EXPIRE key seconds
    为给定 key 设置过期时间。5EXPIREAT key timestamp 
    EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。6PEXPIRE key milliseconds 
    设置 key 的过期时间以毫秒计。7PEXPIREAT key milliseconds-timestamp 
    设置 key 过期时间的时间戳(unix timestamp) 以毫秒计8KEYS pattern 
    查找所有符合给定模式( pattern)的 key 。9MOVE key db 
    将当前数据库的 key 移动到给定的数据库 db 当中。10PERSIST key 
    移除 key 的过期时间,key 将持久保持。11PTTL key 
    以毫秒为单位返回 key 的剩余的过期时间。12TTL key 
    以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。13RANDOMKEY 
    从当前数据库中随机返回一个 key 。14RENAME key newkey 
    修改 key 的名称15RENAMENX key newkey 
    仅当 newkey 不存在时,将 key 改名为 newkey 。16

    TYPE key 
    返回 key 所储存的值的类型。

    Redis 字符串数据类型的相关命令用于管理 redis 字符串值,基本语法如下:

    语法

    redis 127.0.0.1:6379> COMMAND KEY_NAME

    实例

    redis 127.0.0.1:6379> SET runoobkey redisOKredis 127.0.0.1:6379> GET runoobkey"redis"

    在以上实例中我们使用了 SET 和 GET 命令,键为 runoobkey


    Redis 字符串命令

    下表列出了常用的 redis 字符串命令:

    序号命令及描述1SET key value 
    设置指定 key 的值2GET key 
    获取指定 key 的值。3GETRANGE key start end 
    返回 key 中字符串值的子字符4GETSET key value
    将给定 key 的值设为 value ,并返回 key 的旧值(old value)。5GETBIT key offset
    对 key 所储存的字符串值,获取指定偏移量上的位(bit)。6MGET key1 [key2..]
    获取所有(一个或多个)给定 key 的值。7SETBIT key offset value
    对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。8SETEX key seconds value
    将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。9SETNX key value
    只有在 key 不存在时设置 key 的值。10SETRANGE key offset value
    用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。11STRLEN key
    返回 key 所储存的字符串值的长度。12MSET key value [key value ...]
    同时设置一个或多个 key-value 对。13MSETNX key value [key value ...] 
    同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。14PSETEX key milliseconds value
    这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。15INCR key
    将 key 中储存的数字值增一。16INCRBY key increment
    将 key 所储存的值加上给定的增量值(increment) 。17INCRBYFLOAT key increment
    将 key 所储存的值加上给定的浮点增量值(increment) 。18DECR key
    将 key 中储存的数字值减一。19DECRBY key decrement
    key 所储存的值减去给定的减量值(decrement) 。 

    APPEND key value
    如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。



    Java 中使用 Redis

    安装

    开始在 Java 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 Java redis 驱动,且你的机器上能正常使用 Java。 Java的安装配置可以参考我们的 Java开发环境配置 接下来让我们安装 Java redis 驱动:

    • 首先你需要下载驱动包 下载 jedis.jar,确保下载最新驱动包。
    • 在你的 classpath 中包含该驱动包

    连接到 redis 服务

    实例

    import redis.clients.jedis.Jedispublic class RedisJava { public static void main(String[] args) {//连接本地的 Redis 服务 Jedis jedis = new Jedis("localhost")System.out.println("连接成功");//查看服务是否运行 System.out.println("服务正在运行: "+jedis.ping())}}

    编译以上 Java 程序,确保驱动包的路径是正确的。

    连接成功服务正在运行: PONG

    Redis Java String(字符串) 实例

    实例

    import redis.clients.jedis.Jedispublic class RedisStringJava { public static void main(String[]args) { //连接本地的 Redis 服务 Jedis jedis = new Jedis("localhost")System.out.println("连接成功")//设置 redis 字符串数据 jedis.set("runoobkey""www.runoob.com")// 获取存储的数据并输出 System.out.println("redis 存储的字符串为: "jedis.get("runoobkey"))}}

    编译以上程序。

    连接成功redis 存储的字符串为: www.runoob.com

    Redis Java List(列表) 实例

    实例

    import java.util.List;import redis.clients.jedis.Jedispublic class RedisListJava { public staticvoid main(String[] args) { //连接本地的 Redis 服务 Jedis jedis = new Jedis("localhost");System.out.println("连接成功")//存储数据到列表中 jedis.lpush("site-list""Runoob");jedis.lpush("site-list""Google")jedis.lpush("site-list""Taobao")// 获取存储的数据并输出List<Stringlist = jedis.lrange("site-list"0 ,2)for(int i=0i<list.size()i++) {System.out.println("列表项为: "+list.get(i))} }}

    编译以上程序。

    连接成功列表项为: Taobao列表项为: Google列表项为: Runoob

    Redis Java Keys 实例

    实例

    import java.util.Iterator;import java.util.Set;import redis.clients.jedis.Jedispublic classRedisKeyJava { public static void main(String[] args) { //连接本地的 Redis 服务 Jedis jedis =new Jedis("localhost")System.out.println("连接成功")// 获取数据并输出 Set<Stringkeys =jedis.keys("*")Iterator<Stringit=keys.iterator() ; while(it.hasNext()){ String key = it.next();System.out.println(key)} }}

    编译以上程序。

原创粉丝点击