概述:
Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 作为Key-value型数据库,Redis也提供了键(Key)和键值(Value)的映射关系。但是,除了常规的数值或字符串,Redis的键值还可以是以下形式之一:
●Lists (列表)
●Sets (集合)
●Sorted sets (有序集合)
●Hashes (哈希表)
因为在最近的项目中用到的是Hashes,所以这里重点总结一下redis的hash操作。
命令简介
redis for hash操作命令参考
这里我们主要用到了HGET,HGETALL,HKEYS,HSET,HINCRBY。
HEGT key filed 返回哈希表key中给定域filed的值
ex:HGET counter:postViewNum 2:1 返回值20
HGETALL key
返回哈希表 key 中,所有的域和值。
HKEYS key
返回哈希表 key 中的所有域。
HSET key field value
将哈希表 key 中的域 field 的值设为 value 。
HINCRBY key field increment
为哈希表 key 中的域 field 的值加上增量 increment 。
redis for java api
因为我们的后台开发语言是java,所以我们需要使用redis提供的java api。
而我们的后台框架使用的是springMVC所以又用到了spring-data-redis
核心的spring-redis配置
<bean
id="jedisConnectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="hostName" value="${redis.hostname}"></property>
<property name="port" value="${redis.port}"></property>
<property name="password" value="${redis.password}"></property>
</bean>
<!-- redis template definition -->
<bean
id="redisTemplate"
class="org.springframework.data.redis.core.RedisTemplate"
p:connection-factory-ref="jedisConnectionFactory" >
<property name="valueSerializer">
<bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer" />
</property>
<!-- 1.注意这里 -->
<property name="keySerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
</bean>
<!-- declare Redis Cache Manager -->
<bean
id="cacheManager"
class="org.springframework.data.redis.cache.RedisCacheManager">
<constructor-arg name="redisOperations" ref="redisTemplate" />
</bean>
使用redis哈希操作需要实例化Redistemplate,通过redistemplate.opsForHash()得到HashOperations
public <HK, HV> HashOperations<K, HK, HV> opsForHash() {
return new DefaultHashOperations<K, HK, HV>(this);
}
在这里我们用到的HashOperations接口中的三个方法:
Long increment(H key, HK hashKey, long delta);
为指定key中的field值加上增量delta,相当于hash命令HINCRBY
void put(H key, HK hashKey, HV value);
为指定key中的filed赋值为value,相当于hash命令HSET
Map<> entries(H key);
获取指定key中所有的field,value,相当于hash命令HGETALL
这里只是对于redis使用java语言进行hash操做了一个简单的总结。当然还有很多redis的其他知识并没有涉及到,作者也会不断研究,不断总结