具体细节看 这个链接: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]