Redis教程 —— Java操作Redis增删改查(基础)

有关Windows下Redis的安装和使用,请参考我的上一篇文章:http://www.youcl.com/article/1120.html

Java操作redis

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

连接到 redis 服务测试

运行命令之前,开启redis服务

import redis.clients.jedis.Jedis;public class RedisJava {
   public static void main(String[] args) {
      //连接本地的 Redis 服务
      Jedis jedis = new Jedis("localhost");
      System.out.println("Connection to server sucessfully");
      //查看服务是否运行
      System.out.println("Server is running: "+jedis.ping());
 }}
 
 输出
Connection to server sucessfully
Server is running: PONG
# Server
redis_version:3.2.100
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:dd26f1f93c5130ee
redis_mode:standalone
os:Windows  
arch_bits:64
multiplexing_api:WinSock_IOCP
process_id:16928
run_id:1cbe662389106abbaf62f6e518e3a7744be44731
tcp_port:6379
uptime_in_seconds:245
uptime_in_days:0
hz:10
lru_clock:1425135
executable:D:\Program Files\Redis\"D:\Program Files\Redis\redis-server.exe"
config_file:D:\Program Files\Redis\redis.windows-service.conf

# Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0

# Memory
used_memory:690352
used_memory_human:674.17K
used_memory_rss:631576
used_memory_rss_human:616.77K
used_memory_peak:690352
used_memory_peak_human:674.17K
total_system_memory:0
total_system_memory_human:0B
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:104857600
maxmemory_human:100.00M
maxmemory_policy:noeviction
mem_fragmentation_ratio:0.91
mem_allocator:jemalloc-3.6.0

# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1477819898
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:-1
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok

# Stats
total_connections_received:1
total_commands_processed:1
instantaneous_ops_per_sec:0
total_net_input_bytes:28
total_net_output_bytes:7
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0
migrate_cached_sockets:0

# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

# CPU
used_cpu_sys:0.05
used_cpu_user:0.08
used_cpu_sys_children:0.00
used_cpu_user_children:0.00

# Cluster
cluster_enabled:0

# Keyspace

Java redis 操作字符串

public static void main(String[] args) {
    // 连接本地的 Redis 服务
    Jedis jedis = new Jedis("localhost");
    System.out.println("Connection to server sucessfully");

    // -----添加数据----------
    jedis.set("name", "X-rapido");  
    System.out.println(jedis.get("name"));    

    // -----修改数据----------
    // 1、在原来基础上修改
    jedis.append("name", "youcl.com");
    System.out.println(jedis.get("name"));

    // 2、直接覆盖原来的数据
    jedis.set("name", "优客志");
    System.out.println(jedis.get("name"));

    // 删除key对应的记录
    jedis.del("name");
    System.out.println(jedis.get("name"));    // 执行结果:null

    /**
     * mset相当于 jedis.set("name","优客志"); jedis.set("domain","youcl.com");
     */
    jedis.mset("name", "优客志", "domain", "youcl.com");
    System.out.println(jedis.mget("name", "domain"));
}

