2.redis基本命令--哈希表

hash命令与string基本雷同,只不过是前面加个H,基本命令不进行阐述。

1.查看当前key类型

  • type keyname

2.查看hash中一个field中有多少个key

 

3.查看当前哪些field中含有这个key

  • hkeys keyname

4.可以查看当前key存在哪些field中,以及value值

  • hgetall keyname

5.返回hash表中key的所有field值

  • hvals keyname

6.hlen key

7.hstrlen key field

8.hincrby key field increment

9.hincrbyfloat key field increment

10.hmset key field value [field value...]

11.hmget key field [field value...]

12.hscan key cursor [match pattern] [COUNT count]

 

问题0:hset,hget和hmset,hmget的区别?

  • 经过测试,hset和hmset的使用是雷同的?我也很纳闷(redis5.0.5)?
  • hget一次只能获取一次,hmget一次可获取多个

问题1:redis中string的hash存储基本类似(key-value),区别是什么?

  • redis hash是一个string类型的field和value的映射表,它的操作,添加和删除都是O1。
  • hash特别适合存储对象,如果对象以string方式进行存储的话,就需要将对象拆成多个字符串。
  • 针对第二点,string类型也可以存储对象序列化。
  • 将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象,节省内存的原因是:新建一个hash对象时,开始时用zipmap(又称small hash)来存储的,这个zipmap其实并不是hash table,但是zipmap相比正常的hash实现可以节省不少hash本身需要的一些元数据存储开销。

问题2:redis中string和hash的使用场景

  • 过期事件:string可以设置过期事件,hash过期时间只能设置在大key上,单个field不可设置超时时间。
  • hash上单个不适合存储大量的field,并且field多个消费CPU,以散列表形式存储比较省内存。
  • 实际中:String存储单个大文本非结构化数据。
  • 实际中:Hash存储结构化数据,一个hash存储一条数据,一个field存储一条数据中的一个属性,value为属性值。

问题3:hash存储例子

  • 假如数据库中有一张表user 包含  id,name,age,sex 4个属性
  • 1、1,张三,16,1
  • 2、2,李四,22,1
  • 3、3,王五,28,0
  • 4、4,赵六,32,1
  • hset user_1 id 1 name 张三 age 16 sex 1
    hset user_2 id 2 name 李四 age 16 sex 1
    这样存储,如果用户的某个属性值改变,还可以单个修改。例如 吧张三的年龄改为30 则可以使用命令:  
    hset user_1 age 30
     

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值