redis入门篇
Redis是一个基于内存的key-value结构NoSql数据库。相比于常规的数据库,Redis
- 基于内存存储,读写性能高
- 适合存储热点数据(热点商品、资讯、新闻)和在短时间内有大量访问的数据
- 应用广泛
Redis启动
安装好Redis并配置好环境变量之后,在cmd中使用redis-server
启动redis,Redis服务默认端口号为6379。
使用命令redis-cli
连接客户端,默认连接的是本地的redis服务,并且使用默认6379端口。也可以通过指定如下参数连接:-h ip地址-p 端口号 -a 密码(如果有)
也可以使用Another-Redis-Desktop-Manager图形化工具连接和管理Redis
Redis数据类型
Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型:
- 字符串(string):普通字符串,Redis中最简单的数据类型
- 哈希(hash):类似于Java中的HashMap结构
- 列表(list):按照插入顺序排序,可以有重复元素,类似于Java中的LinkedList
- 集合(set):无序集合,没有重复元素,类似于Java中的HashSet
- 有序集合(zset):集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素
Redis操作命令
字符串操作命令
SET key value
:设置指定key的值GET key
:获取指定key的值SETEX key seconds value
:设置指定key的值,并将 key 的过期时间设为 seconds 秒SETNX key value
:只有在 key 不存在时设置 key 的值
哈希操作命令
HSET key field value
:将哈希表 key 中的字段 field 的值设为 valueHGET key field
:获取存储在哈希表中指定字段的值HDEL key field
:删除存储在哈希表中的指定字段HKEYS key
:获取哈希表中所有字段HVALS key
:获取哈希表中所有值
列表操作命令
LPUSH key value1 [value2]
:将一个或多个值插入到列表头部(左边)LRANGE key start stop
:获取列表指定范围内的元素RPOP key
:移除并获取列表最后一个元素(右边)LLEN key
:获取列表长度
集合操作命令
SADD key member1 [member2]
:向集合添加一个或多个成员SMEMBERS key
:返回集合中的所有成员SCARD key
:获取集合的成员数SINTER key1 [key2]
:返回给定所有集合的交集SUNION key1 [key2]
:返回所有给定集合的并集SREM key member1 [member2]
:删除集合中一个或多个成员
有序集合操作命令
ZADD key score1 member1 [score2 member2]
:向有序集合添加一个或多个成员ZRANGE key start stop [WITHSCORES]
:通过索引区间返回有序集合中指定区间内的成员ZINCRBY key increment member
:有序集合中对指定成员的分数加上增量incrementZREM key member [member ...]
:移除有序集合中的一个或多个成员
通用命令
KEYS pattern
:查找所有符合给定模式(pattern)的keyEXISTS key
:检查给定key是否存在TYPE key
:返回key所储存的值的类型DEL key
:该命令用于在key存在时删除 key
在Java中操作Redis
Redis的Java客户端很多,常用的有:Jedis、Lettuce、Spring Data Redis
其中Spring Data Redis是Spring的一部分,对Redis底层开发包进行了高度封装。在Spring项目中,可以使用Spring Data Redis来简化操作。
Spring Data Redis
- 导入Spring Data Redis的maven坐标
<dependency> |
- 配置Redis数据源
spring: |
- 编写配置类,创建RedisTemplate对象
|
- 通过RedisTemplate对象操作Redis
|
Spring Data Redis使用方式
RedisTemplate针对大量api进行了归类封装,将同一数据类型的操作封装为对应的Operation接口,具体分类如下:
- ValueOperations:string类型数据操作
- SetOperations:set类型数据操作
- ZSetOperations:zset类型数据操作
- HashOperations:hash类型的数据操作
- ListOperations:list类型的数据操作
String操作
set void set(K key, V value)
:添加获取数据
set void set(K key, V value, long timeout, TimeUnit unit)
:设置数据有效期
TimeUnit.DAYS //天
TimeUnit.HOURS //小时
TimeUnit.MINUTES //分钟
TimeUnit.SECONDS //秒
TimeUnit.MILLISECONDS //毫秒
set void set(K key, V value, long offset)
:根据key设置value指定下标字符
get V get(Object key)
:Get操作
getAndSet V getAndSet(K key, V value)
:设置键的字符串值并返回其旧值
append Integer append(K key, String value)
:根据key拼接value的值,如果被拼接的key没值则为空字符串
size Long size(K key)
:根据key获取value的长度
List操作
Long size(K key)
:返回存储在键中的列表的长度。如果键不存在,则将其解释为空列表,并返回0。当key存储的值不是列表时返回错误。
Long leftPush(K key, V value)
:(从左边插入)将所有指定的值插入存储在键的列表的头部。如果键不存在,则在执行推送操作之前将其创建为空列表。
Long leftPushAll(K key, V... values)
:(从左边插入)批量把一个数组插入到列表中
Long rightPush(K key, V value)
:(从右边插入)将所有指定的值插入存储在键的列表的头部。如果键不存在,则在执行推送操作之前将其创建为空列表。(从右边插入)
Long rightPushAll(K key, V... values)
:(从右边插入)批量把一个数组插入到列表中
void set(K key, long index, V value)
:在列表中index的位置设置value值
Long remove(K key, long count, Object value)
:从存储在键中的列表中删除等于值的元素的第一个计数事件。
计数参数以下列方式影响操作:
count> 0:删除等于从头到尾移动的值的元素。
count <0:删除等于从尾到头移动的值的元素。
count = 0:删除等于value的所有元素。
V index(K key, long index)
:根据下标获取列表中的值,下标是从0开始的,-1为获取全部
V leftPop(K key)
:弹出最左边的元素
V rightPop(K key)
:弹出最右边的元素
Hash操作
Long delete(H key, Object... hashKeys)
:删除给定的哈希hashKeys
Boolean hasKey(H key, Object hashKey)
:判断哈希hashKey是否存在
HV get(H key, Object hashKey)
:从键中的哈希获取给定hashKey的值
Set keys(H key)
:获取key所对应的散列表的key
Long size(H key)
:获取key所对应的散列表的大小个数
void putAll(H key, Map<? extends HK, ? extends HV> m)
:使用m中提供的多个散列字段设置到key对应的散列表中
void put(H key, HK hashKey, HV value)
:设置散列hashKey的值
List values(H key)
:获取整个哈希存储的值根据密钥
Map<HK, HV> entries(H key)
:获取整个哈希存储根据密钥
Cursor<Map.Entry<HK, HV>> scan(H key, ScanOptions options)
:使用Cursor在key的hash中迭代,相当于迭代器。
Set操作
Long add(K key, V... values)
:无序集合中添加元素,返回添加个数也可以直接在add里面添加多个值 如:template.opsForSet().add(“setTest”,”aaa”,”bbb”)
Long remove(K key, Object... values)
:移除集合中一个或多个成员
V pop(K key)
:移除并返回集合中的一个随机元素
Boolean move(K key, V value, K destKey)
:将 member 元素从 source 集合移动到 destination 集合
Long size(K key)
:无序集合的大小长度
et members(K key)
:返回集合中的所有成员
Cursor scan(K key, ScanOptions options)
:遍历set
ZSet操作
Boolean add(K key, V value, double score)
:新增一个有序集合,存在的话为false,不存在的话为true
Long add(K key, Set<TypedTuple> tuples)
:新增一个有序集合
Long remove(K key, Object... values)
:从有序集合中移除一个或者多个元素
Long rank(K key, Object o)
:返回有序集中指定成员的排名,其中有序集成员按分数值递增(从小到大)顺序排列
Set range(K key, long start, long end)
:通过索引区间返回有序集合成指定区间内的成员,其中有序集成员按分数值递增(从小到大)顺序排列
Long count(K key, double min, double max)
:通过分数返回有序集合指定区间内的成员个数
Long size(K key)
:获取有序集合的成员数,内部调用的就是zCard方法
Double score(K key, Object o)
:获取指定成员的score值
Long removeRange(K key, long start, long end)
:移除指定索引位置的成员,其中有序集成员按分数值递增(从小到大)顺序排列
Cursor<TypedTuple> scan(K key, ScanOptions options)
:遍历zset
Spring Cache
Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。
它提供了一层抽象,底层可以切换不同的缓存实现,例如:
- EHCache
- Caffeine
- Redis
需要引入Maven坐标
<dependency> |
常用注解
注解 | 说明 |
---|---|
@EnableCaching | 开启缓存注解功能,通常加在启动类上 |
@Cacheable(cacheNames=”数据库名”,key=”存储的键”) | 在方法执行前先查询缓存中是否有数据,如果有数据,则直接返回缓存数据;如果没有缓存数据,调用方法并将方法返回值放到缓存中 |
@CachePut | 将方法的返回值放到缓存中 |
@CacheEvict(cacheNames = “数据库名”,[allEntries(是否全部删除) = true],key = “要删除的键”) | 将一条或多条数据从缓存中删除 |