02_NoSQL数据库之Redis数据库:string类型和hash类型
Strings类型及操作
String是最简单的类型,一个key对应一个Value,String类型是二进制安全的。Redis的String可以包含任何数据,比如jpg图片或者序列化的对象。
Set
设置Key对应的值为string类型的value.
例如:我们添加一个name=lijie的键值对:
|
127.0.0.1:6379> set name toto OK //获取name的值: 127.0.0.1:6379> get name "toto" //再次重新设置name的值: 127.0.0.1:6379> set name totobrother OK 127.0.0.1:6379> get name "totobrother" |
setnx
设置key对应的值为string类型的value,如果key已经存在,返回0,nx是not
exist的意思。
也就是说,使用setnx来设置的时候,如果已经设置过了,返回0,取到的值是原来的值,没有设置过返回1。
|
127.0.0.1:6379> get name "totobrother" 127.0.0.1:6379> setnx name totobrother (integer) 0 127.0.0.1:6379> get name "totobrother" 127.0.0.1:6379> set age 20 OK 127.0.0.1:6379> setnx age2 20 (integer) 1 127.0.0.1:6379> setnx age2 40 (integer) 0 127.0.0.1:6379> get age2 "20" |
Setex
设置key对应的值为string类型的value,并指定此键值对应的有效期。
例如:我们添加一个haircolor=red的键值对,并指定有效期为10秒。
|
[toto@localhost bin]$ ./redis-cli 127.0.0.1:6379> setex haircolor 10 red OK 127.0.0.1:6379> get haircolor "red" 127.0.0.1:6379> get haircolor (nil) 127.0.0.1:6379> |
Setrange
设置指定key的value值的字符串。
例如:我们希望将lijie的126邮箱替换为gmail邮箱。
|
127.0.0.1:6379> set name OK 127.0.0.1:6379> get name "lijie@126.com" 127.0.0.1:6379> setrange name 6 gmail.com (integer) 15 127.0.0.1:6379> get name "lijie@gmail.com" 127.0.0.1:6379> |
mset (批量设置)
一次设置多个key的值成功返回OK表示所有的值都设置了,失败返回0表示没有任何值被设置。
|
127.0.0.1:6379> mset key1 lijie1 key2 lijie2 OK 127.0.0.1:6379> get key1 "lijie1" 127.0.0.1:6379> get key2 "lijie2" 127.0.0.1:6379> |
msetnx
一次设置多个key的值,成功返回OK表示所有的值设置了。失败返回0表示没有任何值被设置,但是不会覆盖已经存在的key.
|
127.0.0.1:6379> get key2 "lijie2" 如果一个已经设置过,那么都设置不成功。如果有一个设置成功了,都设置不成功了 127.0.0.1:6379> msetnx key4 lampbrother.net key5 lijie@lampbrother key2 toto (integer) 0 只有都没有设置过的,才可以进行设置。 127.0.0.1:6379> msetnx key4 lampbrother.net key5 lijie@lampbrother (integer) 1 127.0.0.1:6379> get key4 "lampbrother.net" 127.0.0.1:6379> get key5 "lijie@lampbrother" 127.0.0.1:6379> |
get
获取key对应的string值,如果key不存在返回nil
getset
:获取旧值,并设置新值。
设置key的值,并返回key的旧值。
|
127.0.0.1:6379> getset key6 30 (nil) 127.0.0.1:6379> get key6 "30" 127.0.0.1:6379> |
getrange
获取key的value值的子字符串。
|
127.0.0.1:6379> get key5 "lijie@lampbrother" 127.0.0.1:6379> getrange key5 3 10 "ie@lampb" 127.0.0.1:6379> |
mget (批量获取)
一次获取多个key的值,如果对应key不存在,则对应返回nil.
|
127.0.0.1:6379> mget key1 key2 key3 key4 key5 key6 1) "lijie1" 2) "lijie2" 3) (nil) 4) "lampbrother.net" 5) "lijie@lampbrother" 6) "30" 127.0.0.1:6379> |
incr
对key的值做加加操作,并返回新的值。
incrby
同incr类似,加指定值,key不存在时候会设置key,并认为原来的value是0.
|
127.0.0.1:6379> decr key6 (integer) -1 127.0.0.1:6379> decr key6 (integer) -2 127.0.0.1:6379> incr key6 (integer) -1 127.0.0.1:6379> incr key6 (integer) 0 127.0.0.1:6379> incrby key6 +5 (integer) 5 127.0.0.1:6379> incrby key +5 (integer) 5 127.0.0.1:6379> incrby key6 +5 (integer) 10 127.0.0.1:6379> get key6 "10" 127.0.0.1:6379> |
decr
对key的值做减减操作
decrby
同decr类似,减指定值。
|
127.0.0.1:6379>decr key6 (integer)37 127.0.0.1:6379>decr key6 (integer)36 127.0.0.1:6379>decrby key6 -3 (integer)33 |
append
给指定key的字符串追加value,返回新字符串值的长度。
append name@li-jie.me
|
127.0.0.1:6379> get name "totobrother" 127.0.0.1:6379> append name @li-jie.me (integer) 21 127.0.0.1:6379> get name "totobrother@li-jie.me" 127.0.0.1:6379> |
strlen(查看字符串的长度)
取指定key的value值的长度。
|
127.0.0.1:6379> get name "totobrother@li-jie.me" 127.0.0.1:6379> strlen name (integer) 21 127.0.0.1:6379> |
hashes类型
hashes类型及操作
Redis hash是一个string类型的field和value的映射表。它的添加、删除操作都是0(1)(平均)。hash特别适合用于存储对象。相较于将对象的每个字段存成当个string类型。将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象。
hset(设置hash表)
设置hash field为指定值,如果key不存在,则先创建。
|
hset hash表名 127.0.0.1:6379> hset myhash field1 hello (integer) 1 127.0.0.1:6379> hset user:001 name lijie (integer) 1 通过hget获得值,hget 127.0.0.1:6379> hget user:001 name "lijie" 127.0.0.1:6379> |
hsetnx
设置hash field为指定值,如果key不存在,则先创建。如果存在返回0.
|
127.0.0.1:6379> hsetnx user:002 name lamp (integer) 1 127.0.0.1:6379> hget user:002 name "lamp" 127.0.0.1:6379> hsetnx user:002 name lampbrother (integer) 0 127.0.0.1:6379> hget user:002 name "lamp" 127.0.0.1:6379> |
hmset
同时设置hash的多个field
hmget:获取全部指定的hash field
|
127.0.0.1:6379> hsetnx user:002 name lampbrother (integer) 0 127.0.0.1:6379> hget user:002 name "lamp" 127.0.0.1:6379> hmset user:003 name lijie age 20 sex 1 OK 127.0.0.1:6379> hget user:003 name "lijie" 127.0.0.1:6379> hget user:003 age "20" 127.0.0.1:6379> hget user:003 sex "1" 127.0.0.1:6379> hmget user:003 name age sex 1) "lijie" 2) "20" 3) "1" 127.0.0.1:6379> |
hincrby
指定的hash field加上给定值。对某一个键进行自增。
hexists
测试指定field是否存在。
|
127.0.0.1:6379> hexists user:003 name (integer) 1 |
hlen
返回指定hash的field数量。
|
127.0.0.1:6379> hlen myhash (integer) 1 127.0.0.1:6379> hlen user:001 (integer) 1 127.0.0.1:6379> hlen user:003 (integer) 3 127.0.0.1:6379> |
hdel
删除指定hash的field字段
hkeys:返回hash的所有field
|
127.0.0.1:6379> hkeys user:003 1) "name" 2) "age" 3) "sex" 127.0.0.1:6379> |
hvals:返回hash的所有value.
|
127.0.0.1:6379> hkeys user:003 1) "name" 2) "age" 3) "sex" 127.0.0.1:6379> hvals user:001 1) "lijie" 127.0.0.1:6379> hvals user:002 1) "lamp" 127.0.0.1:6379> hvals user:003 1) "lijie" 2) "20" 3) "1" 127.0.0.1:6379> |
hgetall
|
获取某个hash中全部的field及value. |
02_NoSQL数据库之Redis数据库:string类型和hash类型的更多相关文章
- 第一节: Redis之String类型和Hash类型的介绍和案例应用
一. String类型基础 1.类型介绍 典型的Key-Value集合,如果要存实体,需要序列化成字符串,获取的时候需要反序列化一下. 2. 指令Api说明 3.常用Api说明 (1).StringS ...
- Redis 笔记与总结2 String 类型和 Hash 类型
Linux 版本信息: cat /etc/issue 或cat /etc/redhat-release(Linux查看版本当前操作系统发行版信息) CentOS release 6.6 (Final) ...
- 【redis】02string类型和hash类型
Redis的数据类型 Redis主要分为五个数据类型,一个是string,最简单的一个数据类型,hash,list, 还有set集合,还有zset有序集合,这是咱们redis的五种基础类型, 接下 ...
- 第二节: Redis之Set类型和SortedSet类型的介绍和案例应用
一. Set类型基础 1. 类型说明 1个key→多个value,value的值不重复! Set一种无序且元素内容不重复的集合,不用做重复性判断了,和我们数学中的集合概念相同,可以对多个集合求交集.并 ...
- 【redis】04set类型和zset类型
sets类型 sets类型及操作 Set类型是一个集合,他是string类型的无序集合,也就是说咱们的set是没有顺序的, Set是通过hash table实现的,添加.删除和查找的复杂度都是 ...
- 关于 实体类中 时间字段 为string 类型和 datatime类型 比较
经发现, 数据库中保存时间格式数据 可以正常 排序, 数据中保存时间格式字符串 排序出现问题 /// <summary> /// 修改时间 /// </summary> pu ...
- C# string类型和byte[]类型相互转换
string类型转成byte[]: byte[] byteArray = System.Text.Encoding.Default.GetBytes ( str ); byte[]转成string: ...
- C++ unordered_map 在key为string类型和char*类型时测试时间性能差异
测试系统liunx centos6.5 代码如下 #include <string.h> #include <sstream> #include <list> #i ...
- string类型和int类型之间的转换
一.string转int 1. 使用string流 /* 字符串转整型 */ /* * istringstream:从 string 读取数据 * ostringstream:向 string 写入数 ...
随机推荐
- 解决nodejs中json序列化时Date类型默认为UTC格式
在nodejs中,json序列化时Date类型时,默认转为UTC格式. 如下图 上面只是一个例子,下面我用一个更具体化的例子来展示一个这个情况,我们在开发WEB项目中,经常用到Express组件, 我 ...
- 关闭默认共享,禁止ipc$空连接
关闭默认共享,禁止ipc$空连接 要防止别人用ipc$和默认共享入侵,需要禁止ipc$空连接,避免入侵者取得用户列表,并取消默认共享 禁止ipc$空连接进行枚举运行regedit,找到如下组键[HKE ...
- DDD实战进阶第一波(七):开发一般业务的大健康行业直销系统(实现产品上下文接口与测试)
前一篇文章我们介绍了如何将创建产品的领域逻辑与产品的持久化仓储通过上架产品的用例组织起来,完成了一个功能.在实际的项目中,多种前端的形态比如PC Web. 微信小程序.原生APP等要调用后端的功能,通 ...
- React 关于组件(界面)更新
在最近在学 React , 将组件的UI更新稍微整理了一下.根据业务要求,可能会出现如下的技术实现要求:1.更新自己2.更新子组件3.更新兄弟组件4.更新父组件5.父 call 子 function ...
- vmware虚拟机CentOS7安装oracle数据库
想用linux虚拟机装一个oracle,中间遇到的坑太多了,最后总算是安装好了,一定要写个全面的教程出来. 话不多说 通用编辑命令: vi test.txt #进入编辑模式 编辑完成后按ESC退出 ...
- 【ASP.NET Core】给中间件传参数的方法
最近博客更新频率慢了些,原因有三: 其一,最近老周每星期六都录 ASP.NET Core 的直播,有些内容在视频里讲过,就不太想在博客里面重复.有兴趣的话可以去老周的微博看,或者去一直播,直播帐号与微 ...
- C++雾中风景8:Lambda表达式
上一篇C++的博客是Long Long ago了,前文讲到在看Lambda表达式的内容.笔者首次接触Lambda表达式应该是学习Python语言的时候,当时也不太明白这种表达方式的精髓,后续接触了Sc ...
- 聊聊jstack的工作原理
实现一个jstack 在聊Jstack得工作原理前呢,不如让我们先写一个简单的jstack玩玩.不用怕,很简单的,就几行代码的事,看: public class MyJstack { public s ...
- 【移动开发】targetSdkVersion的作用
在AndroidMenifest.xml中,常常会有下面的语句: <uses-sdk android:minSdkVersion="4" android:targetSdkV ...
- 《Non-Negative Matrix Factorization for Polyphonic Music Transcription》译文
NMF(非负矩阵分解),由于其分解出的矩阵是非负的,在一些实际问题中具有非常好的解释,因此用途很广.在此,我给大家介绍一下NMF在多声部音乐中的应用.要翻译的论文是利用NMF转录多声部音乐的开山之作, ...