# 安装
yum -y install redis
# 启动(加&是后台启动)(第二个参数是选择配置文件)
redis-server /etc/redis.conf &
#客户端连接
redis-cli -p 6379
#断开客户端
shutdown
#退出
exit
# 数据库切换 默认16个
select 0
# 查看大小
datasize
# 查看数据库所有的key
keys *
# 清空当前库(所有库)
flushdb(flushall)
### 判断key是否存在
查看key类型
type name
所有的list命令都是l开头的,下面的基本数据结构都一样
127.0.0.1:6379> lrange l 0 3
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> linsert list before 2 0
hset key field value
hget key field
hget
hgetall
hlen
在set的基础上增加了一个值score(根据值排序)
zadd
zrem
不保证原子性
一个事务按照入队顺序执行
一个队列中命令错误对其他命令的影响
- 编译型错误:其他命令都不会执行
- 运行型错误:不影响其他命令的执行
开启事务(multi)
命令入队
执行事务(exec)
放弃事务(discard)


spring.redis.host=服务器公网ip
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfig {
/**
* 自定义 RedisTemplate 怒ban
*
* @param factory
* @return
*/
@Bean(name="myRedisTemplate")
@SuppressWarnings("all")
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
// 为开发方便,一般直接使用
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setConnectionFactory(factory);
// Json序列化配置
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
// String 的序列化
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
// key采用String的序列化方式
template.setKeySerializer(stringRedisSerializer);
// hash的key也采用String的序列化方式
template.setHashKeySerializer(stringRedisSerializer);
// value序列化方式采用jackson
template.setValueSerializer(jackson2JsonRedisSerializer);
// hash的value序列化方式采用jackson
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
}
注意 如果连接远程服务器需要更改服务器上的配置文件,然后重启redis(我就忘记了这点),不然会连接失败.
主机:负责写文件
从机:负责读文件(无法写入)
一个主机对应多个主机
复制2个redis.conf 文件,作为从机的配置文件
修改以下属性
前四个避免重复,最后一个代表这个主机为从机
从机在连接时至少会进行一次全量复制
哨兵进程监视这redis实例,但主机挂掉之后,通过让从机投票选举出新的主机
如果挂掉的主机回来,会变成从机
缺点:配置复杂,集群扩容困难
穿透:大量请求,但缓存都未命中,那么会给持久层数据库很大压力
击穿:一个key非常热点,大量用户并发集中对这一个点访问,当这个key过期瞬间,这些并发会访问数据库,给数据带来很大压力
雪崩:key集中过期或者redis接收数据量过大导致宕机