Java 中使用 Redis

    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-cli
    redis> set foo bar
    OK
    redis> 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> ping
    PONG

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

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

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

    语法

    Redis 客户端的基本语法为:

    $ redis-cli

    实例

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

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

    $redis-cli
    redis 127.0.0.1:6379>
    redis 127.0.0.1:6379> PING
    
    PONG

    在以上实例中我们连接到本地的 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> PING
    
    PONG
  • Redis 键命令用于管理 redis 的键。

    语法

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

    redis 127.0.0.1:6379> COMMAND KEY_NAME

    实例

    redis 127.0.0.1:6379> SET runoobkey redis
    OK
    redis 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 redis
    OK
    redis 127.0.0.1:6379> GET runoobkey
    "redis"
    

    在以上实例中我们使用了 SETGET 命令,键为 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 . Jedis ; public 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 . Jedis ; public 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 . Jedis ; public class RedisListJava { public static void 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 < String > list = jedis . lrange ( " site-list " , 0 , 2 ) ; for ( int i = 0 ; i < 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 . Jedis ; public class RedisKeyJava { public static void main ( String [ ] args ) { // 连接本地的 Redis 服务 Jedis jedis = new Jedis ( " localhost " ) ; System . out . println ( " 连接成功 " ) ; // 获取数据并输出 Set < String > keys = jedis . keys ( " * " ) ; Iterator < String > it = keys . iterator ( ) ; while ( it . hasNext ( ) ) { String key = it . next ( ) ; System . out . println ( key ) ; } } }

    编译以上程序。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值