发布: 更新时间:2023-02-27 02:56:38
本文目录一览:
这样的查询,在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调用就行。
redis是一个key-value存储系统和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。
与memcached一样,为了保证效率,数据都是缓存在内存中。
区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
首先要链接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,意思是啥也没有!
1.进入redis
redis-cli
2.获取权限
auth 你的redis密码
3.得到redis中存储的所有key值
keys *
4.获取指定key值的value值
get “key值”