Java使用Memcached和Redis简单示例
package xmq.study.memcached; import java.io.IOException;
import java.net.InetSocketAddress; import net.spy.memcached.MemcachedClient; /**
* memcached test
* @author 943567518@qq.com
*
*/
public class Memcached { public static void main(String[] args) {
//导入spymemcached-3.17.jar
//dos下启动memcached:
//1、进入解压目录 ;2、启动命令memcached.exe -d start(安装:memcached.exe -d install);3、关闭命令memcached.exe -d stop
MemcachedClient mcc=null;
try {
//本地连接
mcc=new MemcachedClient(new InetSocketAddress("127.0.0.1",11211));
//添加
add(mcc, "xmq", 0, "添加");
System.out.println("添加:\t"+get(mcc,"xmq"));
//追加
append(mcc, "xmq","追加");
System.out.println("追加:\t"+get(mcc,"xmq"));
//前置追加
prepend(mcc, "xmq","前置追加");
System.out.println("前置追加:\t"+get(mcc,"xmq"));
//替换
replace(mcc, "xmq",0,"替换");
System.out.println("替换:\t"+get(mcc,"xmq"));
//删除
delete(mcc, "xmq");
System.out.println("删除:\t"+get(mcc,"xmq"));
//自减
add(mcc, "num", 0, "2");
replace(mcc, "num",0,"2");
decr(mcc,"num",1);
System.out.println("自减:\t"+get(mcc,"num"));
//自增
replace(mcc, "num",0,"2");
incr(mcc,"num",1);
System.out.println("自增:\t"+get(mcc,"num"));
//存储java对象
String[] strArr=new String[]{"我","是","字","符","数","组"};
add(mcc,"strArr",0,strArr);
System.out.println("字符数组:\t"+get(mcc,"strArr"));
} catch (IOException e) {
e.printStackTrace();
}finally{
//关闭连接
mcc.shutdown();
}
} /**
* Memcached incr 与 decr 命令用于对已存在的 key(键) 的数字值进行自增或自减操作。
* incr 与 decr 命令操作的数据必须是十进制的32位无符号整数。
* 如果 key 不存在返回 NOT_FOUND,如果键的值不为数字,则返回 CLIENT_ERROR,其他错误返回 ERROR。
* @param mcc
* @param key
* @return
*/
public static void decr(MemcachedClient mcc,String key,int value){
mcc.decr(key,value);
} /**
* Memcached incr 与 decr 命令用于对已存在的 key(键) 的数字值进行自增或自减操作。
* incr 与 decr 命令操作的数据必须是十进制的32位无符号整数。
* 如果 key 不存在返回 NOT_FOUND,如果键的值不为数字,则返回 CLIENT_ERROR,其他错误返回 ERROR。
* @param mcc
* @param key
* @return
*/
public static void incr(MemcachedClient mcc,String key,int value){
mcc.incr(key,value);
} /**
* 获取 CAS 令牌存 的 value(数据值) ,如果 key 不存在,则返回空
* @param mcc
* @param key
* @return
*/
public static void delete(MemcachedClient mcc,String key){
mcc.delete(key);
} /**
* 获取 CAS 令牌存 的 value(数据值) ,如果 key 不存在,则返回空
* @param mcc
* @param key
* @return
*/
public static Object gets(MemcachedClient mcc,String key){
return mcc.gets(key);
} /**
* 获取存储在 key(键) 中的 value(数据值) ,如果 key 不存在,则返回空
* @param mcc
* @param key
* @return
*/
public static Object get(MemcachedClient mcc,String key){
return mcc.get(key);
}
/**
* cas key flags exptime bytes unique_cas_token [noreply]
* value
* 参数说明如下:
* key:键值 key-value 结构中的 key,用于查找缓存值。
* flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 。
* exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
* bytes:在缓存中存储的字节数
* unique_cas_token通过 gets 命令获取的一个唯一的64位值。
* noreply(可选): 该参数告知服务器不需要返回数据
* value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)
*
* @param mcc
* @param key
* @param value
*/
public static void cas(MemcachedClient mcc,String key,Object value){
mcc.cas(key, mcc.gets(key).getCas(), value);
}
/**
* prepend 命令的基本语法格式如下:
* prepend key flags exptime bytes [noreply]
* value
* 参数说明如下:
* key:键值 key-value 结构中的 key,用于查找缓存值。
* flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 。
* exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
* bytes:在缓存中存储的字节数
* noreply(可选): 该参数告知服务器不需要返回数据
* value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)
* @param mcc
* @param key
* @param value
*/
public static void prepend(MemcachedClient mcc,String key,Object value){
mcc.prepend(key, value);
} /**
* append 命令的基本语法格式如下:
* append key flags exptime bytes [noreply]
* value
* 参数说明如下:
* key:键值 key-value 结构中的 key,用于查找缓存值。
* flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 。
* exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
* bytes:在缓存中存储的字节数
* noreply(可选): 该参数告知服务器不需要返回数据
* value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)
* @param mcc
* @param key
* @param value
*/
public static void append(MemcachedClient mcc,String key,Object value){
mcc.append(key, value);
} /**
* replace 命令的基本语法格式如下:
* replace key flags exptime bytes [noreply]
* value
* 参数说明如下:
* key:键值 key-value 结构中的 key,用于查找缓存值。
* flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 。
* exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
* bytes:在缓存中存储的字节数
* noreply(可选): 该参数告知服务器不需要返回数据
* value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)
* @param mcc
* @param key
* @param exptime
* @param value
*/
public static void replace(MemcachedClient mcc,String key,int exptime,Object value){
mcc.replace(key, exptime, value);
} /**
* add 命令的基本语法格式如下:
* add key flags exptime bytes [noreply]
* value
* 参数说明如下:
* key:键值 key-value 结构中的 key,用于查找缓存值。
* flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 。
* exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
* bytes:在缓存中存储的字节数
* noreply(可选): 该参数告知服务器不需要返回数据
* value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)
* @param mcc
* @param key
* @param exptime
* @param value
*/
public static void add(MemcachedClient mcc,String key,int exptime,Object value){
mcc.add(key, exptime, value);
} /**
* set 命令的基本语法格式如下:
* set key flags exptime bytes [noreply]
* value
* 参数说明如下:
* key:键值 key-value 结构中的 key,用于查找缓存值。
* flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 。
* exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
* bytes:在缓存中存储的字节数
* noreply(可选): 该参数告知服务器不需要返回数据
* value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)
* @param mcc
* @param key
* @param exptime
* @param value
*/
public static void set(MemcachedClient mcc,String key,int exptime,Object value){
mcc.set(key, exptime, value);
}
}
package xmq.study.redis; import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set; import redis.clients.jedis.Jedis; /**
* redis test
* @author 943567518@qq.com
*
*/
public class Redis {
public static void main(String[] args) {
//导入jedis-2.9-0.jar
//dos下启动redis:
//1、进入解压目录 ;2、启动命令redis-server.exe redis.windows.conf
Jedis jedis=new Jedis("127.0.0.1",6379);
//set&get&del
jedis.set("xmq-set-get-del","set数据1");
System.out.println("获取xmq-set-get-del:"+jedis.get("xmq-set-get-del"));
jedis.del("xmq-set-get-del");
System.out.println("获取xmq-set-get-del:"+jedis.get("xmq-set-get-del"));
//添加string
jedis.set("xmq", "添加");
System.out.println(jedis.get("xmq"));
//存储数据到列表中
jedis.lpush("xmq-list", "列表数据1");
jedis.lpush("xmq-list", "列表数据2");
jedis.lpush("xmq-list", "列表数据3");
List<String> list = jedis.lrange("xmq-list", 0 ,2);
for(int i=0; i<list.size(); i++) {
System.out.println("列表项为: "+list.get(i));
}
//map测试
Map<String,String> map=new HashMap<String,String>();
map.put("xmq-map-key1", "map数据1");
map.put("xmq-map-key2", "map数据2");
map.put("xmq-map-key3", "map数据3");
jedis.hmset("xmq-map",map);
Set<String> xmqMapKeys =jedis.hkeys("xmq-map");
System.out.println("获取xmq-map:"+jedis.hgetAll("xmq-map"));
Iterator<String> xmqMapIt=xmqMapKeys.iterator() ;
while(xmqMapIt.hasNext()){
String key = xmqMapIt.next();
System.out.println("获取xmq-map-key项:"+key);
}
// 获取key数据并输出
Set<String> keys = jedis.keys("*");
Iterator<String> it=keys.iterator() ;
while(it.hasNext()){
String key = it.next();
System.out.println("获取key项:"+key);
jedis.del(key);
System.out.println("删除key项:"+key);
}
//保存数据,将在 redis 安装目录中创建dump.rdb文件。
//jedis.save();
}
}
Java使用Memcached和Redis简单示例的更多相关文章
- JAVA使用jdbc连接MYSQL简单示例
以下展示的为JAVA使用jdbc连接MYSQL简单示例: import java.sql.DriverManager; import java.sql.ResultSet; import java.s ...
- java读取ACCESS数据库的简单示例
java读取ACCESS数据库的简单示例 虽然简单,对初学者来说,如果没有一段可以成功执行的代码供参考,还真难调试 先用ACCESS建一个数据库 DB1.MDB,里面有一表"table1&q ...
- Java操作redis简单示例
第一:安装Redis 首先我们要安装Redis,就像我们操作数据库一样,在操作之前肯定要先创建好数据库的环境. Redis的下载可以百度一下,或者打开下面的下载链接: https:/ ...
- Java UDP网络编程 - 最简单示例
UDP也是网络通讯中的一个重要协议,与TCP区别可参见浅谈TCP/IP 和 UDP的区别,本文就对Java UDP通讯做一个简单例子介绍 服务端: package wyf; import java.i ...
- java几种常用设计模式简单示例
1.单例设计模式 所谓单例设计模式简单说就是无论程序如何运行,采用单例设计模式的类(Singleton类)永远只会有一个实例化对象产生.具体实现步骤如下: (1) 将采用单例设计模式的类的构造方法私有 ...
- java集成memcached、redis防止缓存穿透
下载相关jar,安装Memcached,安装教程:http://www.runoob.com/memcached/memcached-install.html spring配置memcached &l ...
- redis -- python操作连接redis简单示例
1.先安装 redis,pyredis sudo pip install redis sudo pip install python-redis 2.示例: importredis >>& ...
- Redis简单示例
1.Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. 从2010年3月15日起,Redis的开发工作由VMwa ...
- springboot整合redis简单示例
一.项目架构 二.项目内容 1.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q ...
随机推荐
- git忽略文件权限的检查
在linux上配置了一个samba服务器,方便在linux上通过ide修改代码,然后发现一个很烦人的问题,就是没有修改权限,在使用命令 chmod 777 filename后可以修改了,然而使用git ...
- js控制页面跳转,清缓存,强制刷新页面
单看标题,必定满脸蒙13. 其实,想表达的仅仅是,在js中通过window.location.href控制页面跳转时,有时会跳转至缓存页面,并没有真正去请求要跳转的地址,导致页面数据未能及时加载刷新. ...
- 忘记dba用户密码,利用SQLPlus重置dba密码
打开SQL Plus 输入用户名: sys as sysdba 输入口令:可直接回车 连接到: Oracle Database 11g Enterprise Edition Release 11.2. ...
- Farseer.net轻量级ORM开源框架说明及链接索引
项目简介 基于.net framework 4 开发. 基于Lambda表达式快速上手的ORM框架. 参考Entity Framework的调用方式. 基于Database First模式. POCO ...
- 迅为iTOP-4418嵌入式开发板初体验
iTOP-4418开发板预装 Android4.4.4 系统, 支持9.7 寸.7 寸.4.3 寸屏幕. 参数:核心板参数 尺寸 50mm*60mm高度 核心板连接器为1.5mmCPU ARM Cor ...
- hdfs深入:07、hdfs的文件的读取过程
详细步骤解析 1. Client向NameNode发起RPC请求,来确定请求文件block所在的位置: 2. NameNode会视情况返回文件的部分或者全部block列表,对于每个block,Name ...
- hdfs深入:03、hdfs的架构以及副本机制和block块存储
HDFS分布式文件系统设计目标 1. 硬件错误 由于集群很多时候由数量众多的廉价机组成,使得硬件错误成为常态 2. 数据流访问 所有应用以流的方式访问数 ...
- C#导出word [无规则表结构+模板遇到的坑]
1)当然可以考虑使用aspose.word.使用书签替换的方案替换模板中对应的书签值. 2)但是我使用了Interop.Word,下面记录使用类及要注意的地方 3)使用类 Report.cs 来自于网 ...
- noi.ac NOIP2018 全国热身赛 第二场 T3 color
[题解] 我们可以发现每次修改之后叶子结点到根的路径最多分为两段:一段白色或者黑色,上面接另一段灰色的.二分+倍增找到分界点,然后更新答案即可. check的时候只需要判断当前节点对应的叶子结点的区间 ...
- UVa 12333 - Revenge of Fibonacci manweifc(模拟加法竖式 & 字典树)
题意: 给定n个(n<=40)数字, 求100000个以内有没有前面n个数字符合给定的数字的fibonacci项, 如果有, 给出最小的fibonacci项, 如果没有, 输出-1. 分析: 可 ...