输出
Connection to server sucessfully
X-rapido
X-rapidoyoucl.com
优客志
null
[优客志, youcl.com

Java redis操作Map

public static void main(String[] args) {
    // 连接本地的 Redis 服务
    Jedis jedis = new Jedis("localhost");
    System.out.println("Connection to server sucessfully");

    Map<String, String> user = new HashMap<String, String>();
    user.put("name", "X-rapido");
    user.put("pwd", "password");
    jedis.hmset("user", user);
    // 取出user中的name,执行结果:[X-rapido]-->注意结果是一个泛型的List
    // 第一个参数是存入redis中map对象的key,后面跟的是放入map中的对象的key,后面的key可以跟多个,是可变参数
    List<String> rsmap = jedis.hmget("user", "name");
    System.out.println(rsmap);

    // 删除map中的某个键值
    // jedis.hdel("user","pwd");
    System.out.println(jedis.hmget("user", "pwd")); // 因为删除了,所以返回的是null
    System.out.println(jedis.hlen("user"));   // 返回key为user的键中存放的值的个数1
    System.out.println(jedis.exists("user")); // 是否存在key为user的记录 返回true
    System.out.println(jedis.hkeys("user"));  // 返回map对象中的所有key [pwd, name]
    System.out.println(jedis.hvals("user"));  // 返回map对象中的所有value [X-rapido, password]

    Iterator<String> iter = jedis.hkeys("user").iterator();
    while (iter.hasNext()) {
        String key = iter.next();
        System.out.println(key + ":" + jedis.hmget("user", key));
    }

}

操作
Connection to server sucessfully
[X-rapido]
[password]
2
true
[pwd, name]
[password, X-rapido]
pwd:[password]
name:[X-rapido]

Java jedis操作Set

public static void main(String[] args) {
    // 连接本地的 Redis 服务
    Jedis jedis = new Jedis("localhost");
    System.out.println("Connection to server sucessfully");

    // 添加
    jedis.sadd("sname", "X-rapido");
    jedis.sadd("sname", "youcl.com");
    jedis.sadd("sname", "优客志");
    jedis.sadd("sanme", "noname");
    // 移除noname
    jedis.srem("sname", "noname");
    System.out.println(jedis.smembers("sname"));              // 获取所有加入的value
    System.out.println(jedis.sismember("sname", "X-rapido"));   // 判断 X-rapido,是否是sname集合的元素
    System.out.println(jedis.srandmember("sname"));
    System.out.println(jedis.scard("sname")); // 返回集合的元素个数
}

操作
Connection to server sucessfully
[X-rapido, 优客志, youcl.com]
true
X-rapido
3

Redis Java List(列表) 实例

public static void main(String[] args) {
    // 连接本地的 Redis 服务
    Jedis jedis = new Jedis("localhost");
    System.out.println("Connection to server sucessfully");
    // 存储数据到列表中
    jedis.lpush("tutorial-list", "Redis");
    jedis.lpush("tutorial-list", "Mongodb");
    jedis.lpush("tutorial-list", "Mysql");
    // 获取存储的数据并输出
    List<String> list = jedis.lrange("tutorial-list", 0, 5);
    for (int i = 0; i < list.size(); i++) {
        System.out.println("Stored string in redis:: " + list.get(i));
    }
}

输出
Connection to server sucessfully
Stored string in redis:: Mysql
Stored string in redis:: Mongodb
Stored string in redis:: Redis

 jedis操作list介绍

 lpush(key)  在key对应list的头部添加字符串元素,返回1表示成功,0表示key存在且不是list类型
 rpush(key) 同上,在尾部添加
 llen(key) 返回key对应list的长度,key不存在返回0,如果key对应类型不是list返回错误
 lrange(key,start,end) 返回指定区间内的元素,下标从0开始,负值表示从后面计算,-1表示倒数第一个元素 ,key不存在返回空列表
 ltrim(key,start,end) 截取list,保留指定区间内元素,成功返回1,key不存在返回错误
 lset( key,index,value)  设置list中指定下标的元素值,成功返回1,key或者下标不存在返回错误
 lrem(key,count,value) 从key对应list中删除count个和value相同的元素。count为0时候删除全部
 lpop(key) 从list的头部删除元素,并返回删除元素。如果key对应list不存在或者是空返回nil,如果key对应值不是list返回错误
 rpop(key) 同上,但是从尾部删除

Redis Java Keys 实例(遍历所有key)

public static void main(String[] args) {
    // 连接本地的 Redis 服务
    Jedis jedis = new Jedis("localhost");
    System.out.println("Connection to server sucessfully");

    // 获取数据并输出
    Set<String> lists = jedis.keys("*");
    for (String str : lists) {
        System.out.println("List of stored keys:: " + str);
    }
}

输出
Connection to server sucessfully
List of stored keys:: sex
List of stored keys:: name
List of stored keys:: age

其他示例

public static void main(String[] args) throws InterruptedException {
    // 连接本地的 Redis 服务
    Jedis jedis = new Jedis("localhost");
    System.out.println("Connection to server sucessfully");

    //keys中传入的可以用通配符
    System.out.println(jedis.keys("*"));      //返回当前库中所有的key 
    System.out.println(jedis.keys("*name"));  //返回的sname   [sname, name]
    System.out.println(jedis.del("sanmdde")); //删除key为sanmdde的对象  删除成功返回1 删除失败(或者不存在)返回 0
    System.out.println(jedis.ttl("sname"));       //返回给定key的有效时间,如果是-1则表示永远有效
    jedis.setex("timekey", 10, "min");          //通过此方法,可以指定key的存活(有效时间) 时间为秒
    Thread.sleep(5000);         //睡眠5秒后,剩余时间将为<=5
    System.out.println(jedis.ttl("timekey"));   //输出结果为5
    jedis.setex("timekey", 1, "min");           //设为1后,下面再看剩余时间就是1了
    System.out.println(jedis.ttl("timekey"));     //输出结果为1
    System.out.println(jedis.exists("key"));  //检查key是否存在
    System.out.println(jedis.rename("timekey","time"));
    System.out.println(jedis.get("timekey")); //因为移除,返回为null
    System.out.println(jedis.get("time"));        //因为将timekey 重命名为time 所以可以取得值 min

    //jedis 排序
    //注意,此处的rpush和lpush是List的操作。是一个双向链表(但从表现来看的)
    jedis.del("a");//先清除数据,再加入数据进行测试
    jedis.rpush("a", "1");
    jedis.lpush("a","6");
    jedis.lpush("a","3");
    jedis.lpush("a","9");
    System.out.println(jedis.lrange("a",0,-1));   // [9, 3, 6, 1]
    System.out.println(jedis.sort("a"));      //[1, 3, 6, 9]  //输入排序后结果
    System.out.println(jedis.lrange("a",0,-1));
}
输出
Connection to server sucessfully
[sex, sanme, name, age, domain, sname, user]
[sname, name]
0
-1
5
1
false
OK
null
min
[9, 3, 6, 1]
[1, 3, 6, 9]
[9, 3, 6, 1]

相关阅读

Redis教程 —— redis简介:

Redis教程 —— windows下redis的安装使用教程 :https://www.youcl.com/info/3056

Redis教程 —— Redis的密码设置:

a    Redis教程 —— redis常用命令示例:

Redis教程 —— redis常用命令速查一览表:

Redis教程 —— Java操作Redis增删改查 :https://www.youcl.com/info/2470

赞(52) 打赏
未经允许不得转载:优客志 » JAVA开发
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