1.问题现象: 最近使用spring-data-redis 和jedis 操作redis时发现存储在redis中的key不是程序中设置的string值,前面还多出了许多类似\xac\xed\x00\x05t\x00这种字符串 2.原因: spring-data-redis的RedisTemplate<K, V>模板类在操作redis时默认使用JdkSerializationRedisSerializer来进行序列化. public void afterPropertiesSet() { sup…
原文链接:http://blog.csdn.net/yunhaibin/article/details/9001198 最近在研究redis,以及spring data对redis的支持发现了一个奇怪的现象 先说现象吧,通过redisTemplate下的opsForHash方法存储hash类型的值,操作成功以后,去redis控制台显示keys * 的时候,发现一个奇怪的现象,插入的hash类型的key前面会有一堆的\xac\xed\x00\x05t\x00\tb 这种东西,见图1 (图1) 看见…
原因分析 原因与RedisTemplate源码中的默认序列化方式有关 defaultSerializer = new JdkSerializationRedisSerializer( classLoader != null ? classLoader : this.getClass().getClassLoader());` 默认序列化使用的是JdkSerializationRedisSerializer,我们进去看看 public JdkSerializationRedisSerializer…
本文开发环境:SpringBoot+RedisTemplate 代码: /** * 缓存Map * * @param key * @param dataMap * @return */ @Override public <T> HashOperations<String, String, T> setCacheMap(String key, Map<String, T> dataMap) { HashOperations hashOperations = redisTe…
spring-data-redis的RedisTemplate<K, V>模板类在操作redis时默认使用JdkSerializationRedisSerializer来进行序列化解决方法,改成StringRedisSerializer private RedisTemplate redisTemplate; @Autowired(required = false) public void setRedisTemplate(RedisTemplate redisTemplate) { Redi…
原写法: @Autowired private RedisTemplate redisTemplate; 写入redis后,查看key值 127.0.0.1:6379> keys * 1) "\xac\xed\x00\x05t\x00#ContentPlatform2:ES:UpSertESContent" 2) "\xac\xed\x00\x05t\x00%ContentPlatform2:Lock_v16:CJH_ARTICLE" 3) "\xa…
  Redis Key 命令     del key1 key2 - keyn 删除键为key1,key2-keyn,空格分隔. persist key 移除给定 key 的生存时间,将这个 key 从『易失的』(带生存时间 key )转换成『持久的』(一个不带生存时间.永不过期的 key ). expire key seconds 为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除.http://redisdoc.com/key/expire.html pex…
设置redis key的生存过期时间 Redis 有四个不同的命令可以用于设置键的生存时间(键可以存在多久)或过期时间(键什么时候会被删除) : EXPlRE 命令用于将键key 的生存时间设置为ttl 秒. PEXPIRE 命令用于将键key 的生存时间设置为ttl 毫秒. EXPIREAT < timestamp> 命令用于将键key 的过期时间设置为timestamp所指定的秒数时间戳. PEXPIREAT < timestamp > 命令用于将键key 的过期时间设置为ti…
https://blog.csdn.net/zhu_tianwei/article/details/80169900 redis自2.8.0之后版本提供Keyspace Notifications功能,允许客户订阅Pub / Sub频道,以便以某种方式接收影响Redis数据集的事件. 可能收到的事件的例子如下: 所有影响给定键的命令. 所有接收LPUSH操作的密钥. 所有密钥在数据库中过期0. 因为 Redis 目前的订阅与发布功能采取的是发送即忘(fire and forget)策略, 所以如…
需求: 处理订单过期自动取消,比如下单30分钟未支付自动更改订单状态 用户绑定隐私号码当订单结束取消绑定等 解决方案1: 可以利用redis自带的key自动过期机制,下单时将订单id写入redis,过期时间30分钟,30分钟后检查订单状态,如果未支付,则进行处理但是key过期了redis有通知吗?答案是肯定的. 开启redis key过期提醒 修改redis相关事件配置.找到redis配置文件redis.conf,只需修改配置文件redis.conf中的:notify-keyspace-even…
需求: 处理订单过期自动取消,比如下单30分钟未支付自动更改订单状态 解决方案1: 可以利用redis天然的key自动过期机制,下单时将订单id写入redis,过期时间30分钟,30分钟后检查订单状态,如果未支付,则进行处理但是key过期了redis有通知吗?答案是肯定的. 开启redis key过期提醒 修改redis相关事件配置.找到redis配置文件redis.conf,查看“notify-keyspace-events”的配置项,如果没有,添加“notify-keyspace-event…
[Redis Key操作] 1.GETSET key value 将给定 key 的值设为 value ,并返回 key 的旧值(old value). 当 key 存在但不是字符串类型时,返回一个错误. 2.RENAME key newkey 将 key 改名为 newkey . 当 key 和 newkey 相同,或者 key 不存在时,返回一个错误. 当 newkey 已经存在时, RENAME 命令将覆盖旧值. 3.PERSIST key 移除给定 key 的生存时间,将这个 key 从…
书签系统 create table book ( bookid int, title char(20) )engine myisam charset utf8; insert into book values (5 , 'PHP圣经'), (6 , 'ruby实战'), (7 , 'mysql运维'), (8, 'ruby服务端编程'); create table tags ( tid int, bookid int, content char(20) )engine myisam charse…
一.实现目标 简洁,高效,可维护 二.键值设计规约 1 . Redis key命名风格 [推荐]Redis key命名需具有可读性以及可管理性,不该使用含义不清的key以及特别长的key名: [强制]以英文字母开头,命名中只能出现小写字母.数字.英文点号(.)和英文半角冒号(:): [强制]不要包含特殊字符,如下划线.空格.换行.单双引号以及其他转义字符: 2 .命名规范 [强制]命名规范:业务模块名:业务逻辑含义:其他:value类型 1 )业务模块名:具体的功能模块 2)逻辑含义段: [强制…
概述 今天主要介绍怎么统计redis key类型数据大小分布. 原理:使用redis命令: scan.pipline.type 和 debug object 来得到 redis key 信息. 脚本 内容如下: #!/usr/bin/python# -*- coding: utf-8 -*-import getoptimport timeimport sysimport redisimport osreload(sys)sys.setdefaultencoding('utf8') __Versi…
解决方案1: 可以利用redis天然的key自动过期机制,下单时将订单id写入redis,过期时间30分钟,30分钟后检查订单状态,如果未支付,则进行处理但是key过期了redis有通知吗?答案是肯定的. 开启redis key过期提醒 修改redis相关事件配置.找到redis配置文件redis.conf,查看“notify-keyspace-events”的配置项,如果没有,添加“notify-keyspace-events Ex”,如果有值,添加Ex,相关参数说明如下: K:keyspac…
talk is cheap, show me the code. 一.开启Redis key过期提醒 方式二:修改配置文件 redis.conf # 默认 notify-keyspace-events "" notify-keyspace-events Ex 方式二:命令行开启 CONFIG SET notify-keyspace-events Ex CONFIG GET notify-keyspace-events 二.notify-keyspace-events notify-ke…
Commands Clients Documentation Community Download Support License Join us in London October 19th for the 2nd Redis Developers Day 2015 and October 20th for the Redis Unconference London. Redis Keyspace Notifications IMPORTANT Keyspace notifications i…
EXPIRE key seconds 为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除. 在 Redis 中,带有生存时间的 key 被称为『易失的』(volatile). 生存时间可以通过使用 DEL 命令来删除整个 key 来移除,或者被 SET 和 GETSET 命令覆写(overwrite),这意味着,如果一个命令只是修改(alter)一个带生存时间的 key 的值而不是用一个新的 key 值来代替(replace)它的话,那么生存时间不会被改变. 比…
exists key del key1 key2 Redis 的vauleredis 提供五种数据类型:string,hash,list,set 及sorted set. string 是最基本的类型,而且string 类型是二进制安全的.意思是redis 的string 可以包含任何数据.比如jpg 图片或者序列化的对象.从内部实现来看其实string 可以看作byte数组,最大上限是1G 字节. set key value 设置 key对应 string 类型的值,返回 1 表示成功,0失败…
其实本质上,Redis 就是一个Key---Value 数据库.这里我先介绍下Redis中关于的key的相关命令, 注意:key是字符串存储,但是不能使用 空格 或者 “\n”,value 则可以使用任何字符串.(原因:\n 是命令的结束符,空格 是命令和参数的分隔符) 下面key相关命令 以及 部分实例 命令原型 时间复杂度 命令描述 返回值 KEYS pattern O(N) 时间复杂度中的N表示数据库中Key的数量.获取所有匹配pattern参数的Keys.需要说明的是,在我们的正常操作中…
key命令主要用于管理redis中的key del key //删除key, 不存在的key会忽略 dump key //序列化key,不存在的key返回nil exists key //判断key是否存在,存在1 不存在0 expire key seconds//设置key过期时间,成功1,不成功0 expireat key timestamp //设置key过期时间,成功1,不成功0 pexpireat key milli_timestamp //设置key过期毫秒时间,成功1,不成功0 p…
当redis被用作缓存时,有时我们希望了解key的大小分布,或者想知道哪些key占的空间比较大.本文提供了几种方法. 一. bigKeys 这是redis-cli自带的一个命令.对整个redis进行扫描,寻找较大的key.例: redis-cli -h b.redis -p --bigkeys 输出 # Scanning the entire keyspace to find biggest keys as well as # average sizes per key type. You ca…
redis命令列表中有两种方法可以全量导出所有的key: (1)keys 由于redis是单线程的,使用keys会导致redis服务阻塞,不建议线上服务采用这种方式. (2)scan 命令,下面是使用scan命令实现导出全量key的代码,每次扫1000个key,结果存放到指定的文件中 function redisScan($host, $port, $write_file = '/Users/admin/Documents/work/redis_test.txt') { $file_handle…
Redis 的 2.8.0 版本之后可用,键空间消息(Redis Keyspace Notifications),配合 2.0.0 版本之后的 SUBSCRIBE 就能完成这个定时任务的操作了,定时的单位是秒. 1.我们先订阅频道名为 redisChat   2.现在,我们重新开启个 redis 客户端,然后在同一个频道 redisChat 发布消息,订阅者就能接收到消息.   接收到的消息如下:   3.Key过期事件的Redis配置  这里需要配置 notify-keyspace-event…
redis 官方提供的 conf https://raw.github.com/antirez/redis/2.2/redis.conf 中6中过期策略的具体方式.redis 中的默认的过期策略是volatile-lru .设置方式 config set maxmemory-policy volatile-lru maxmemory-policy 六种方式 volatile-lru:只对设置了过期时间的key进行LRU(默认值) allkeys-lru : 删除lru算法的key volatil…
最近测试环境的redis经常性发生某些key丢失的问题,最终的找到的问题让人大吃一惊. 复盘一下步骤: 1.发现问题 不知道从某天开始,后台经常报错,原因是某些key丢失,一开始不在意,以为是小bug,后来越来越频繁. 2.检查代码 看看是不是有误删除的情况,这些key的访问范围很小,压根没有删除的逻辑,也没有设置过期时间,通过ttl命令检查也是如此. 3.实在没辙,开启monitor监控 本以为终极大招肯定能发现问题,陆续抓取了几个出问题时段的全部redis指令序列,没有发现任何可疑的指令,内…
概述 键空间通知使得客户端可以通过订阅频道或模式, 来接收那些以某种方式改动了 Redis 数据集的事件.如Redis数据库中键的过期事件也是通过订阅功能实现.本文主要基于Azure PaaS Redis演示相关功能的具体实现. 配置 因为开启键空间通知功能需要消耗一些 CPU , 所以在默认配置下, 该功能处于关闭状态.因为Azure Redis屏蔽了部分指令,不能直接使用cli指令设置notify-keyspace-events参数,目前可以通过Azure Portal管理门户直接设置.注意…
keys pattern 查询相应的key 在redis里,允许模糊查询key 有3个通配符 *, ? ,[] *: 通配任意多个字符 ?: 通配单个字符 []: 通配括号内的某1个字符 redis 127.0.0.1:6379> flushdb OK redis 127.0.0.1:6379> keys * (empty list or set) redis 127.0.0.1:6379> mset one 1 two 2 three 3 four 4 OK redis 127.0.0…
把表名转换为key前缀, 第二端放置表用于区分区key的字段–对应mysql中的主键的列名如userid. 3.放置主键值,如1,2,3,…..,a,b,c. 4.放要存储的列名 user表 userid user_name password email 1 zhangsan toor 666@abc.com set user:userid:1:user_name zhangsan set user:userid:1:password toor set user:userid:1:email 6…