在启动类或者配置类下添加,解决redis乱码问题
@Autowired
private RedisTemplate redisTemplate;
@Bean
public RedisTemplate redisTemplateInit() {
//设置序列化Key的实例化对象
redisTemplate.setKeySerializer(new StringRedisSerializer());
//设置序列化Value的实例化对象
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
Redis读写分离实现单机Redis的读写速度非常快,能够支持大量用户的访问。虽然Redis的性能很高,但是对于大型网站来说,每秒需要获取的数据远远超过单台redis服务所能承受的压力,所以我们迫切需要一种方案能够解决单台Redis服务性能不足的问题。
我们可以对读写能力扩展,采用读写分离的方式解决性能瓶颈。运行新的服务器(称为从服务器),让从服务器与主服务器进行连接,然后主服务器发送数据副本,从服务器通过网络根据主服务器的数据副本进行准实时更新(具体的更新速度取决于网络带宽)。
这样我们就有额外的从服务器处理读请求,通过将读请求分散到不同的服务器上面进行处理, 用户可以从新添加的从服务器上获得额外的读查询处理能力。
redis已经发现了这个读写分离场景特别普遍,自身集成了读写分离供用户使用。我们只需在redis的配置文件里面加上一条,slaveof host port
语句配置即可,我们现在开始配置主从环境。
执行命令
# 复制redis
cd /usr/local/redis/bin
cp bin redis01 -R
# 修改配置
vi redis.conf
修改 port 为 6380
添加 slaveof 192.168.137.140 6379
# 清空持久化文件
rm -rf dump.rdb
rm -rf appendonly.aof
# 启动
./redis-server redis.conf
分别连接主库(6379)和从库(6380),测试发现主库的写操作,从库立刻就能看到相同的数据。但是在从库进行写操作,提示 READONLY You can't write against a read only slave
不能写数据到从库。
现在我们就可以通过这种方式配置多个从库读操作,主库进行写操作,实现读写分离,以提高redis的QPS。
Redis常用操作
字符串常用操作
SET key value //存入字符串键值对
MSET key value [key value]//批量存储字符串键值对
SETNX key value//存入一个不存在的字符串键值对
GET key //获取一个字符串键值对
MGET key [key] //批量获取字符串的键值对
DEL key [key..]//删除一个键
EXPIRE key seconds //设置一个键的过期时间(秒)
原子加减
INCR key // 将一个key中存储的数字值加1
DECR key // 将一个key中的存储的数字值减1
INCRBY key increment // 将一个key中所存储的数字值加上increment
DECRBY key decrement //将一个key中所存储的数字减去decrement
Hash常用操作
HSET key field value //存储一个哈希表的key的键值
HSETNX key field value//存储一个不存在的哈希表的key的键值对
HMSET key field value [field value..]// 在一个哈希表key中存储多个键值对
HGET key fidle //获取哈希表key对应的field键值
HMGET key field [field..]//批量获取哈希表key中国多个field键值对
HDEL key field [field..]//删除哈希表key中field键值对
HLEN key //返回哈希表key中field的数量
HGETALL key//返回哈希表key中所有的键值对
HINCRBY key field increment //为哈希表key中field键的值加上增量increment