Redis(Remote Dictionary Server)
概述
NoSql:not only sql,泛指非关系数据库(不用sql语言操作的)
关系型数据库:以数据库表为单位存储,表与表之间存在某种关联关系 缺点:磁盘的io瓶颈
非关系型数据库:数据与数据之间没有关系,以键值对形式存储,通过键获取到值,分布式
cache(缓存 mybatis)
特点:易扩展 高性能 灵活的数据模型
Redis
K-V数据库
支持数据持久化
不仅仅是简单数据结构 还提供list,set,zset,hash等数据结构
支持数据备份
直接将数据存储在内存中;数据结构简单 键值对方式存储 高性能 支持数据持久化 保护数据库
-
设置redis后台运行
-
设置远程访问
-
设置一个连接密码
进入redis客户端模式
./redis-cli
redis_String类型(json/图片)
set key value
get key
del key
keys *
单值缓存 对象缓存
计数器:set newsid:1 0 incr newsid:1 decr get
web集群session共享 (服务器创建一个session对象)
其他类型
Hash:是一个String类型的Field和value的映射表(适合存储对象 对每个属性进行值的修改的)
hset users 1:name jim
hmset key field value[field value]
hget key field
hmget key field
hdel key fieldhlen key
hgetall key
hincrby key field 值(正负)
List:是简单的字符串列表,按照插入顺序排序
lpush(rpush从队尾加) key value
lrange key start stop
lpop(rpop) key
Set无序集合:
srem key member
sadd key member
smembers key(获取集合key中所有元素)
scard key(获取集合key的所有个数)
Zset有序集合 不允许重复 按照分数排序(越小排的越前)
zadd key score member
zrem key member[member...] 从有序集合key中删除元素
zscore key member 返回有序集合key中元素member的分值
zincrby key increment member 为有序集合key中元素member的分值加上increment
zcard key 返回有序集合key中元素个数
zrange key start stop[withscores] 正序获取有序集合keyastart下标到stop下标的元素
设置失效时间
set name ex(秒)/px(毫秒) 30
TTL -1 永不过期
ttl key 查看key 的时间
Spring集成redis
\1. 添加redis依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
\2. 配置连接redis
spring: redis: host: 192.168.31.100 port: 6379 password: 111 database: 0 pool: max-active: 8 # 连接池最大连接数(使用负值表示没有限制) max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制) max-idle: 8 # 连接池中的最大空闲连接 min-idle: 0 # 连接池中的最小空闲连接 timeout: 5000ms # 连接超时时间(毫秒)
\3. 注入RedisTemplate
@Autowired RedisTemplate redisTemplate;
\5. 测试
redisTemplate.opsForValue().set("name", "aa"); redisTemplate.opsForValue().set("users", users,10*1000, TimeUnit.MILLISECONDS); redisTemplate.hasKey("name"); redisTemplate.opsForValue().get("name"); redisTemplate.delete("users");
序列化键值 redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<User>(User.class));
需要被Redis缓存的类,必须实现序列化接口
删除是全局的 在redistemplate中
haskey 键是否存在
存值(个数之类的)因为是String所以要用到序列化 存对象也一样json也要序列化