redis key

本文介绍了Redis中索引命名、多级索引、数据批量插入及条件查询的方法,同时对比了NoSQL与传统关系数据库的区别,展示了如何利用Redis进行高效的数据存储与检索。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

索引命名 多级索引 +  数据批量插入 + 条件查询

string:定义顶级key 的过期时间,expire只对顶级key有效,


            redis.setex("website_google", 300, "www.google.cn"); 
            redis.setex("website_baidu", 300, "www.baidu.com"); 
            redis.setex("website_sina", 300, "www.sina.com"); 

        


索引规则:  key(表名 主键 列名)  val( 列值) | key(表名 列名 列值)  val( 主键列值) 


    $redis_key = Yii::app()->params['cache_key']['redis'];
                errorall();
                foreach($generalCache as $key=>$vals){
                   
                    Yii::app()->redis->getClient()->set($redis_key.$vals['id'].'pinyin', $vals['pinyin']);
                    Yii::app()->redis->getClient()->set($redis_key.$vals['id'].'pic', $vals['pic']);
                    Yii::app()->redis->getClient()->set($redis_key.$vals['id'].'name', $vals['name']);
                  
                }
                

                echo Yii::app()->redis->getClient()->get($redis_key.'1'.'pic');exit;


多级索引

list : app_id1  app_id2  app_id3  

hash:app_id1(app_name  app_date app_des ...)

nosql本质上跟关系数据库是有区别的,hash就是原始数据,list就相当于聚簇索引,
先从zset或list取出id,然后去hash里取出数据
,也可以直接把数据转换成json,存在zset或list里。

/* json_encode 批量插入

         * hset 批量插入
         * sadd 建立唯一索引
         * sinter smember 可做多条件查询

         */

         $redis = new Redis();
         $redis->connect('127.0.0.1', 6379,5);
         foreach($generalCache as $general){
               

$arr = array('name'=>$general['name'],'pic'=>$general['pic'],'des'=>$general['des']);
                $redis->set($general['pinyin'], json_encode($arr));


            }
           $general_hash->expire(3600);
           $re = $general_hash->getData();
           $re =$redis->keys('guan*');  


//keys 用来模糊搜索,但是效率不高,可用集合来实现

//建立索引
sadd man.age.20 1 3 5
sadd man.age.25 2 4


sadd man.name.zhangsan 1
sadd man.name.lisi 2
sadd man.name.wangwu 3
sadd man.name.zhaoliu 4
sadd man.name.maqi 5

sadd man.city.bj 1 4
sadd man.city.sh 2
sadd man.city.sz 2 5

查询:city=sz 的人
smembers man.city.sz

查询:age=20 的人
smembers man.age.20

查询:city=sz and age=20 的人
sinter man.city.sz man.city.20

### 解决 Redis Key 存储或显示时出现的乱码问题 当遇到 Rediskey 显示为乱码的情况,这通常不是 Redis 自身的问题,而是由于编码设置不当引起的。对于 Spring Boot 应用程序,在使用 `RedisTemplate` 进行操作时,默认情况下使用的序列化器可能会导致存储的数据无法正常解析。 为了确保 keys 和 values 能够被正确处理并避免乱码现象的发生,可以调整 `RedisTemplate` 的配置来指定合适的序列化策略: #### 配置自定义序列化器 可以通过修改 `RedisTemplate` 的键和值序列化器为字符串类型的实现,从而防止二进制数据引起的问题。下面是一个具体的 Java 代码示例展示了如何完成这一更改: ```java import org.springframework.context.annotation.Bean; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.StringRedisTemplate; @Bean public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory){ final var template = new StringRedisTemplate(); template.setConnectionFactory(redisConnectionFactory); // 设置key,value都采用String的方式序列化,而不是默认JDK序列化机制. template.afterPropertiesSet(); return template; } ``` 这段代码创建了一个名为 `stringRedisTemplate` 的 Bean,并将其连接工厂设定了给定的参数;同时指明所有的 key 和 value 将会以字符串形式进行序列化[^2]。 另外一种方法是在应用程序属性文件(application.properties 或 application.yml)里直接声明这些选项: ```properties spring.redis.template.key-serializer=org.springframework.data.redis.serializer.StringRedisSerializer spring.redis.template.value-serializer=org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer ``` 以上两种方式都可以有效地解决因序列化而导致的中文或其他字符集下的乱码情况。需要注意的是,如果之前已经存在了非 UTF-8 编码的数据,则可能还需要额外的工作来进行转换或者清理旧有数据[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值