设为首页 收藏本站
查看: 1636|回复: 0

[经验分享] Spring-data-redis 第一天

[复制链接]

尚未签到

发表于 2016-12-19 07:39:05 | 显示全部楼层 |阅读模式
  1.Redis
  这就不必哆嗦了,Redis 支持丰富的数据类型,String ,List,Sets ,Sorted Sets,Hashes,这就可以看出Java 操作Redis就要针对各种类型都有自己的操作。这里自己学习的是Spring-data-redis 中基于Jedis connection的不过在RedisTemplate 中 可不管这些,全部都是 connect 的操作,所以 我想说,记得引Jedis的Jar包,而且还要是2.0以上的哦
  2.安装Redis
  这也不罗嗦了,这里简单说下Redis cli 中的简单操作
  (1) String
  SET NAME ZHANG
  GET NAME
  INCR ,APPEND GETRANGE,MSET,STRLENGTH.
  (2) LIST
  LPUSH name zhang
  LPUSH name hao ni zhen shi yi ge SB
  LLEN name
  LREM name xx
  (3)SETS
  SADD name zhang
  SADD name zhang
  SADD name hao
  SMEMBERS name
  (4) Sorted Sets
  ZADD name 1 zhang
  ZADD name 2 hao
  ZRANGE
  (5)HASHes
  HSET name:1 name zhang
  HSET name:1 last     hao
  HGET name:1 name
  HGETALL name:1
  3.简单的用Spring-data-redis
  当然 关联的Jar 包用Maven 来搞,(前段时间Maven不好使,生不如死呀,各种看错误来加Jar包),然后就是在Spring  applicationContext,xml中配置了
  首先:Jedis 的连接池:redis.clients.jedis.JedisPoolConfig 见仁见智

<!-- 配置Jedis的 缓冲池 -->
<bean id="JedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"
p:maxActive="32"
p:maxIdle="6"
p:maxWait="15000"
p:minEvictableIdleTimeMillis="300000"
p:numTestsPerEvictionRun="3"
p:timeBetweenEvictionRunsMillis="60000"
p:whenExhaustedAction="1">
</bean>
  第二,创建ConnectionFactory

<!-- 配置Jedis connection -->
<bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
p:poolConfig-ref="JedisPoolConfig"
p:hostName="192.168.137.100"
p:port="6379"
p:usePool="true"
>
</bean>
  第三:创建RedisTemplate

<!-- 配置 redisTemplate 利用Stringserializer -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"
p:connectionFactory-ref="connectionFactory"
>
<property name="defaultSerializer">  
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>  
</property>  
</bean>
  由于redis中存储的数据必须是经过序列化的,所以Spring-data-redis中采取了几种序列化模式,有自带的JDKblablabla,还有StringRedisSerializer,
但是Json 和XML也都是基于String类型的所以就在默认文件中使用String类型的序列化,而默认是JdkSerializationRedisSerializer.


public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperations<K, V> {
private boolean exposeConnection = false;
private boolean initialized = false;
private boolean enableDefaultSerializer = true;
private RedisSerializer<?> defaultSerializer = new JdkSerializationRedisSerializer();
  先不管那么多了,来做点简单的实验。
  1.String

RedisTemplate rt = (RedisTemplate) context.getBean("redisTemplate");
rt.opsForValue().set("zhang", "hao");
System.out.println(rt.opsForValue().get("zhang"));

  2.List
  说到List  Redis 提供了类似于消息队列的操作,先看下接口,从名字上就可以看到这些操作的意义,我就简单实例一下。

public interface ListOperations<K, V> {
List<V> range(K key, long start, long end);
void trim(K key, long start, long end);
Long size(K key);
Long leftPush(K key, V value);
Long leftPushAll(K key, V... values);
Long leftPushIfPresent(K key, V value);
Long leftPush(K key, V pivot, V value);
Long rightPush(K key, V value);
Long rightPushAll(K key, V... values);
Long rightPushIfPresent(K key, V value);
Long rightPush(K key, V pivot, V value);
void set(K key, long index, V value);
Long remove(K key, long i, Object value);
V index(K key, long index);
V leftPop(K key);
V leftPop(K key, long timeout, TimeUnit unit);
V rightPop(K key);
V rightPop(K key, long timeout, TimeUnit unit);
V rightPopAndLeftPush(K sourceKey, K destinationKey);
V rightPopAndLeftPush(K sourceKey, K destinationKey, long timeout, TimeUnit unit);
RedisOperations<K, V> getOperations();
  PS.我上面贴的源码是 github上面的最新源码。我自己用的还是1.01  泪千行,我说找了半天rightpushAll 竟然找不到。所以 记得用最新的版本。

String KEYS="LIST:";
rt.opsForList().rightPush(KEYS, "zhang");
rt.opsForList().leftPush(KEYS, "HAO");
// sort : HAO zhang
for(int i=0;i<=rt.opsForList().size(KEYS);i++){
System.out.println(rt.opsForList().rightPop(KEYS));
}
  3 Hashes (SETS 自己看看吧。。)

String KEYS="HASH:";
rt.opsForHash().put(KEYS, "name", "zhang");
rt.opsForHash().put(KEYS, "last", "hao");
rt.opsForHash().put(KEYS, "wo", "ni");
rt.opsForHash().put(KEYS, "name", "sb");
System.out.println(rt.opsForHash().get(KEYS, "name"));
可以看到key name 被覆盖了,其中有个BooleanputIfAbsent(Hkey,HKhashKey,HVvalue) 方法,这个具体细节就自己看看吧。下面把Hashoperations 里面的方法贴下:


public interface HashOperations<H, HK, HV> {
void delete(H key, Object... hashKeys);
Boolean hasKey(H key, Object hashKey);
HV get(H key, Object hashKey);
List<HV> multiGet(H key, Collection<HK> hashKeys);
Long increment(H key, HK hashKey, long delta);
Double increment(H key, HK hashKey, double delta);
Set<HK> keys(H key);
Long size(H key);
void putAll(H key, Map<? extends HK, ? extends HV> m);
void put(H key, HK hashKey, HV value);
Boolean putIfAbsent(H key, HK hashKey, HV value);
List<HV> values(H key);
Map<HK, HV> entries(H key);
RedisOperations<H, ?> getOperations();
}
  今天就先到这里,Redis 还有很多东西,比如cache transcation 等等 看下目录结构
还有比较多东西,明天继续 再接再厉!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-316096-1-1.html 上篇帖子: php安装redis扩展 下篇帖子: redis的默认配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表