如果我们使用Java操作Redis, 需要确保已经安装了 redis 服务及 Java redis 驱动。

Maven项目可以直接在pom.xml中加入jedis包驱动:

        <dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.</version>
</dependency>

Jedis中操作String,List,Set,Map,以及集合排序

package com.ww.exercise;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set; import org.junit.Before;
import org.junit.Test; import redis.clients.jedis.Jedis; /**
* 练习redis对接java
* @author 旺旺
*/
public class RedisExercise { private static Jedis jedis; /*public static void setJedis() {
//连接到本地redis服务器
jedis = new Jedis("127.0.0.1",6379);
//验证用户密码
jedis.auth("zww");
System.out.println("登入Redis数据库");
}*/ public static void main(String[] args) {
jedis = new Jedis("127.0.0.1",);
//验证用户密码
jedis.auth("zww");
System.out.println("登入Redis数据库");
exerciseString();
exerciseHash();
exerciseList();
exerciseSet();
exerciseSSet();
} /**
* 联系String类型的操作
*/
public static void exerciseString() {
//setJedis();
//添加数据
jedis.set("name", "zww");//如果已存在,覆盖
System.out.println("新增." + jedis.get("name")); //拼接数据
jedis.append("nane", " is my name");
System.out.println("拼接." + jedis.get("name")); //删除数据
jedis.del("name");
System.out.println("删除." + jedis.get("name")); //批量新增数据
jedis.mset("name","zww","age","","email","www.ww.cn");
jedis.decr("age");//Redis Decr 命令将 key 中储存的数字值减一。
//如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作。
//如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
//本操作的值限制在 64 位(bit)有符号数字表示之内。
System.out.println("批量." + jedis.get("name")+ jedis.get("age")+ jedis.get("email")); } /**
* 联系Hash类型的操作
*/
@Test
public static void exerciseHash() {
//添加数据
Map<String, String> user = new HashMap<String, String>();
user.put("name", "zww");
user.put("age", "");
user.put("email", "www.ww");
jedis.hmset("user", user);
//取出user中的name,结果是一个泛型的List<String>
//第一个参数是存入redis中map对象的key,后面跟的是放入map中的对象的key,后面的key是可变参数
List<String> users = jedis.hmget("user", "name","age","email");
System.out.println("新增." + users); //拼接数据
jedis.hset("user", "hobby", "guitar");
System.out.println("拼接." + jedis.hmget("user", "name","age","email","hobby")); //拿到hash中所有key,再通过迭代器得到值
Iterator<String> userKey = jedis.hkeys("user").iterator();
while (userKey.hasNext()) {
String key = userKey.next();
System.out.println(key + ":" + jedis.hget("user", key));
} //部分删除数据
jedis.hdel("user", "email");
System.out.println("删除." + jedis.hmget("user", "name","age","email","hobby")); System.out.println("age:" + jedis.hmget("user", "age")); //因为删除了,所以返回的是null
System.out.println("user的键中存放的值的个数:" + jedis.hlen("user")); //返回key为user的键中存放的值的个数
System.out.println("是否存在key为user的记录:" + jedis.exists("user"));//是否存在key为user的记录 返回true
System.out.println("user对象中的所有key:" + jedis.hkeys("user"));//返回user对象中的所有key
System.out.println("user对象中的所有value:" + jedis.hvals("user"));//返回map对象中的所有value //删除整个hash
jedis.del("user");
System.out.println("删除后是否存在key为user的记录:" + jedis.exists("user"));//是否存在key为user的记录 } /**
* 联系List类型的操作
*/
@Test
public static void exerciseList() {
//添加数据
jedis.lpush("framework", "spring");
jedis.lpush("framework", "spring");//可以相同?
jedis.lpush("framework", "mybatis");
jedis.lpush("framework", "struts2");
List<String> framework = jedis.lrange("framework", , -);//结果是一个泛型的List<String>
System.out.println("新增." + framework); //部分删除数据
String pop = jedis.lpop("framework");//移除最左边的数据
System.out.println("移除." + pop);
System.out.println("移除后." + jedis.lrange("framework", , -)); } /**
* 联系Set类型的操作
*/
@Test
public static void exerciseSet() {
//添加数据
jedis.sadd("database", "redis");
jedis.sadd("database", "oracle");
jedis.sadd("database", "mysql");
jedis.sadd("databas", "redis");//可以相同?
Set<String> database = jedis.smembers("database");//结果是一个泛型的Set<String>
System.out.println("新增."+database); //删除
jedis.srem("database","oracle");//移除成员
System.out.println("user中的value:"+jedis.smembers("database"));//获取所有加入user的value
System.out.println("chx是否是user中的元素:"+jedis.sismember("database","redis"));//判断chx是否是user集合中的元素
System.out.println("集合中的一个随机元素:"+jedis.srandmember("database"));//返回集合中的一个随机元素
System.out.println("user中元素的个数:"+jedis.scard("database")); //再来个
jedis.sadd("database1", "redis");
jedis.sadd("database1", "db2");
jedis.sadd("database1", "mysql"); System.out.println("获取两个数据库的交集:"+jedis.sinter("database","database1"));
System.out.println("获取两个数据库的并集:"+jedis.sunion("database","database1")); } /**
* 联系SSet类型的操作
*/
@Test
public static void exerciseSSet() {
//添加数据
jedis.zadd("bat", ,"baidu");
jedis.zadd("bat", ,"ali");
jedis.zadd("bat", ,"tengx");
jedis.zadd("bat", ,"zww");//覆盖
Set<String> database = jedis.zrange("bat", , -);//结果是一个泛型的Set<String>
System.out.println("所有成员:"+database); //删除成员
//jedis.zrem("bat", "zww");
jedis.zremrangeByScore("bat", , );//通过序号删除指定成员
System.out.println("所有成员:"+database); } /**
* 联系 类型的操作
*/
@Test
public void exercise() { } }

Redis连接池

package com.ww.exercise;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig; public final class RedisPool { private static String ADDR = "127.0.0.1"; //服务器IP地址
private static int PORT = ; //服务器端口
private static String PASSW = "zww"; //redis服务器密码 //可用连接实例的最大数目,默认为8;
//如果赋值为-1,则表示不限制,如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)
private static Integer MAX_TOTAL = ;
//控制一个pool最多有多少个状态为idle(空闲)的jedis实例,默认值是8
private static Integer MAX_IDLE = ;
//等待可用连接的最大时间,单位是毫秒,默认值为-1,表示永不超时。
//如果超过等待时间,则直接抛出JedisConnectionException
private static Integer MAX_WAIT_MILLIS = ;
private static Integer TIMEOUT = ;
//在borrow(用)一个jedis实例时,是否提前进行validate(验证)操作;
//如果为true,则得到的jedis实例均是可用的
private static Boolean TEST_ON_BORROW = true;
private static JedisPool jedisPool = null; /**
* 静态块,初始化Redis连接池
*/
static {
try {
JedisPoolConfig conf = new JedisPoolConfig();
/*注意:
在高版本的jedis jar包,比如本版本2.9.0,JedisPoolConfig没有setMaxActive和setMaxWait属性了
这是因为高版本中官方废弃了此方法,用以下两个属性替换。
maxActive ==> maxTotal
maxWait==> maxWaitMillis
*/
conf.setMaxTotal(MAX_TOTAL);
conf.setMaxIdle(MAX_IDLE);
conf.setMaxWaitMillis(MAX_WAIT_MILLIS);
conf.setTestOnBorrow(TEST_ON_BORROW);
jedisPool = new JedisPool(conf,ADDR,PORT,TIMEOUT,PASSW); } catch (Exception e) {
e.printStackTrace();
}
} /**
* 获取Jedis实例
* @return
*/
public synchronized static Jedis getRedis() {
try {
if(jedisPool != null) {
//从线程池获取
Jedis jedis = jedisPool.getResource();
} else {
System.out.println("没有找到jedis池");
return null;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
return null;
} }

看代码,写代码。

Java使用Redis学习笔记的更多相关文章

  1. Redis学习笔记7--Redis管道(pipeline)

    redis是一个cs模式的tcp server,使用和http类似的请求响应协议.一个client可以通过一个socket连接发起多个请求命令.每个请求命令发出后client通常会阻塞并等待redis ...

  2. redis学习笔记(详细)——高级篇

    redis学习笔记(详细)--初级篇 redis学习笔记(详细)--高级篇 redis配置文件介绍 linux环境下配置大于编程 redis 的配置文件位于 Redis 安装目录下,文件名为 redi ...

  3. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  4. redis 学习笔记(6)-cluster集群搭建

    上次写redis的学习笔记还是2014年,一转眼已经快2年过去了,在段时间里,redis最大的变化之一就是cluster功能的正式发布,以前要搞redis集群,得借助一致性hash来自己搞shardi ...

  5. Redis学习笔记~目录

    回到占占推荐博客索引 百度百科 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合). ...

  6. Redis学习笔记4-Redis配置详解

    在Redis中直接启动redis-server服务时, 采用的是默认的配置文件.采用redis-server   xxx.conf 这样的方式可以按照指定的配置文件来运行Redis服务.按照本Redi ...

  7. Redis学习笔记一:数据结构与对象

    1. String(SDS) Redis使用自定义的一种字符串结构SDS来作为字符串的表示. 127.0.0.1:6379> set name liushijie OK 在如上操作中,name( ...

  8. Redis学习笔记之ABC

    Redis学习笔记之ABC Redis命令速查 官方帮助文档 中文版本1 中文版本2(反应速度比较慢) 基本操作 字符串操作 set key value get key 哈希 HMSET user:1 ...

  9. (转)redis 学习笔记(1)-编译、启动、停止

    redis 学习笔记(1)-编译.启动.停止   一.下载.编译 redis是以源码方式发行的,先下载源码,然后在linux下编译 1.1 http://www.redis.io/download 先 ...

随机推荐

  1. 有关 Azure IaaS VM 磁盘以及托管和非托管高级磁盘的常见问题解答

    本文将对有关 Azure 托管磁盘和 Azure 高级存储的一些常见问题进行解答. 托管磁盘 什么是 Azure 托管磁盘? 托管磁盘是一种通过处理存储帐户管理来简化 Azure IaaS VM 的磁 ...

  2. SQL Server FileStream (转载)

    从SQL SERVER 2008开始,SQL SERVER引入了一种新的文件组类型叫FileStream文件组,如下图所示: 那么这种文件组是用来做什么的呢? 以往我们对文件管理有两种方法: 数据库只 ...

  3. webservice安全性浅谈

    原文地址:http://www.cnblogs.com/chhuic/archive/2009/11/19/1606109.html 做项目时,经常会用到WebService来通讯,但WebServi ...

  4. Python抓取zabbix性能监控图

    一.通过查询zabbix db的方式通过主机IP获取到所需要的graphid(比如CPU监控图.内存监控图等,每个图对应一个graphid),最后将图片保存到本地 注:该graph必须要在 scree ...

  5. You have new mail in /var/spool/mail/root 解决烦琐提示的方法

    今天写定时任务时,出现奇怪的提示,有的时候每敲一下回车,也出现奇怪的提示 You have new mail in /var/spool/mail/root 阿西吧........表示很烦...究竟是 ...

  6. 人工智能——Singleton模式

    上次在状态模式中的设计有一个严重的问题,就是如下: voidCTroll::ChageState(CState* pNewState) {        deletem_pCurrentState; ...

  7. IE9 添加事件DOMContentLoaded,方法addEventListener

    IE9 新添加 事件DOMContentLoaded,方法addEventListener

  8. Alpha冲刺报告(2/12)(麻瓜制造者)

    今日任务总结 燃尽图如下: 具体完成情况如下: 江郑: 今天:完成了商品需求的数据库的基本构建. 遇到的问题:对于php的ci框架不熟,操作原理不懂 明天:和队友进行数据库的对接 符天愉: 今天:完成 ...

  9. 026.6 网络编程 tomcat

    ###############Tomcat中相关文件作用    bin:启动关闭服务器的脚本    Conf:配置文件    Lib:Tomcat的jar包,只要部署项目到Tomcat,所有项目可共用 ...

  10. C# ActiveX 网页打包验证自动升级

    原文地址:http://www.cnblogs.com/yilin/p/csharp-activex.html 注意事项:Win10下需要设置兼容模式,F12仿真切换到IE6-8(版本参考——BT90 ...