代码主要只是在Spring中操作Redis键值对,其它数据类型直接总结Redis客户端命令对应的RedisTemplate中的方法。
首先要知道,RedisTemplate中定义了对5种数据结构进行操作:
redisTemplate.opsForValue();//操作字符串 redisTemplate.opsForHash();//操作hash redisTemplate.opsForList();//操作list redisTemplate.opsForSet();//操作set redisTemplate.opsForZSet();//操作有序set 以下依次给出各类数据类型的Redis客户端命令对应的RedisTemplate中的方法
String类型结构 Redis RedisTemplate rt set key value rt.opsForValue().set(“key”,“value”) get key rt.opsForValue().get(“key”) del key rt.delete(“key”) strlen key rt.opsForValue().size(“key”) getset key value rt.opsForValue().getAndSet(“key”,“value”) getrange key start end rt.opsForValue().get(“key”,start,end) append key value rt.opsForValue().append(“key”,“value”) Hash结构 hmset key field1 value1 field2 value2… rt.opsForHash().putAll(“key”,map) //map是一个集合对象 hset key field value rt.opsForHash().put(“key”,“field”,“value”) hexists key field rt.opsForHash().hasKey(“key”,“field”) hgetall key rt.opsForHash().entries(“key”) //返回Map对象 hvals key rt.opsForHash().values(“key”) //返回List对象 hkeys key rt.opsForHash().keys(“key”) //返回List对象 hmget key field1 field2… rt.opsForHash().multiGet(“key”,keyList) hsetnx key field value rt.opsForHash().putIfAbsent(“key”,“field”,“value” hdel key field1 field2 rt.opsForHash().delete(“key”,“field1”,“field2”) hget key field rt.opsForHash().get(“key”,“field”)
List结构 lpush list node1 node2 node3… rt.opsForList().leftPush(“list”,“node”) rt.opsForList().leftPushAll(“list”,list) //list是集合对象 rpush list node1 node2 node3… rt.opsForList().rightPush(“list”,“node”) rt.opsForList().rightPushAll(“list”,list) //list是集合对象 lindex key index rt.opsForList().index(“list”, index) llen key rt.opsForList().size(“key”) lpop key rt.opsForList().leftPop(“key”) rpop key rt.opsForList().rightPop(“key”) lpushx list node rt.opsForList().leftPushIfPresent(“list”,“node”) rpushx list node rt.opsForList().rightPushIfPresent(“list”,“node”) lrange list start end rt.opsForList().range(“list”,start,end) lrem list count value rt.opsForList().remove(“list”,count,“value”) lset key index value rt.opsForList().set(“list”,index,“value”) ltrim key start stop // 有些命令Spring所提供的RedisTemplate并不能支持,比如linsert命令,这个时候可以使用更为底层的方法,如代码:
try { rt.getConnectionFactory().getConnection().lInsert("list".getBytes("utf-8"), RedisListCommands.Position.BEFORE, "node2".getBytes("utf-8"), "before_node2".getBytes("utf-8")); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); }Set结构 sadd key member1 member2… rt.boundSetOps(“key”).add(“member1”,“member2”,…) rt.opsForSet().add(“key”, set) //set是一个集合对象 scard key rt.opsForSet().size(“key”) sidff key1 key2 rt.opsForSet().difference(“key1”,“key2”) //返回一个集合对象 sinter key1 key2 rt.opsForSet().intersect(“key1”,“key2”)//同上 sunion key1 key2 rt.opsForSet().union(“key1”,“key2”)//同上 sdiffstore des key1 key2 rt.opsForSet().differenceAndStore(“key1”,“key2”,“des”) sinter des key1 key2 rt.opsForSet().intersectAndStore(“key1”,“key2”,“des”) sunionstore des key1 key2 rt.opsForSet().unionAndStore(“key1”,“key2”,“des”) sismember key member rt.opsForSet().isMember(“key”,“member”) smembers key rt.opsForSet().members(“key”) spop key rt.opsForSet().pop(“key”) srandmember key count rt.opsForSet().randomMember(“key”,count) srem key member1 member2… rt.opsForSet().remove(“key”,“member1”,“member2”,…) 注意,如果命令中对应RedisTemplate方法中的参数是对象或者字符串,记得修改配置文件中RedisTemplate中属性keySerializer和valueSerializer的值。
另外还有ZSet和HyperLogLog结构命令比较难用并且出现频率不高,有需要再整理。