zoukankan      html  css  js  c++  java
  • Redis代码示例

    RedisTemplate

    如果想要在java中使用Redis相关的数据结构,要先注入RedisTemplate。

        @Autowired
        private RedisTemplate<K,V>  redisTemplate;
    

    其中K,V类型,可以使用具体的类型,比如String或者其他具体类。

        @Autowired
        private RedisTemplate<String,Integer>  redisTemplate;
    

    StringRedisTemplate

    如果key和value都是String类型的,直接用StringRedisTemplate 。

        @Autowired
        private StringRedisTemplate stringRedisTemplate;
    

    List(队列)

    Redis队列通过redisTemplate.opsForList()来操作。
    常用api如下:

    redisTemplate.opsForList().rightPush(K  key ,V  value);  //表示从队列的右侧放入新的值 ,其中key为队列名,value为入列的值
    
    redisTemplate.opsForList().leftPop(K  key);            //取出队列最右侧的值
    
    redisTemplate.opsForList().range(K key, long start, long end);         //遍历队列
    

    示例如下:
    从队列的最右侧放入新的数据。从队列的最左侧取出已有的数据。

    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    
    redisTemplate.opsForList().rightPush("list","python");
    
    redisTemplate.opsForList().leftPop("list");
    

    Hash(散列)

    Redis的散列可以让将多个键值对存储到一个Redis键里面。
    常用api:

    void put(H key, HK hashKey, HV value);      //设置散列hashKey的值
    HV get(H key, Object hashKey);      //从键中的哈希获取给定hashKey的值。返回类型HV表示HashValue
    Set<HK> keys(H key);            //获取key所对应的散列表的key
    Set<K> keys(K pattern) ;        //按照给定的pattern查找key。*表示所有的key,关键字加*表示模糊查询,比如user*表示所有带user的key。
    Long increment(H key, HK hashKey, long delta);     //通过给定的delta增加散列hashKey的值(整型)
    Boolean hasKey(H key, Object hashKey);     //确定哈希hashKey是否存在
    Long size(H key);      //获取key所对应的散列表的大小个数
    Cursor<Map.Entry<HK, HV>> scan(H key, ScanOptions options);       //使用Cursor在key的hash中迭代,相当于迭代器。
    

    示例如下:
    1.通过Hash存储某个用户数据。

    redisTemplate.opsForHash().put("user2","name","tom");
    redisTemplate.opsForHash().put("user2","age",26);
    redisTemplate.opsForHash().put("user2","sex","male");
    

    2.获取用户数据的所有字段。

    System.out.println(redisTemplate.opsForHash().keys("user2"));
    //redisHash1所对应的散列表为{age=26, name=jack, sex=male}
    结果:[name, sex, age]
    

    3.获取某个用户的年龄:

    String age=redisTemplate.opsForHash().get("user2","age")
    

    4.获取所有所有key包含user的数据。
    通过keys(pattern)方式查找key,以下的pattern为user加上*表示所有包含user的key。

    Set<String> setKeys = stringRedisTemplate.keys("user"+"*");
    List<Object> list = new ArrayList<>();
    for(String key:setKeys) {
    	//取出所有数据
    	List<Object> hashList = stringRedisTemplate.opsForHash().values(key);
    	for(int i=0;i<hashList.size();i++) {
    		Object object=hashList.get(i);
    	}
    }
    

    5.使用Cursor遍历:

    使用:Cursor<Map.Entry<Object, Object>> curosr = template.opsForHash().scan("user2", ScanOptions.ScanOptions.NONE);
            while(curosr.hasNext()){
                Map.Entry<Object, Object> entry = curosr.next();
                System.out.println(entry.getKey()+":"+entry.getValue());
            }
    结果:
    age:26
    name:tom
    male:sex
    

    Set(无序集合)

    Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
    Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
    常用api如下:

    Long add(K key, V... values);
    Long remove(K key, Object... values);
    Cursor<V> scan(K key, ScanOptions options);            //遍历set
    
    

    ZSET(有序集合)

    ZSet是有序的集合,且不允许重复的成员。

    Long rank(K key, Object o);   //返回有序集中指定成员的排名,其中有序集成员按分数值递增(从小到大)顺序排列
    

    更详细的讲解请见:
    https://www.jianshu.com/p/7bf5dc61ca06

  • 相关阅读:
    小小c#算法题
    .net中值类型、引用类型理解的c#代码示例
    小小c#算法题
    小小c#算法题
    小小c#算法题
    小小c#算法题
    python 正则表达式(一)
    python string 文本常量和模版
    centos6安装redis
    sqoop命令总结
  • 原文地址:https://www.cnblogs.com/expiator/p/11127719.html
Copyright © 2011-2022 走看看