柚子快报邀请码778899分享:数据库 缓存 Redis
概念
Redis是一个基于内存中的key-value数据结构存储系统,常用作:数据库、缓存、消息中间件。 被称为结构化的Nosql数据库,非关系型数据库。
常见的关系型数据库(RDBMS):Mysql Oracle DB2 SQLServer 非关系型数据库(NoSql):Redis、Mongo db、MemCached
应用场景: 缓存、任务队列、消息队列、分布式锁
特点: 基于内存存储,读写性能高 适合存储热点数据(热点商品、资讯、新闻) 企业应用广泛
数据类型
Redis存储的是key-value结构的数据,其中key是字符串类型,数据保存在value中,因此Redis的数据类型实际上是指value的数据类型
数据类型描述特点String普通字符串(常用)hash哈希表是一个String类型的field和value的映射表,适合存储对象list列表简单的字符串列表,按照插入顺序排序,可以有重复元素set无序集合String类型的无序集合,集合成员唯一,不能重复sorted set / zset有序集合,没有重复元素与Set相似,但每个元素都会关联一个double类型的分数
下面是存储结构示意图:
常用命令
String操作命令
命令说明SET key value设置指定key的值GET key获取指定key的值SETEX key seconds value设置key的值,并且key的过期时间设为seconds秒SETNX key value只有在key不存在时设置key的值,如果存在不进行任何操作
hash操作命令
命令说明HSET key field value将key中的字段field的值设为valueHGET key field获取存储在哈希表中指定字段的值HDEL key field删除存储在哈希表中的指定字段HKEYS key获取哈希表中所有字段HVALS key获取哈希表中所有值HGETALL key获取在哈希表中指定key的所有字段和值
List列表操作命令
命令说明LPUSH key value1 [value2]将一个或多个值插入到列表头部LRANGE key start stop获取列表指定范围内的元素RPOP key移除并获取列表最后一个元素LLEN key获取列表长度BRPOP key1 [key2] timeout
set集合操作命令
命令说明SADD key member1 [member2]向集合添加一个或多个成员SMEMBERS key返回集合中所有成员SCARD key获取集合的成员数SINTER key1 [key2]返回给定所有集合的交集SUNION key1 [key2]返回所有给定集合的并集SDIFF key1 [key2]返回给定所有集合的差集SREM key member1 [member2]移除集合中一个或多个成员
Zset有序集合操作命令
命令说明ZADD key score1 member1 [score2 member2]向有序集合添加一个或多个成员ZRANGE key start stop [WITHSCORES]通过索引区间返回有序集合中指定区间内的程序员ZINCRBY key increament member有序集合中对指定成员的分数加上增量increamentZREM key member [member]移除有序集合中的一个或多个成员
通用命令
命令说明KEYS pattern查找所有符合给定模式(pattern)的keyEXISTS key检查给定key是否存在TYPE key返回key所存储的值的类型TTL key返回给定key的剩余生存时间(TTL,time to live),以秒为单位DEL keykey存在时删除key
Java操作Redis
现在项目大多数都是基于Spring boot开发的,Spring整合了Redis的操作方式,提供了Spring Data Redis用来简化Redis操作。
第一步导坐标
第二步在yml中配置Redis
redis:
host: localhost
port: 6379
#选择要操作的几号数据库(默认有15个数据库)
database: 0
jedis:
#Redis连接池配置
oppl:
max-active: 8 #设置最大连接数
max-wait: 1ms #连接池最大阻塞等待时间
max-idle: 4 #连接池中的最大空闲连接
min-idle: 0 #连接池中的最小空闲连接
第三步通过RedisTemplate对象操作Redis
Spring Data Redis中提供了一个高度封装的类: RedisTemplate,针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口,具体分类如下:
分类说明获取方法ValueOperations简单的K-V操作opsForValue()SetOperationsset类型数据操作opsForSet()ZSetOperationszset类型数据操作opsForZSet()HashOperations针对map类型的数据操作opsForHash()ListOperations针对List类型的数据操作opsForList()
我们在Test测试类中注入RedisTemplate对象,并通过这个对象来操作Redis 例如:添加字符串类型 key为name,value为zhangsan
@SpringBootTest
@RunWith(SptingRunner.class)
public class Test{
@Autowired
private RedisTemplate redisTemplate;
@Test
public void testString(){
//添加字符串name为张三
redisTemplate.opsForValue().set("name","zhangsan");
}
}
由于RedisTemplate会默认将key序列化存储,如果要修改序列化方式,则需要创建一个配置类
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public RedisTemplate
RedisTemplate
//默认的Key序列化器为JdkSerializationRedisserializer
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashkeySerializer(new StringRedisserializer());
redisTemplate.setConnectionFactory(connectionFactory);
return redisTemplate;
}
}
柚子快报邀请码778899分享:数据库 缓存 Redis
参考阅读
发表评论