zoukankan      html  css  js  c++  java
  • 如何使用RedisTemplate访问Redis数据结构

    具体细节看 这个链接:https://blog.csdn.net/ruby_one/article/details/79141940

    我对于reids 5种类型的总结:适合面试

    结构类型结构存储的值结构的读写能力
    String 可以是字符串、整数或者浮点数 对整个字符串或者字符串的其中一部分执行操作;对象和浮点数执行自增(increment)或者自减(decrement)
    List 一个链表,链表上的每个节点都包含了一个字符串 从链表的两端推入或者弹出元素;根据偏移量对链表进行修剪(trim);读取单个或者多个元素;根据值来查找或者移除元素
    Set 包含字符串的无序收集器(unorderedcollection),并且被包含的每个字符串都是独一无二的、各不相同 添加、获取、移除单个元素;检查一个元素是否存在于某个集合中;计算交集、并集、差集;从集合里卖弄随机获取元素
    Hash 包含键值对的无序散列表 添加、获取、移除单个键值对;获取所有键值对
    Zset 字符串成员(member)与浮点数分值(score)之间的有序映射,元素的排列顺序由分值的大小决定 添加、获取、删除单个元素;根据分值范围(range)或者成员来获取元素

    Redis的String数据结构 (推荐使用StringRedisTemplate)
    //set一个值
    set void set(K key, V value);
    //set一个值,并设置其失效时间,最后一个参数是时间的单位可以是天,时,分,秒
    set void set(K key, V value, long timeout, TimeUnit unit);
    //该方法是用 value 参数覆写(overwrite)给定 key 所储存的字符串值,从偏移量 offset 开始 (就是在值的某个位子插入值的意思)
    set void set(K key, V value, long offset);

    //截取key所对应的value字符串get(0,-1) 获取该key下的完整value
    get String get(K key, long start, long end);
    //设置递增detla=》递增的值
    increment Long increment(K key, long delta);
    支持整数

    Redis的List数据结构
    //从右边插入
    redisTemplate.opsForList().rightPush("oowwoo", "aaa")
    redisTemplate.opsForList().rightPushAll("oowwoo", "插入一个数组")
    //右边插入
    template.opsForList().leftPush("listarray","bbb");
    template.opsForList().leftPushAll("listarray","插入一个集合");
    //把value值放到key对应列表中pivot值的右面,如果pivot值存在的话
    Long rightPush(K key, V pivot, V value);
    //在列表中index的位置设置value值
    void set(K key, long index, V value);

    Redis的Hash数据机构
    Redis的散列可以让用户将多个键值对存储到一个Redis键里面。
    初始数据:
    //template.opsForHash().put("redisHash","name","tom");
    //template.opsForHash().put("redisHash","age",26);
    //template.opsForHash().put("redisHash","class","6");

    //Map<String,Object> testMap = new HashMap();
    //testMap.put("name","jack");
    //testMap.put("age",27);
    //testMap.put("class","1");
    //template.opsForHash().putAll("redisHash1",testMap);

    //HV get(H key, Object hashKey);
    //获取值
    使用:System.out.println(template.opsForHash().get("redisHash","age"));
    结果:26

    List<HV> multiGet(H key, Collection<HK> hashKeys);
    //根据这个集合对应的key 统一去获取值
    使用:List<Object> kes = new ArrayList<Object>();
    kes.add("name");
    kes.add("age");
    System.out.println(template.opsForHash().multiGet("redisHash",kes));
    结果:[jack, 28.1]

    Redis的Set数据结构
    Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
    Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
    public interface SetOperations<K,V>
    SetOperations提供了对无序集合的一系列操作:
    Long add(K key, V... values);
    无序集合中添加元素,返回添加个数
    也可以直接在add里面添加多个值 如:template.opsForSet().add("setTest","aaa","bbb")
    还有很多函数 比如求 交集 差集 等等,求完交集,差集后,吧结果保存到另一个集合中。这些函数都是有的


    Redis的ZSet数据结构
    Redis 有序集合和无序集合一样也是string类型元素的集合,且不允许重复的成员。
    不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
    有序集合的成员是唯一的,但分数(score)却可以重复。
    public interface ZSetOperations<K,V>
    ZSetOperations提供了一系列方法对有序集合进行操作:

    Boolean add(K key, V value, double score);
    新增一个有序集合,存在的话为false,不存在的话为true

    使用:System.out.println(template.opsForZSet().add("zset1","zset-1",1.0));
    结果:true

    Long add(K key, Set<TypedTuple<V>> tuples);
    新增一个有序集合

    使用:ZSetOperations.TypedTuple<Object> objectTypedTuple1 = new DefaultTypedTuple<Object>("zset-5",9.6);
    ZSetOperations.TypedTuple<Object> objectTypedTuple2 = new DefaultTypedTuple<Object>("zset-6",9.9);
    Set<ZSetOperations.TypedTuple<Object>> tuples = new HashSet<ZSetOperations.TypedTuple<Object>>();
    tuples.add(objectTypedTuple1);
    tuples.add(objectTypedTuple2);
    System.out.println(template.opsForZSet().add("zset1",tuples));
    System.out.println(template.opsForZSet().range("zset1",0,-1));
    结果:[zset-1, zset-2, zset-3, zset-4, zset-5, zset-6]

  • 相关阅读:
    关于vue中如何实现排到他思想
    js 文件下载
    js文件上传
    webpack学习笔记
    this总结
    React中props与state
    js事件总结
    js深拷贝与浅拷贝
    JS设计模式之观察者模式
    ES5与ES6的继承
  • 原文地址:https://www.cnblogs.com/xiaowangbangzhu/p/10320713.html
Copyright © 2011-2022 走看看