Redis——NoSQL数据库
- 结构化(Structured)
- 关联的(Relational)
- SQL查询
- ACID (原子性、隔离型、持久性、一致性)
NoSQL(非关系型数据库)
- 非结构化
- 无关联的
- 非SQL
- BASE
Redis全程是Remote Dictionary Server,远程词典服务器,是一个基于内存的键值型NoSQL数据库。
特征:
- 键值Key-value型,value支持多种不同数据结构,功能丰富
- 单线程,每个命令具备原子性
- 低延迟,速度快(基于内存、IO多路复用、良好的编码)
- 支持数据持久化。
- 支持主从集群、分片集群
- 支持多语言客户端
yum install -y gcc tcl
安装gcc依赖
String 字符串操作命令
SET key value
设置指定key的值为value
GET key
获得指定key的值
SETEX key seconds value
将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。
SETNX key value
当key不存在时,关联value的值
Redis hash哈希操作命令
Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。
HSET key filed value
将哈希表key中的filed字段设置为value
HGET key filed
获取哈希表key中的filed字段的value值
HDEL key
删除哈希表key的所有值
HKEYS key
获得哈希表key的所有字段
HVALS key
获得哈希表key的所有的值
列表(List)操作命令
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
LPUSH key value1[value2]
将一个或多个值插入到表的头部
LRANGE key start stop
获取列表指定范围内的元素
RPOP key
移除并获取列表的最后一个元素
LLEN key
获取列表长度
Redis集合操作命令
redis set是String类型的无序集合。集合成员是唯一的,集合中不能出现重复数据。
SADD key member1 [member2]
向集合中添加一个或多个成员
SMEMBERS key
返回集合中的所有成员
SCARD key
获取集合的成员数
SINTER key1[key2]
返回给定所有集合的交集
SUNION key1[key2]
返回给定所有集合的并集
SREM key member1[member2]
删除集合中的一个或多个成员
Redis有序集合(Sorted set)
Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
ZADD key score1 member1 [score2 member2]
向有序集合添加一个或多个成员
ZRANGE key start stop [WITHSCORES]
通过索引区间返回有序集合汇中指定区间内的成员
ZINCRBY key increment member
有序集合中对指定成员的分数加上增量increment
ZREM key member [member..]
移除有序集合中的一个或多个成员
通用命令
Redis的通用命令是不分数据类型的
KEYS pattren
查找所有符合给定模式(pattern)的key
EXISTS key
检查给定key是否存在
TYPE key
返回key所存储的值的类型
DEL key
删除key
Redis的Java客户端
- Jedis
- Lettuce
- Spring Data Redis
Spring Data Redis是Spring的一部分,对底层Redis开发包进行了高度封装。在Spring项目中,可以使用Spring Data Redis来简化操作。
Spring Data Redis使用方式
- 导入坐标
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
- 配置Redis数据源
redis:
host: localhost
port: 6379
database: 0
password: 123456
- 编写配置类,创建RedisTemplate对象
@Configuration
@Slf4j
public class RedisConfiguration {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
log.info("开始创建redis模板对象...");
RedisTemplate redisTemplate = new RedisTemplate();
//设置redis的连接工厂对象
redisTemplate.setConnectionFactory(redisConnectionFactory);
//设置redis key的序列化器
redisTemplate.setKeySerializer(new StringRedisSerializer());
return redisTemplate;
}
}
- 通过RedisTemplate对象操作Redis
ValueOperations valueOperations = redisTemplate.opsForValue(); //对Redis的String类型进行操作
HashOperations hashOperations = redisTemplate.opsForHash(); //对Redis的Hash类型操作
ListOperations listOperations = redisTemplate.opsForList(); //对Redis的List类型进行操作
SetOperations setOperations = redisTemplate.opsForSet(); //对Redis的Set类型进行操作
ZSetOperations zSetOperations = redisTemplate.opsForZSet(); //对Redis的有序集合(Sorted Set)进行操作
String操作命令
//SET key value
void set(K key, V value); //源码
redisTemplate.opsForValue().set("name","zhangsan");
//GET key
@Nullable
V get(Object key); //源码
String name = (String) redisTemplate.opsForValue().get("name");
//SETEX key seconds value
void set(K key, V value, long timeout, TimeUnit unit);
redisTemplate.opsForValue().set("code","123456",3, TimeUnit.MINUTES); //设置code:123456 3分钟过期