Redis hash 类型及操作
原文:http://blog.sina.com.cn/s/blog_5f044a4d0102v01k.html
Redis hash是一个string类型的field和value的映射表.它的添加、删除操作都是 O(1) (平均)。
hash特别适合用于存储对象。相较于将对象的每个字段存成单个 string类型。将一个对象存
储在 hash 类型中会占用更少的内存,并且可以更方便的存取整个对象。省内存的原因是新
建一个hash对象时开始是用 zipmap(又称为small hash)来存储的。这个zipmap其实并不
是hash table,但是zipmap 相比正常的hash实现可以节省不少 hash本身需要的一些元数据
存储开销。尽管zipmap的添加,删除,查找都是 O(n),但是由于一般对象的 field数量都不
太多。所以使用 zipmap 也是很快的,也就是说添加删除平均还是 O(1)。如果 field 或者 value
的大小超出一定限制后, Redis会在内部自动将zipmap替换成正常的hash实现. 这个限制可
以在配置文件中指定
hash-max-zipmap-entries 64 #配置字段最多64个
hash-max-zipmap-value 512 #配置value 最大为512字节
1 hset
设置hash field为指定值,如果 key 不存在,则先创建。
redis 127.0.0.1:6379> hset myhash field1 Hello
(integer) 1
redis 127.0.0.1:6379>
2 hsetnx
设置hash field为指定值,如果 key 不存在,则先创建。如果 field已经存在,返回0,nx是
not exist的意思。
redis 127.0.0.1:6379> hsetnx myhash field "Hello"
(integer) 1
redis 127.0.0.1:6379> hsetnx myhash field "Hello"
(integer) 0
redis 127.0.0.1:6379>
第一次执行是成功的,但第二次执行相同的命令失败,原因是field已经存在了。
3 hmset
同时设置hash的多个field。
redis 127.0.0.1:6379> hmset myhash field1 Hello field2 World
OK
redis 127.0.0.1:6379>
4 hget
获取指定的hash field。
redis 127.0.0.1:6379> hget myhash field1
"Hello"
redis 127.0.0.1:6379> hget myhash field2
"World"
redis 127.0.0.1:6379> hget myhash field3
(nil)
redis 127.0.0.1:6379>
由于数据库没有field3,所以取到的是一个空值nil
5 hmget
获取全部指定的hash filed。
redis 127.0.0.1:6379> hmget myhash field1 field2 field3
1) "Hello"
2) "World"
3) (nil)
redis 127.0.0.1:6379>
由于数据库没有field3,所以取到的是一个空值nil
6 hincrby
指定的hash filed 加上给定值。
redis 127.0.0.1:6379> hset myhash field3 20
(integer) 1
redis 127.0.0.1:6379> hget myhash field3
"20"
redis 127.0.0.1:6379> hincrby myhash field3 -8
(integer) 12
redis 127.0.0.1:6379> hget myhash field3
"12"
redis 127.0.0.1:6379>
在本例中我们将field3 的值从20 降到了12,即做了一个减8 的操作。
7 hexists
测试指定field是否存在。
redis 127.0.0.1:6379> hexists myhash field1
(integer) 1
redis 127.0.0.1:6379> hexists myhash field9
(integer) 0
redis 127.0.0.1:6379>
通过上例可以说明field1存在,但field9是不存在的。
8 hlen
返回指定hash的field数量。
redis 127.0.0.1:6379> hlen myhash
(integer) 4
redis 127.0.0.1:6379>
通过上例可以看到myhash中有4 个field。
9 hdel
删除指定hash的field。
redis 127.0.0.1:6379> hlen myhash
(integer) 4
redis 127.0.0.1:6379> hdel myhash field1
(integer) 1
redis 127.0.0.1:6379> hlen myhash
(integer) 3
redis 127.0.0.1:6379>
10 hkeys
返回hash的所有field。
redis 127.0.0.1:6379> hkeys myhash
1) "field2"
2) "field"
3) "field3"
redis 127.0.0.1:6379>
说明这个hash中有3 个field
11 hvals
返回hash的所有value。
redis 127.0.0.1:6379> hvals myhash
1) "World"
2) "Hello"
3) "12"
redis 127.0.0.1:6379>
说明这个hash中有3 个field
12 hgetall
获取某个hash中全部的 filed及value。
redis 127.0.0.1:6379> hgetall myhash
1) "field2"
2) "World"
3) "field"
4) "Hello"
5) "field3"
6) "12"
redis 127.0.0.1:6379>
可见,一下子将myhash 中所有的field及对应的value 都取出来了。
Redis hash 类型及操作的更多相关文章
- Redis学习第三课:Redis Hash类型及操作
Redis hash是一个string类型的field和value的映射表.它的添加.删除操作都是O(1)(平均).hash特别适用于存储对象.相较于对象的每个字段存在单个string类型.将一个对象 ...
- StackExchange.Redis帮助类解决方案RedisRepository封装(散列Hash类型数据操作)
本文版权归博客园和作者本人共同所有,转载和爬虫请注明本系列分享地址:http://www.cnblogs.com/tdws/p/5815735.html 上一篇文章的不合理之处,已经有所修改. 今天分 ...
- 二:redis 的hash类型相关操作
=====================二种:hash类型================== 介绍:redis -> hash是一个string类型的field和value的映射表 hash ...
- Python(Redis 中 String/List/Hash 类型数据操作)
1.下载 redis 模块 pip install redis 2.redis 数据库两种连接方式 简单连接 decode_responses=True,写入和读取的键值对中的 value 为 str ...
- Redis - hash类型操作
hash 类型操作设置操作:hset: hset key filed value 创建指定key的filed-value名值对 hsetnx: hsetnx key file ...
- 第二课补充01——redis-cli命令行详解、string类型、list类型、hash类型命令操作详解
一. redis-cli命令行参数 1.-x参数:从标准输入读取一个参数: [问题] [解决] 因为echo命令是默认带有回车\n的,不带回车需要echo –n命令: echo -n "ha ...
- redis hash 类型的操作命令
redis 文档: https://redis.readthedocs.io/en/2.4/index.html keys * type key --------------------------- ...
- redis sets类型及操作
sets类型及操作set是集合,它是string类型的无序集合.通过hash table实现,添加.删除.查找的复杂度都是0(1).对集合我们可以实现取交际.差集并集.通过这些操作我们可以实现SNS中 ...
- Redis学习第二课:Redis String类型及操作
Strings类型 String是最简单的类型,一个Key对应一个Value,String类型是二进制安全的,可以包含任何数据,比如jpg图片或序列化的对象. Strings类型的操作: Set:设置 ...
随机推荐
- Python Tools
[TOC] Python virtualenv.fabric 和 pip 是 pythoneer 的三大神器 pip pip pip是一个安装和管理Python包的工具,是easy_install的一 ...
- javascript中函数的call,apply及bind方法
call 方法调用一个对象的一个方法,以另一个对象替换当前对象.call([thisObj[,arg1[, arg2[, [,.argN]]]]])参数thisObj可选项.将被用作当前对象的对象. ...
- 在TextView上显示图片信息
布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:t ...
- VBS调用keybd_event事件
----------------发送alt+v组合按键----------------------Set Wrap = CreateObject("DynamicWrapper") ...
- 用jQuery写的最简单的表单验证
近几天完成了关于我们项目的最简单的表单验证,是用jQuery写的,由于之前也一直没学过jQuery,所以自己也是一直处于边摸索边学习的阶段,经过这一段时间的学习,通过查资料啥的,也发现了学习jQuer ...
- 删除 mysql 日志文件后 ,启动出错
把 mysql-bin.index 里面的索引全部删除
- Python之路:爬虫之urllib库的基本使用和高级使用
关于爬虫自己一直在看,所以时间太慢,这才第二更,有等不及的小伙伴可以慢慢的品尝了,在看下面的之前,建议先把上一章看一下.以下是关于python的Urllib的基础和高级用法. 1.如何扒下一个网站,用 ...
- mysql中出现没有权限访问或者查看全部数据库的问题
在my.cnf中mysqld目录下的 socket=/var/lib/mysql/mysql.sock一行下面添加 skip_grant_tables---------------报错退出 serv ...
- Linux 配置VNC远程桌面
X11 提供的 display manager 为 xdm ,而著名的 KDE 与 GNOME 也都有自己的 display manager 管理程序,分别是 kdm 与 gdm .你可以透过三者中任 ...
- and的用法(&)
经常看到jq的源码中各种&连接在一起赋值一个变量, 例一: var b = a&&a.getName 例二: var b = a&&a.getName||d 例 ...