Redis基础笔记
简介
Redis是一个基于内存的key-value结构数据库。(MySQL是用文件以二维表的形式存储在磁盘上的)
- 基于内存存储,读写性能高
- 适合存储热点数据(热点商品、咨询、新闻)
- 企业应用广泛
官网:https://redis.io
中文网:https://www.redis.net.cn/
常用数据类型
Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型
- 字符串string:普通字符串,Redis中最简单的数据类型
- 哈希hash:也叫散列,类似于Java中的HashMap结构
- 列表list:按照插入顺序排序,可以有重复元素,类似于Java中的LinkedList
- 集合set:无序集合,没有重复元素,类似于Java中的HashSet
- 有序集合sorted set / zset:集合中每个元素关联的一个分数(score),根据分数升序排序,没有重复元素

基本操作
字符串操作命令
| 命令 | 说明 |
|---|---|
| SET key value | 设置指定key的值 |
| GET key | 获取指定key的值 |
| SETEX key seconds value | 设置指定key的值,并将key的过期时间设为seconds秒 |
| SETNX key value | 只有在key不存在时设置key的值 |
哈希操作命令
Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象
| 命令 | 说明 |
|---|---|
| HSET key field value | 将哈希表key中的字段field的值设为value |
| HGET key field | 获取存储在哈希表中指定字段的值 |
| HDEL key field | 删除存储在哈希表中的指定字段 |
| HKEYS key | 获取哈希表中所有字段 |
| HVALS key | 获取哈希表中所有值 |
列表操作命令
Redis列表是简单的字符串列表,按照插入顺序排序
| 命令 | 说明 |
|---|---|
| LPUSH key value1 [value2] | 将一个或多个值插入到列表头部 |
| LRANGE key start stop | 获取列表指定范围内的元素 |
| RPOP key | 移除并获取列表最后一个元素 |
| LLEN key | 获取列表长度 |
集合操作命令
Redis set是string类型的无序集合。集合成员是唯一的,集合中不能出现重复的数据,常用命令:
| 命令 | 说明 |
|---|---|
| SADD key menber1 [menber2] | 向集合添加一个或多个成员 |
| SMEMBERS key | 返回集合中的所有成员 |
| SCARD key | 获取集合的成员数 |
| SINTER key1 [key2] | 返回给定所有集合的交集 |
| SUNION key1 [key2] | 返回所有给定集合的并集 |
| SREM key member1 [menber2] | 删除集合中一个或多个成员 |
有序集合操作命令
Redis有序集合是string类型元素的集合,且不允许有重复成员。每个元素都远关联一个double类型的分数。常用命令:
| 命令 | 说明 |
|---|---|
| ZADD key score1 member1 [score2 member2] | 向有序集合添加一个或多个成员 |
| ZRANGE key start stop [WITHSCORES] | 通过索引区间返回有序集合中指定区域内的成员 |
| ZINCRBY key increment member | 有序集合中对指定成员的分数加上增量increment |
| ZREM key member [member …] | 移除有序集合中的一个或多个成员 |
通用命令
Redis的通用命令是不分数据类型的,都可以使用的命令:
| 命令 | 说明 |
|---|---|
| KEYS pattern | 查找所有符合给定模式(pattern)的key |
| EXISTS key | 检查给定key是否存在 |
| TYPE key | 返回key所储存的值的类型 |
| DEL key | 该命令用于在key存在是删除key |
在Java中操作Redis
Redis常见的Java客户端:
- Jedis
- Lettuce
- Spring Data Redis
SpringDataRedis
SpringDataRedis是Spring的一部分,对Redis底层开发包进行了高度封装。在Spring项目中,可以使用SpringDataRedis来简化操作。命令对应方法。
不过SpringDataRedis封装的方法和对应的redis命令从命名上来说并不一致,具体如下:使用方式
操作步骤:
导入Spring Data Redis 的maven坐标
1
2
3
4<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>配置Redis数据源
1
2
3
4
5
6spring:
redis:
host: localhost
port: 6379
password: 123456
database: 0编写配置类,创建RedisTemplate对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class RedisConfiguration{
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
log.info("开始创建redis模板类...");
RedisTemplate redisTemplate = new RedisTemplate();
//设置key的序列化器,默认为dkSerializationRedisSerializer
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(redisConnectionFactory);
return redisTemplate;
}
}注:
RedisTemplate可以接收任意 Object 作为值写入Redis。只不过写入前会把Object序列化为字节形式,默认是采用JDK序列化,程序读取会自动反序列化。通过RedisTemplate对象操作Redis
获取操作对象,通过这五个方法就可以获得对应类型的操作对象,例如可以通过valueOperations对象操作字符串类型的数据1
2
3
4
5
6
7
8
9
public void testRedisTemplate(){
ValueOperations valueOperations = redisTemplate.opsForValue();
HashOperations HashOperations = redisTemplate.opsForHash();
ListOperations listOperations = redisTemplate.opsForList();
SetOperations setOperations = redisTemplate.opsForSet();
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
}操作String类型数据
1
2
3
4
5
6
7
8
9
10
11
12
13/**
* 操作字符串类型的数据
*/
public void testString(){
//set get setex setnx
redisTemplate.opsForValue().set("name","ayeez");
String name = (String) redisTemplate.opsForValue().get("name");
System.out.println(name);
redisTemplate.opsForValue().set("code",1234,3, TimeUnit.MINUTES);
redisTemplate.opsForValue().setIfAbsent("lock",1);
redisTemplate.opsForValue().setIfAbsent("lock",2);
}
操作hash类型的数据
1 | /** |
操作list类型数据
1 | /** |
操作set类型数据
1 | /** |
操作zset类型数据
1 | /** |
通用操作命令
1 | /** |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 欢迎来到阿叶Ayeez的博客!
评论



























