发布: 更新时间:2023-02-26 13:55:36
本文目录一览:
首先要链接redis客户端
redis-cli
然后要通过key来查找你存的数据,相当于一个数组,有key,有value,通过key来查看value的值。
keys * 注:列出当前redis存储的全部key。
keys W* 注:列出当前redis存储的key名里第一个是“W”的全部key。
找到key名字后,就可以查看key里存了什么值了。
get WXOX 注:WXOX是你查出来的key的名字。
然后就可以看到WXOX里存了什么东西了,可能存了一个字符串,也可能存了一个对象,要是空的话,就会输出nil,意思是啥也没有!
目前在做自动化测试时,设计到需要获取存储在redis中的值,总结了操作代码如下:
需要jar包:jedis-2.7.3.jar、commons-pool2-2.4.1.jar
code如下:
[java]view plaincopy
packagecn.migu.utils;
importjava.util.Iterator;
importjava.util.List;
importcn.migu.base.GlobalSettings;
importredis.clients.jedis.Jedis;
importredis.clients.jedis.JedisPool;
importredis.clients.jedis.JedisPoolConfig;
/**
*Descriptionredis相关操作类
*@authorYanLu
*
*/
publicclassRedisUtil{
privateJedisPoolpool=null;
privateJedisredis=null;
Log4jUtillog=newLog4jUtil(this.getClass().getName());
//构造函数,创建对象时进行初始化
publicRedisUtil(){
if(pool==null){
/*
//池基本配置
//JedisPoolConfigconfig=newJedisPoolConfig();
//最大连接数,默认8个
config.setMaxTotal(20);
//控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。
config.setMaxIdle(5);
//表示当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;
config.setMaxWaitMillis(10000);
//在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
config.setTestOnBorrow(false);
*/
//创建redis连接池
//this.pool=newJedisPool(config,"172.18.173.188",6379);
this.pool=newJedisPool(newJedisPoolConfig(),GlobalSettings.getProperty("redis.master.host"),Integer.parseInt(GlobalSettings.getProperty("redis.master.port")));
//获取Jedis实例
this.redis=pool.getResource();
log.info("Connectiontoredisserversucessfully");
}
}
/**
*关闭连接
*@parampool
*@paramredis
*/
publicvoidquitConnection(Jedisredis){
if(redis!=null){
redis.quit();
//pool.returnResource(redis);
}
}
/**
*获取key对应的value
*
*说明:方法中目前只针对key数据类型为String和hash的情况作了处理,其他数据类型可根据需要进行扩展即可
*@paramkey
*@return
*/
publicStringgetValue(Stringkey){
Stringvalue=null;
try{
if(redis==null||!redis.exists(key)){
log.info("key:"+key+"isnotfound");
quitConnection(redis);
returnvalue;
}
//获取key对应的数据类型
Stringtype=redis.type(key);
log.info("key:"+key+"的类型为:"+type);
if(type.equals("string")){
//get(key)方法返回key所关联的字符串值
value=redis.get(key);
}
if(type.equals("hash")){
//一下方法仅适用于list.size=1时,否者value将取集合中最后一个元素的值
ListStringlist=redis.hvals(key);//hvals(key)返回哈希表key中所有域的值
//SetStringset=redis.hkeys(key);
IteratorStringit=list.iterator();
while(it.hasNext()){
value=it.next();
log.info("value:"+value);
}
}
if(type.equals("list")){
log.info(key+"类型为list暂未处理...");
}
if(type.equals("set")){
log.info(key+"类型为list暂未处理...");
}
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}finally{
//关闭连接
quitConnection(redis);
}
returnvalue;
}
[java]view plaincopy
/prep/pp/pp测试代码如下:/ppprename="code"class="java"packagecn.migu.test;
importorg.testng.annotations.Test;
importcn.migu.utils.Log4jUtil;
importcn.migu.utils.RedisUtil;
/**
*Description测试RedisUtil类
*@authorYanLu
*
*/
publicclassTestRedis{
privateLog4jUtillog=newLog4jUtil(this.getClass().getName());
@Test
publicvoidtestRedisUtil(){
RedisUtilru=newRedisUtil();
//获取redis中对应的value值
Stringvalue=ru.getValue("SMS_NODE_TIMES_13814528620");
log.info(value);
}
}
redis可以多key对应一个value,设置方法为:
1、打开HBuilderX工具,新建web项目并在js文件夹中,创建一个js文件map.js。
2、进入到map.js,定义一个map变量(Map类型),然后调用set方法设置key-value。
3、调用for...of语句,遍历map变量的值,使用entries()方法,打印对应的key和value。
4、接着新建一个HTML5页面,并将map.js引入到页面中。
5、修改map.js,调用window.onload,并定义showKeys方法。
redis是一个key-value存储系统和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。
与memcached一样,为了保证效率,数据都是缓存在内存中。
区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
这样的查询,在Redis是没办法通过value进行比较得出结果的。
但是可以通过不同的数据结构类型来做到这一点,比如如下的数据定义:
users:1 {name:Jack,age:28,location:shanghai}
users:2 {name:Frank,age:30,location:beijing}
users:location:shanghai
其中users:1 users:2 分别定义了两个用户信息,通过Redis中的hash数据结构users:location:shanghai 记录了所有上海的用户id,通过集合数据结构实现。
Jedis jedis = jedisPool.getResource();SetshanghaiIDs = jedis.smembers("users:location:shanghai");//遍历该set//...//通过hgetall获取对应的user信息jedis.hgetAll("users:" + shanghaiIDs[0]);
ID索引的集合,其次对于一些复杂查询无能为力(当然也不能期望Redis实现像关系数据库那样的查询,Redis不是干这的);
但是Redis2.6集成了Lua脚本,可以通过eval命令,直接在RedisServer环境中执行Lua脚本,并且可以在Lua脚本中调用Redis命令。其实,就是说可以让你用Lua这种脚本语言,对Redis中存储的key value进行操作,这个意义就大了,甚至可以将你们系统所需的各种业务写成一个个lua脚本;
public static final String SCRIPT ="local resultKeys={};"+ "for k,v in ipairs(KEYS) do "+ " local tmp = redis.call('hget', v, 'age');"+ " if tmp ARGV[1] then "+ " table.insert(resultKeys,v);"+ " end;"+ "end;"+ "return resultKeys;";执行脚本代码Jedis jedis = jedisPool.getResource();jedis.auth(auth);Listkeys=Arrays.asList(allUserKeys);Listargs = new ArrayList();args.add("28");ListresultKeys = (List)jedis.evalsha(funcKey, keys, args);return resultKeys;
注意:以上的代码中使用的是evalsha命令,该命令参数的不是直接Lua脚本字符串,而是提前已经加载到Redis中的函数的一个SHA索引,通过以下的代码将系统中所有需要执行的函数提前加载到Redis中,我们的系统维护一个函数哈希表,后续需要实现什么功能,就从函数表中获取对应功能的SHA索引,通过evalsha调用就行。