添加依赖:
org.apache.commons commons-pool2
添加相关配置(config)将bean对象交给spring管理
@Configuration
public class RedisTemplateConfig {
@Bean public RedisTemplateredisTemplate(RedisConnectionFactory factory) { RedisTemplate redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(factory); // 使用Jackson2JsonRedisSerialize 替换默认序列化 Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance , ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY); jackson2JsonRedisSerializer.setObjectMapper(objectMapper); // 设置value的序列化规则和 key的序列化规则 redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); redisTemplate.afterPropertiesSet(); return redisTemplate; } @Bean public CacheManager cacheManager(RedisConnectionFactory factory) { RedisSerializer redisSerializer = new StringRedisSerializer(); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); //解决查询缓存转换异常的问题 ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance , ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY); jackson2JsonRedisSerializer.setObjectMapper(om); // 配置序列化(解决乱码的问题),过期时间30秒 RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig() // .entryTtl(Duration.ofSeconds(1800000)) .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer)) .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)) .disableCachingNullValues(); RedisCacheManager cacheManager = RedisCacheManager.builder(factory) .cacheDefaults(config) .build(); return cacheManager; }
}
redis(String) 命令
flushdb 清空本数据库
flushall 清空所有数据
shutdown 关闭
exit 推出
keys * 查询所有数据
exists name 判断是否存在
move name 1 代表移除这个值
expire name 10 设置name过期时间10s
ttl name 查看剩余过期时间
type name 查看数值类型
append name 123 在原来的基础上进行拼接 返回字符串长度(如果该key值不存在,则表示set一个值)
incr num num值+1
decr num num值-1
incrby num 10 num+10
decrby num -5 num-5
getrange name 0 -1 截取name的全部值
setrange name 2 xx 从那么的第三个开始替代
setex name 10 shitou 设置kv值为10s的过期时间
setnx name jack 如果没有这个值,则设置,在分布式中较常用
mset k1 v1 k2 v2 k3 v3 批量设置kv值
mget k1 k2 批量取值
msetnx 批量设置多个值的时候,如果存在一个值,则都会失败,这是原子操作
getset 先取值,再存值
redis(List) 命令
lpush one 1 2 3 从左边开始添加值
rpush one 4 5 从右边开始添加值
lrange one 0 -1 取全部的值
lpop one 从左边移除一个值
rpop one 从右侧移除一个值
127.0.0.1:6379> lindex one 3 获取下表为3 的值
"4"
127.0.0.1:6379> llen one 获取长度
(integer) 5
ltrim one 0 2 截取三个值
rpoplpush one two 从one 的里面右边取一个值左侧存入 two
lset one 0 3 在list为one,修改下标为0 的值 改成3
linsert one after 4 5 在list 中元素为 4 的后面添加5
redis(set) 命令
sadd one 1 2 3 向里面添加值
smembers one 取出所有值
sismember one 5 查看set集合是否存在5
scard one 查看set元素个数
srem one 3 把one里面的3移除
srandmember one 随机取出一个数值 可以在末尾添加数值,表示随机取出多少个值
spop one 随机移除一个元素
smove one two 3 将集合one的3值移动到结合two里面
sdiff one two 两个集合比较,结果为two中没有的元素
sinsert one two 两个集合的交集
sunion one two 两个集合的并集(去重多余的了)
redis(hash) 命令 相当于map操作
hset stone one 1 存值
hget stone one 取值
hmset stone one 1 two 2 存多个值
hmget stone one two 取多个值
hgetall stone 取出所有值
hdel stone one 删除 stone 里面的one
hlen stone 获取kv键值对数量
hexists stone one 判断是否存在一个值
hkeys stone 查询所有key 的值
hvals stone 查询所有的values 的值
hincrby stone one 1 加一操作
hincrby stone one -1 减一操作
hsetnx stone two 3 如果不存在 two 这个kv键值对,则可以添加。否则写入失败
redis(zset)命令
zadd one 1 one 添加一个值
zadd one 1 one 2 two 添加多个值
zrange one 0 -1 取出多个值
zrangebyscore one -inf +inf 排序展示,从小往大的排序
zrangebyscore one 0 5000 withscores 范围(0 5000)内取值 ,且带有排序数值
zrem stone one 移除one
zrevrange stone 0 -1 从大到小排序
zcount stone 1 3 统计 1 到3 中间的值个数
redis 之三大特殊类型(geospatial)
geoadd china:city 116.40 39.9 beijing 121.47 31.23 shanghai 106.50 29.35 chongqing 114.05 22.52 shenzheng 120.16 30.24 hangzhou 108.96 34.26 xian(经度 维度 名称)
geopos china:city xian 取值坐标 可以同时获取多个
geodist china:city beijing shanghai km 计算两个城市之间的距离 单位km
georadius china:city 110 30 500 km withcoord 查询(经度110 维度30)500公里范围内的城市,展示出该城市的经纬度 可以展示数量(后面添加 count 1)
zrange china:city 0 -1 查询所有的值
zrem china:city beijing 移除北京
redis之三大特殊(hypeologlog)有一定容错性,占用12kb内存
pfadd one a b c e f 添加值
pfadd two e f g
pfmerge three one two 将one 与two 的值合并到three 并集 (同时去重)
pfcount three 统计three 的数据量
redis之三大特殊(bitmaps)位存储
setbit one 1 0 在one 里面存入 key 1 value 0
bitget one 1 取出one 里面 1 的value值
bitcount one 统计one 里面有多少个1
redis之事务(单条线程执行是原子性的,多线程不保证原子性)
multi 开启一个事务
set k1 v1 写入一个事务
exec 按顺序执行事务
discard 放弃事务
编译时异常,则整个事务都不会执行(如中途命令输错),如果是运行时异常,则会继续执行
set k1 v1
multi
incr k1(进行加一,会出错,因为不是数值类型)
set k2 v2
get k2
exec 结果显示后面的还是会继续执行
set money 100
watch money 开启监控
multi 开启事务
incrby money 20 新增20(如果此时另外开启一个线程对该值进行修改,则接下来的整个事务都会失败,只能重新开启事务)
exec 会失败
redis redis.conf 配置
bind 127.0.0.1 绑定ip 如果不注销,则默认只允许本地访问
protected-mode yes 保护模式 开启
daemonize yes 开启yes 才能后台运行(守护进程运行)
pidfile /var/run/redis_6379.pid 如果以后台运行,则需要指定一个pid文件
loglevel notice 日志级别 notice 是生产环境级别
logfile ""日志文件位置名称
持久化,在规定的时间/操作,会进行持久化
save 900 1 900秒 有一次操作,就进行持久化
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes 持久化出错,也要继续工作
rdbcompression yes 是否压缩rdb文件,默认开启压缩
rdbchecksum yes 保存rdb文件之前进行是否出错校验
dir ./ rdb 文件保存位置
config set requirepass stone 设置redis密码
maxclients 10000 用于设置同时多少个客户可以进行链接
maxmemory
maxmemory-policy noeviction 内存满了,处理策略
appendonly no 默认不开启aof持久化方式默认rdb
appendfilename "appendonly.aof" 持久化文件名字
#appendfsync always 每次修改就执行
appendfsync everysec 默认每秒同步一次 sync
# appendfsync no 不开启同步
如果aof文件出现错误,redis是不能够启动的,这个时候需要系统提供的工具进行恢复,redis-check-aof --fix
主从配置:
info replication 查看信息
redis.conf 多个文件修改 1,端口 2,日志名 3,pid名称 4,dump名称
完事了,每个服务端都是主要节点,这个时候,只需要修改从节点就可以了
slaveof ip port(指定哪个 ip 端口的为主要节点)
主机掉线了,从机仍旧链接主机,主机恢复之后,仍旧可以从主机上面获取数据。
通过命令指定的从机操作,从机掉线,如果重新上线,则从机变成新的主机,需要重新设置。
slaveof no one 使自己变成主机
编辑 sentinel.conf 文件 添加: sentinel monitor myredis6379 127.0.0.1 6379 1
表示监控的服务器,ip 和端口
启动哨兵 redis-sentinel sentinel.conf
大概3分钟左右 会重新选举,进行故障转移。如果之前的主机恢复了,只能归并到从机。
最后奉上redis命令大全(中文网)
Redis命令中心(Redis commands) -- Redis中国用户组(CRUG)