精华内容
下载资源
问答
  • 主要介绍了浅谈python处理json和redis hash的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • Redis hash 命令 Redis list 命令 https://github.com/Haiyoung/learning-and-preparing-for-interview/blob/dev/redis.md Redis hash 命令 HSET key field value 将哈希表 key 中的字段 field 的值设为 ...
     
     
    

    https://github.com/Haiyoung/learning-and-preparing-for-interview/blob/dev/redis.md

    Redis hash 命令

    • HSET key field value 将哈希表 key 中的字段 field 的值设为 value
    • HGET key field 获取存储在哈希表中指定字段的值
    • HMSET key field1 value1 [field2 value2 ] 同时将多个 field-value (域-值)对设置到哈希表 key 中
    • HGETALL key 获取在哈希表中指定 key 的所有字段和值
    • HSETNX key field value 只有在字段 field 不存在时,设置哈希表字段的值
    • HKEYS key 获取所有哈希表中的字段
    • HVALS key 获取哈希表中所有值
      python
      redis-S:6379> hset hashTest id dog
      (integer) 1
      redis-S:6379> hget hashTest id
      "dog"
      redis-S:6379> hmset hashTest name dog_1 food bond_1
      OK
      redis-S:6379> hgetall hashTest
      1) "id"
      2) "dog"
      3) "name"
      4) "dog_1"
      5) "food"
      6) "bond_1"
      redis-S:6379> hsetnx hashTest id cat
      (integer) 0
      redis-S:6379> hgetall hashTest
      1) "id"
      2) "dog"
      3) "name"
      4) "dog_1"
      5) "food"
      6) "bond_1"
      redis-S:6379> hkeys hashTest
      1) "id"
      2) "name"
      3) "food"
      redis-S:6379> hvals hashTest
      1) "dog"
      2) "dog_1"
      3) "bond_1"
      redis-S:6379>
    • HLEN key 获取哈希表中字段的数量
    • HDEL key field1 [field2] 删除一个或多个哈希表字段
    • HEXISTS key field 查看哈希表 key 中,指定的字段是否存在
    • HMGET key field1 [field2] 获取所有给定字段的值
      python
      redis-S:6379> keys *
      1) "hashTest"
      redis-S:6379> hlen hashTest
      (integer) 3
      redis-S:6379> hdel hashTest id
      (integer) 1
      redis-S:6379> hlen hashTest
      (integer) 2
      redis-S:6379> hgetall hashTest
      1) "name"
      2) "dog_1"
      3) "food"
      4) "bond_1"
      redis-S:6379> hexists hashTest id
      (integer) 0
      redis-S:6379> hexists hashTest name
      (integer) 1
      redis-S:6379> hmget hashTest name food
      1) "dog_1"
      2) "bond_1"
      redis-S:6379>
    • HINCRBY key field increment 为哈希表 key 中的指定字段的整数值加上增量 increment
    • HINCRBYFLOAT key field increment 为哈希表 key 中的指定字段的浮点数值加上增量 increment
      python
      redis-S:6379> keys *
      1) "hashTest"
      redis-S:6379> hmset hashTest002 f1 1 f2 2 f3 3
      OK
      redis-S:6379> hgetall hashTest002
      1) "f1"
      2) "1"
      3) "f2"
      4) "2"
      5) "f3"
      6) "3"
      redis-S:6379> hincrby hashTest002 f3 2
      (integer) 5
      redis-S:6379> hincrbyfloat hashTest002 f1 1.1
      "2.1"
    • HSCAN key cursor [MATCH pattern] [COUNT count] 迭代哈希表中的键值对
      python
      #SCAN 命令是一个基于游标的迭代器(cursor based iterator): SCAN 命令每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数, 以此来延续之前的迭代过程。
      #当 SCAN 命令的游标参数被设置为 0 时, 服务器将开始一次新的迭代, 而当服务器向用户返回值为 0 的游标时, 表示迭代已结束
      # match 可以返回匹配的键值对
      # COUNT 选项的作用就是让用户告知迭代命令, 在每次迭代中应该从数据集里返回多少元素
      # 虽然 COUNT 选项只是对增量式迭代命令的一种提示(hint),但是在大多数情况下, 这种提示都是有效的(数据量少时不生效)
      redis-S:6379> hscan hashTest002 0
      1) "0"
      2) 1) "f1"
      2) "2.1"
      3) "f2"
      4) "2"
      5) "f3"
      6) "5"
      redis-S:6379> hscan hashTest002 0 match *2
      1) "0"
      2) 1) "f2"
      2) "2"
      redis-S:6379> hscan hashTest002 0 match *2 count 3
      1) "0"
      2) 1) "f2"
      2) "2"
      redis-S:6379>

    Redis list 命令

    • RPUSH key value1 [value2] 在列表中添加一个或多个值
    • LPUSH key value1 [value2] 将一个或多个值插入到列表头部
    • LRANGE key start stop 获取列表指定范围内的元素
    • LPOP key 移除并获取列表的第一个元素
    • RPOP key 移除并获取列表最后一个元素
    • LPUSHX key value 将一个值插入到已存在的列表头部
    • RPUSHX key value 为已存在的列表添加值
    • LLEN key 获取列表长度
      python
      redis-S:6379> keys *
      (empty list or set)
      redis-S:6379> rpush listTest 001
      (integer) 1
      redis-S:6379> lrange listTest 0 -1
      1) "001"
      redis-S:6379> lpush listTest 002
      (integer) 2
      redis-S:6379> lrange listTest 0 -1
      1) "002"
      2) "001"
      redis-S:6379> lpop listTest
      "002"
      redis-S:6379> rpop listTest
      "001"
      redis-S:6379> lrange listTest 0 -1
      (empty list or set)
      redis-S:6379> keys *
      (empty list or set)
      redis-S:6379> lpushx listTest 003
      (integer) 0
      redis-S:6379> rpush listTest 001
      (integer) 1
      redis-S:6379> lpushx listTest 003
      (integer) 2
      redis-S:6379> lrange listTest 0 -1
      1) "003"
      2) "001"
      redis-S:6379> rpushx listTest 004
      (integer) 3
      redis-S:6379> lrange listTest 0 -1
      1) "003"
      2) "001"
      3) "004"
      redis-S:6379> llen listTest
      (integer) 3
      redis-S:6379>
    • LINSERT key BEFORE|AFTER pivot value 在列表的元素前或者后插入元素(如果命令执行成功,返回插入操作完成之后,列表的长度。 如果没有找到指定元素 ,返回 -1 。 如果 key 不存在或为空列表,返回 0)
    • LINDEX key index 通过索引获取列表中的元素
      python
      redis-S:6379> lrange listTest 0 -1
      1) "003"
      2) "001"
      3) "004"
      redis-S:6379> lindex listTest 1
      "001"
      redis-S:6379> linsert listTest before "001" "009"
      (integer) 4
      redis-S:6379> lrange listTest 0 -1
      1) "003"
      2) "009"
      3) "001"
      4) "004"
      redis-S:6379> linsert listTest after "001" "006"
      (integer) 5
      redis-S:6379> lrange listTest 0 -1
      1) "003"
      2) "009"
      3) "001"
      4) "006"
      5) "004"
      redis-S:6379>
    • LREM key count value 移除列表元素
      • Redis Lrem 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素
      • count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT
      • count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值
      • scount = 0 : 移除表中所有与 VALUE 相等的值
        python
        redis-S:6379> lrange listTest 0 -1
        1) "003"
        2) "009"
        3) "001"
        4) "006"
        5) "004"
        6) "003"
        7) "003"
        8) "001"
        9) "001"
        10) "003"
        redis-S:6379> lrem listTest 2 003
        (integer) 2
        redis-S:6379> lrange listTest 0 -1
        1) "009"
        2) "001"
        3) "006"
        4) "004"
        5) "003"
        6) "001"
        7) "001"
        8) "003"
        redis-S:6379> lrem listTest 2 003
        (integer) 2
        redis-S:6379> lrange listTest 0 -1
        1) "009"
        2) "001"
        3) "006"
        4) "004"
        5) "001"
        6) "001"
        redis-S:6379> lrem listTest 0 001
        (integer) 3
        redis-S:6379> lrange listTest 0 -1
        1) "009"
        2) "006"
        3) "004"
        redis-S:6379>
    • LSET key index value 通过索引设置列表元素的值
    • LTRIM key start stop 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除
      python
      redis-S:6379> lrange listTest 0 -1
      1) "009"
      2) "006"
      3) "004"
      redis-S:6379> lset listTest 1 008
      OK
      redis-S:6379> lrange listTest 0 -1
      1) "009"
      2) "008"
      3) "004"
      redis-S:6379> ltrim listTest 1 -1
      OK
      redis-S:6379> lrange listTest 0 -1
      1) "008"
      2) "004"
      redis-S:6379>
    • BLPOP key1 [key2 ] timeout 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
    • BRPOP key1 [key2 ] timeout 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
    • RPOPLPUSH source destination 移除列表的最后一个元素,并将该元素添加到另一个列表并返回
    • BRPOPLPUSH source destination timeout 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
      Redis list commond
    展开全文
  • ThinkPHP5 对Redis Hash 的使用

    千次阅读 2019-04-29 11:47:21
    引入第三方的RedisHash类 个人喜欢把这种第三方引入的类库放到一个Service里面。 如图: 使用起来也是很方便 如果在同级的Service 里面 直接用比如:$online = RedisHash::instance()->setHashKey("loginToken:...

    引入第三方的RedisHash类

    个人喜欢把这种第三方引入的类库放到一个Service里面。 如图:
    	使用起来也是很方便 如果在同级的Service 里面 直接用比如:$online = RedisHash::instance()->setHashKey("loginToken:writeToken");
    	如何在其他的地方。就需要 use app/api/RedisHash;  
    

    在这里插入图片描述

    设置Key

    在这里插入图片描述

    给当前的key赋值

    成功true 失败false

    获取值

    在这里插入图片描述

    总之 多看看就好了

    展开全文
  • 通过@RedisHash注解存储实体到redis

    千次阅读 2020-03-23 13:41:35
    通过@RedisHash注解存储实体到redis新建一个实体,使用@RedisHash注解标识新建Dao层接口,并继承CrudRepository接口实现相关方法最后即可通过接口方法进行相关的处理如下代码,包括存储和读取合理的创建标题,有助于...

    新建一个实体,使用@RedisHash注解标识

    如下代码: 在实体中需要将某个属性标识为唯一id,**添加@Id注解;**然而如果需要该实体在redis存储中拥有生命周期,添加@TimeToLive注解;以秒为单位,可根据需要设置其失效时间;

    import lombok.Data;
    import org.springframework.data.annotation.Id;
    import org.springframework.data.redis.core.RedisHash;
    import org.springframework.data.redis.core.TimeToLive;
    /**
     * @author: SUN
     * @version: 1.0
     * @date: 2020/3/20 15:49
     * @description:
     */
    @RedisHash
    @Data
    public class TestEntity {
        @Id
        private String phone;
        private String name;
        @TimeToLive
        private Long time;
    }
    

    新建Dao层接口,并继承CrudRepository接口实现相关方法

    import com.touchspring.isite.base.entity.TestEntity;
    import org.springframework.data.repository.CrudRepository;
    import org.springframework.stereotype.Repository;
    
    /**
     * @author: SUN
     * @version: 1.0
     * @date: 2020/3/20 15:53
     * @description:
     */
    
    @Repository
    public interface TestEntityDao extends CrudRepository<TestEntity, String> {
    }
    
    

    然后通过控制层进行接口测试

    • 首先进行存储操作,通过调用 testEntityDao接口下面的save()方法进行实现。
      @PostMapping(value = "/test/save")
        public ResultData testEntity() {
            TestEntity testEntity = new TestEntity();
            testEntity.setPhone("18803838082");
            testEntity.setName("sun");
            testEntity.setTime(60L);
            testEntityDao.save(testEntity);
            return ResultData.ok();
        }
    

    如下图所示,通过条用接口方法即可将数据保存至redis中,并在有效时间内可通过get方法进行读取。本次设置时长为60秒。
    在这里插入图片描述

    • 下面将通过GET请求进行数据读取,若设置时间未过期,将可以根据设置的@Id 进行读取。
           @PostMapping(value = "/test/get")
        public ResultData testEntity1() {
            Optional<TestEntity> optionalTestEntity = testEntityDao.findById("18803838082");
            if (optionalTestEntity.isPresent()) {
                TestEntity testEntity = optionalTestEntity.get();
                System.out.println(" - --  -" + testEntity.getName());
                System.out.println(" - --  -" + testEntity.getPhone());
                System.out.println(" - --  -" + testEntity.getTime());
                return ResultData.ok().putDataValue("testEntity", testEntity);
    
            } else {
                return new ResultData(1500, "数据信息不存在,或已过期");
            }
        }
     
    

    如下图,我们读取的结果中,time字段的值存在变化,此时返回的值是该条数据的生命周期剩余时间,单位S秒。
    在这里插入图片描述
    如果超出时间将返回如下信息
    在这里插入图片描述
    至此,我们完成了通过@RedisHash注解和继承**CrudRepository<TestEntity, String>**接口实现了redis存储数据,并设置了数据信息的生命周期,此方法适用于验证码校对时进行有效期验证。

    展开全文
  • redis hash集合的增删改查

    redis hash集合的增删改查

    展开全文
  • C#操作Redis Hash数据表

    千次阅读 2018-02-05 10:49:00
    /// <summary> /// Redis Hash /// </summary> public static void Redis_Hash() { RedisClient client = new RedisClient("127.0.0.1", 6379)...
  • Redis hash tag

    千次阅读 2021-02-08 16:54:33
    当我们提交了一批命令,往Redis中存储一批键,那么这些键一般会被映射到不同的slot,而不同的slot又可能在Redis Cluster中不同的节点上,这样就和的预期有点不同,有没有办法将这批键映射到同一个slot呢?...
  • 使用Spring Data Redis 在对象实体类前面使用@RedisHash() 注解,使用CrudRepository<Class, Long> 提供的方法进行简单查询存储操作,但是发现存入到redis 中的数据类型为Set,不是Hash, 解决: 在对象实体...
  • Redis Hash类型数据常用命令总结

    千次阅读 2013-07-22 09:23:46
    Redis Hash类型数据常用命令总结 Hash是一种数据结构,一般翻译做“散列”,也有直接音译为“哈希”。Redis hash 是一个string类型的field和value的映射表。它特别适合用于存储对象。同将对象的每个字段存成单个...
  • redis Hash

    千次阅读 2019-02-21 17:31:27
    Redis 集群的键空间被分割为 16384 hash个槽(slot), 集群的最大节点数量也是 16384 个 关系:cluster&gt;node&gt;slot&gt;key 分片: Redis Cluster在设计中没有使用一致性哈希(Consistency ...
  • # redis hash使用 $redis = new Redis(); $redis -> open( '**.**.**.**' ); $redis -> hSet('user_info' , 'user_name_01' , 'zhangsan' ); $redis -> hSet('user_info' , 'user_sex_01' , 'boy' ); $redi
  • Redis Hash数据结构的底层实现

    万次阅读 2019-06-23 21:44:58
    redis是KV型的内存数据库, 数据库存储的核心就是Hash表, 我们执行select命令选择一个存储的db之后, 所有的操作都是以hash表为基础的, 下面会分析下redishash数据结构和实现. 1.hash数据结构 /*Hash表一个节点...
  • Redis Hash操作

    千次阅读 2013-05-29 14:43:42
    redis 127.0.0.1:6379> hset user user2 9000 (integer) 1 redis 127.0.0.1:6379> hset uset user3 8000 (integer) 1 redis 127.0.0.1:6379> hset user user3 8000 (integer) 1 redis 127.0.0.1:6379> hset us
  • 学习 Redis Hash(哈希表)

    万次阅读 2019-09-20 15:59:30
    rg.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import org.springframework.data.redis.core.Cursor; import ...
  • PHP Redis hash删除相关

    千次阅读 2018-03-20 17:00:49
    //删除整个key $redis-&gt;del('keyname'); //删除指定key中的指定字段 $redis-&gt;hdel('keyname','field');...删除一个redis的key都是用del方法, 不管是string,hash,list,set等类型, 都一样...
  • echo "HGETALL hot_score_order" | redis-cli -h 10.2.xx.xx -p 6379 -a password | xargs -n 2 |awk -F" " -v KEYNAME=hot_score_order '{print "HSET "KEYNAME " " $1, "\""$2"\""}' >> type.raw 2,导入...
  • 使用StringRedisTemplate存Hash值到Redis数据库中 注解StringRedisTemplate @Autowired StringRedisTemplate stringRedisTemplate; 把hash值存进redis @Test public void setRedisMap...
  • Redis Hash序列化存储问题及解决

    万次阅读 2017-05-08 14:11:26
    这里说的是Spring Data Redis(一下简称SDR)设置Hash存储的序列化。SDR序列化方式有多种,如:StringRedisSerializer、JdkSerializationRedisSerializer、Jackson2JsonRedisSerializer、OxmSerializer等等。目前...
  • Redis HASH 操作类型封装

    千次阅读 2015-08-28 10:44:32
    如下是我项目中用到的,redis操作hash表时的类,自我封装了所有对hash的操作.经过测试通过 头文件 #pragma once class redisOperator { private: //一个操作redis数据库的句柄 redisContext *c; public: ...
  • redis hash结构如何设置过期时间

    千次阅读 2019-05-11 10:21:00
    Redis中有个设置时间过期的功能,即通过setex或者expire实现,目前redis没有提供hsetex()这样的方法,redis中过期时间只针对顶级key类型,对于hash类型是不支持的,这个时候,我们可以采用,所以如果想对hash进行...
  • redis hash field过期设置的替换方案

    千次阅读 2020-04-18 19:10:53
    redis本身就相当于一个hash对象,直接把hashkey中的field value作为普通String类型,key,value 控制好key的名称,不合适的地方就在于如果数据量很大就需要修改过期策略,不然redis实时监控直接删除过期数据这种方式...
  • 摘要 上一篇讲述了安装redis客户端和服务器端,也大体地介绍了一下redis。本篇着重讲解.NET4.0 和 .NET4.5中如何使用redis和C# redis操作哈希表。并且会将封装的一些代码...hash哈希表简介 这里仅仅是对哈希表作简单
  • Java中使用Redis Hash的3种方法

    万次阅读 2019-02-22 14:21:56
    已经有越来越多的Java库与Redis进行对话,其中大多数都提供了与Redis哈希进行交互的方法。让我们通过使用三个最流行的Redi Java客户机JEDIS、Spring Data Redis和Redisson的例子,来比较Java中三种不同的与...
  • 上一篇博文中 讲了redisTemplate的hash数据类型存储{key(String)-&...开始测试的时候,报错为 object can not cast to object,发现redishash类型只能存储string类型的数据。后经翻阅资料,找...
  • //伪代码 Object object = new Object(); ObjectWapper object = new ObjectWapper...redis.hput(key,object); get 获取到以后判断时间是否过期,过期则调用删除。 若要删除大key,则可以清除整个hash 缓存数据。 ...
  • Redis Hash类型(Map )数据操作指令

    千次阅读 2019-07-09 18:17:05
    我们可以将Redis中的Hashes类型看成具有String Key和String Value的map容器。 所以该类型非常适合于存储值对象的信息。如Username、Password和Age等。如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的...
  • redis hash(k-value(kv))

    千次阅读 2018-04-11 19:55:17
    我们简单举个实例来描述下Hash的应用场景,比如我们要存储一个用户信息表数据,包含以下信息: 用户ID为查找的key,存储的value用户对象包含姓名,年龄,生日等信息,如果用普通的key/value结构来存储,主要有以下2...
  • python处理json和redis hash的坑

    千次阅读 2017-03-31 08:35:13
    1、使用MySQLdb读取出来的数据是unicode字符串,如果要写入redishash中会变成 "{u'eth0_outFlow': 2.5, u'eth1_inFlow': 3.44}" 无法使用json.loads,需要提前将unicode转成str: str(eth0_outFlow) 2、单...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 147,527
精华内容 59,010
关键字:

redishash

redis 订阅