一、什么是redis

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。引用自-------redis中文网

二、redis的类型

redis有五种基本的数据结构。

redis使用reactor模型 redis model_Redis

2.1 redis的特点
  • redis是单线程速度还是很快,主要有以下几点原因:
  • 内存操作
  • 避免线程切换和竞态消耗
  • 非阻塞io

三、ResdisTemplate

ResdisTemplate是Spring 提供给我们的一个模版方法,内部封装了各种对redis的基本操作,类似于jdbcTemmplate。下面分别介绍一下改模版方法的基本使用。

3.1 String类型

判断是否有key所对应的值,有则返回true,没有则返回false

redisTemplate.hasKey(key)

/有则取出key值所对应的值

redisTemplate.opsForValue().get(key)

//删除单个key值

redisTemplate.delete(key)

批量删除key

redisTemplate.delete(keys) //其中keys:Collection<K> keys

将当前传入的key值序列化为byte[]类型

redisTemplate.dump(key)

设置过期时间

redisTemplate.expire(key, timeout, unit);
 }

返回剩余时间

redisTemplate.getExpire(key);

设置当前的key以及value值

redisTemplate.opsForValue().set(key, value)

设置当前的key以及value值并且设置过期时间

redisTemplate.opsForValue().set(key, value, timeout, unit)

设置自增

redisTemplate.opsForValue().increment(key, increment)

3.2 Hash类型

Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
Redis 中每个 hash 可以存储 2^32 - 1 键值对(40多亿)。

获取变量中的指定map键是否有值,如果存在该map键则获取值,没有则返回null

redisTemplate.opsForHash().get(key, field)

新增hash值

redisTemplate.opsForHash().put(key, hashKey, value)

map集合的形式添加键值对

redisTemplate.opsForHash().putAll(key, maps);

仅当hashKey不存在时才设置

redisTemplate.opsForHash().putIfAbsent(key, hashKey, value);

删除一个或者多个hash表字段

redisTemplate.opsForHash().delete(key, fields);

查看hash表中指定字段是否存在

redisTemplate.opsForHash().hasKey(key, field);

给哈希表key中的指定字段的整数值加上增量increment

redisTemplate.opsForHash().increment(key, field, increment);

获取所有hash表中字段

redisTemplate.opsForHash().keys(key)

获取hash表中存在的所有的值

redisTemplate.opsForHash().values(key);

3.3 List 类型

获取hash表中存在的所有的值

redisTemplate.opsForList().index(key, index)

获取列表指定范围内的元素(start开始位置, 0是开始位置,end 结束位置, -1返回所有)

redisTemplate.opsForList().range(key, start, end)

存储在list的头部,即添加一个就把它放在最前面的索引处

redisTemplate.opsForList().leftPush(key, value)

把多个值存入List中(value可以是多个值,也可以是一个Collection value)

redisTemplate.opsForList().leftPushAll(key, value)

List存在的时候再加入

redisTemplate.opsForList().leftPushIfPresent(key, value)

如果pivot处值存在则在pivot前面添加

redisTemplate.opsForList().leftPush(key, pivot, value)

设置指定索引处元素的值

redisTemplate.opsForList().set(key, index, value)

移除并获取列表最后一个元素

redisTemplate.opsForList().rightPop(key)

获取当前key的List列表长度

redisTemplate.opsForList().size(key)

3.4 set类型

添加元素

redisTemplate.opsForSet().add(key, values)

移除元素(单个值、多个值)

redisTemplate.opsForSet().remove(key, values)

删除并且返回一个随机的元素

redisTemplate.opsForSet().pop(key)

获取集合的大小

redisTemplate.opsForSet().size(key)

判断集合是否包含value

redisTemplate.opsForSet().isMember(key, value)

3.5 zset类型

ZSetOperations提供了一系列方法对有序集合进行操作
添加元素(有序集合是按照元素的score值由小到大进行排列)

添加 value为他的权值

redisTemplate.opsForZSet().add(key, value, score)

删除对应的value,value可以为多个值

redisTemplate.opsForZSet().remove(key, values)

增加元素的score值,并返回增加后的值

redisTemplate.opsForZSet().incrementScore(key, value, delta)

返回元素在集合的排名,有序集合是按照元素的score值由小到大排列

redisTemplate.opsForZSet().rank(key, value)

获取集合中给定区间的元素(start 开始位置,end 结束位置, -1查询所有)

redisTemplate.opsForZSet().reverseRangeWithScores(key, start,end)

从高到低的排序集中获取分数在最小和最大值之间的元素

redisTemplate.opsForZSet().reverseRangeByScore(key, min, max, start, end)