Linux 版本信息:
cat /etc/issue 或cat /etc/redhat-release(Linux查看版本当前操作系统发行版信息) CentOS release 6.6 (Final)

(一)String 类型

【定义】string 是最简单的类型,你可以理解成与 Memcached 是一模一样的类型,一个 key 对应一个 value,其上支持的操作与 Memcached 的操作类似。但它的功能更丰富。

string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据, 比如 jpg 图片或者序 列化的对象。 从内部实现来看其实 string 可以看作 byte 数组,最大上限是 1G 字节。

【操作】

set 方法

设置 key 对应的值为 string 类型的 value。

【例】添加 name = dee 的键值对:

127.0.0.1:> set name dee
OK

设置成功。

② get 方法

【例】

127.0.0.1:> get name
"dee"

获取成功。

再次设置 name = deathmask,值会被覆盖:

127.0.0.1:> set name deathmask
OK
127.0.0.1:> get name
"deathmask"

setnx 方法

设置 key 对应的值为 string 类型的 value,如果 key 已经存在,返回 0,nx 表示 not exist。

【例】

127.0.0.1:> setnx name dee
(integer) 0 127.0.0.1:> setnx app weibo
(integer) 1 127.0.0.1:> get name
"deathmask" 127.0.0.1:> get app
"weibo"

表示 name 已经存在而且没有更改,app 不存在则成功 set。

setex 方法

设置 key 对应的值为 string 类型的 value,并指定  此键值 对应的有效期。

【例】

127.0.0.1:> setex mobile  iphone
OK
127.0.0.1:> get mobile
"iphone" 127.0.0.1:> get mobile
"iphone" 127.0.0.1:> get mobile
(nil)

设置 mobile 的值为 iPhone,并且指定有效期为 10 秒。

setrange 方法

设定指定 key 的 value 值的子字符串

【例】将 dee 的 126 邮箱 替换为 gmail 邮箱

127.0.0.1:> set email dee@.com
OK
127.0.0.1:> get email
"dee@126.com" 127.0.0.1:> setrange email gmail.com
(integer) 13 127.0.0.1:> get email
"dee@gmail.com"

其中 4 代表下标,(integer) 13 表示字符串的长度。

【例2】

127.0.0.1:> set email dee@vip.ofim.com
OK
127.0.0.1:> get email
"dee@vip.ofim.com" 127.0.0.1:> setrange email gmail.com
(integer) 16 127.0.0.1:> get email
"dee@gmail.comcom"

说明:如果替换的字符串没有源字符串长,则只会把源字符串中相同长度的字符替换掉,同时保留源字符串中剩余的字符。

mset 方法

一次设置多个 key 值,成功返回 ok,表示所有的值都设置了,失败返回 0,表示没有任何值被设置。

【例】

127.0.0.1:> mset key1 dee1 key2 dee2
OK
127.0.0.1:> get key1
"dee1" 127.0.0.1:> get key2
"dee2"

msetnx 方法

一次设置多个 key 的值,成功返回 1,表示所有的值都被设置了。失败返回 0 ,表示没有任何值被设置,但是不会覆盖已经存在的 key。

127.0.0.1:> msetnx key3 dee3 key4 dee4
(integer) 1 127.0.0.1:> msetnx key3 dee333 key4 dee444 key5 dee5
(integer) 0 127.0.0.1:> get key3
"dee3" 127.0.0.1:> get key4
"dee4" 127.0.0.1:> get key5
(nil)

getset 方法

设置 key 的值,并返回 key 的旧值。

【例】

127.0.0.1:> getset key1 emperor
"dee1"

getrange 方法

获取 key 的 value 值的子字符串。

127.0.0.1:> get email
"dee@gmail.comcom" 127.0.0.1:> getrange email
"dee@gmail.com"

返回第 0 到第12 个字符。

mget 方法

一次获取多个 key 的值,如果对应 key 不存在则对应返回 nil。

【例】

127.0.0.1:> mget key1 key2 key3 key4 key5
) "emperor"
) "dee2"
) "dee3"
) "dee4"
) (nil)

incr 方法
对 key 的值做 加加 操作,并返回新的值。

【例】每次递增1

127.0.0.1:> set age
OK
127.0.0.1:> get age
"" 127.0.0.1:> incr age
(integer) 29 127.0.0.1:> incr age
(integer) 30 127.0.0.1:> get age
""

【例2】

127.0.0.1:> get real-age
(nil)
127.0.0.1:> incr real-age
(integer) 1 127.0.0.1:> get real-age
""

incrby 方法

同 incr 方法类似,加指定值,key 不存在时会设置 key,并认为原来的 value 为 0。

【例】

127.0.0.1:> get times
(nil)
127.0.0.1:> incrby times
(integer) 5 127.0.0.1:> get times
""

【例2】

127.0.0.1:> incrby times -
(integer) 0 127.0.0.1:> get times
""

decr 方法

对 key 的值做 减减操作。

decrby 方法

同 decr 方法类似,减指定值。

【例】

127.0.0.1:> get age
"" 127.0.0.1:> decr age
(integer) 29 127.0.0.1:> decrby age
(integer) 19 127.0.0.1:> decrby age -
(integer)

append 方法(重要)

给指定 key 的字符串追加 value ,返回新字符串的长度

【例】

127.0.0.1:> get name
"deathmask" 127.0.0.1:> append name @.com
(integer) 17 127.0.0.1:> get name
"deathmask@163.com"

strlen 方法

取指定 key 的 value 值的长度。

【例】

127.0.0.1:> get name
"deathmask@163.com" 127.0.0.1:> strlen name
(integer)

(二)Hash 类型

Redis hash 是一个 string 类型的 field value 的 映射表。它的添加、删除操作都是 0(1)(平均操作)。

hash 特别 适合用于存储对象。相较于将对象的每个字段存成单个 string 类型(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 字节)

【操作】

hset 方法 / hget 方法

设置hash field 为指定值,如果 key 不存在,则先创建。

【例】

127.0.0.1:> hset myhash field1 hello
(integer)

说明:myhash 是 hash 表的名称,field1 是 hash 表的一个字段,hello 是这个字段对应的值。存储用户比较方便。

【例2】

127.0.0.1:> hset user: name dee
(integer) 1 127.0.0.1:> hget user: name
"dee"

说明:设置 user 表 id 为 001 的用户,用户名为 dee。

可以把 user:001 看作一张表。

hsetnx 方法

设置 hash field 为指定值,如果 key 不存在,则先创建;如果存在,则返回 0。

【例】

127.0.0.1:> hsetnx myhash field "hello"
(integer) 1 127.0.0.1:> hsetnx myhash field "hello!"
(integer) 0 127.0.0.1:> hget myhash field
"hello"

hmset 方法

同时设置 hash 的多个 field

【例】

127.0.0.1:> hmset user: name dee specialty php
OK
127.0.0.1:> hget user: name
"dee" 127.0.0.1:> hget user: specialty
"php"

hget 方法

获取全部指定的 hash field。

【例】

127.0.0.1:> hmget user: name specialty
) "dee"
) "php"

hincrby 方法

指定的 hash field 加上给定值。

【例】

127.0.0.1:> hmset user: name dee specialty redis age
OK
127.0.0.1:> hincrby user: age -
(integer) 22 127.0.0.1:> hmget user: name specialty age
) "dee"
) "redis"
) "" 127.0.0.1:> hincrby user: age
(integer) 27 127.0.0.1:> hmget user: name specialty age
) "dee"
) "redis"
) ""

hexists 方法

测试指定 field 是否存在。

【例】

127.0.0.1:> hexists user: name
(integer) 1 127.0.0.1:> hexists user: sex
(integer)

hlen 方法

返回指定 hash 的 field 数量。

【例】

127.0.0.1:> hlen user:
(integer)

hdel 方法

删除指定 hash 的 field。

【例】

127.0.0.1:> hdel user: age
(integer) 1 127.0.0.1:> hget user: age
(nil)

hkeys 方法(类似 PHP 中 array_keys() 方法)

返回 hash 的所有 field。

【例】

127.0.0.1:> hkeys user:
) "name"
) "specialty"

hvals 方法(类似 PHP 中的 array_values() 方法)

返回 hash 的所有 value。

【例】

127.0.0.1:> hvals user:
) "dee"
) "redis"

hgetall 方法

获取某个 hash 中全部的 field 及 value。

【例】

127.0.0.1:> hgetall user:
) "name"
) "dee"
) "specialty"
) "redis"

【总结】设置 hash 类型的数据,首先要设置 hash 的表,然后设置 hash 的 field,最后设置 hash field 的 value。

Redis 笔记与总结2 String 类型和 Hash 类型的更多相关文章

  1. 02_NoSQL数据库之Redis数据库:string类型和hash类型

     Strings类型及操作 String是最简单的类型,一个key对应一个Value,String类型是二进制安全的.Redis的String可以包含任何数据,比如jpg图片或者序列化的对象. S ...

  2. 第一节: Redis之String类型和Hash类型的介绍和案例应用

    一. String类型基础 1.类型介绍 典型的Key-Value集合,如果要存实体,需要序列化成字符串,获取的时候需要反序列化一下. 2. 指令Api说明 3.常用Api说明 (1).StringS ...

  3. 【redis】02string类型和hash类型

    Redis的数据类型   Redis主要分为五个数据类型,一个是string,最简单的一个数据类型,hash,list, 还有set集合,还有zset有序集合,这是咱们redis的五种基础类型, 接下 ...

  4. C# string类型和byte[]类型相互转换

    string类型转成byte[]: byte[] byteArray = System.Text.Encoding.Default.GetBytes ( str ); byte[]转成string: ...

  5. C++ unordered_map 在key为string类型和char*类型时测试时间性能差异

    测试系统liunx centos6.5 代码如下 #include <string.h> #include <sstream> #include <list> #i ...

  6. string类型和int类型之间的转换

    一.string转int 1. 使用string流 /* 字符串转整型 */ /* * istringstream:从 string 读取数据 * ostringstream:向 string 写入数 ...

  7. 关于 实体类中 时间字段 为string 类型和 datatime类型 比较

    经发现, 数据库中保存时间格式数据  可以正常 排序, 数据中保存时间格式字符串 排序出现问题 /// <summary> /// 修改时间 /// </summary> pu ...

  8. AngularJs:String类型和JSON相互转换

    最近一周做了一个页面,制作的过程中遇到各种问题,从中可以看出本人的js基础还不够扎实,angularjs也只是刚入门的水平,现在将制作过程中遇到的问题一一汇总,方便以后查阅. 一.String类型和J ...

  9. Date类型和Long类型的相互转换

    Date类型和Long类型的相互转换: import java.text.SimpleDateFormat; import java.util.Date; public class T { publi ...

随机推荐

  1. 被忽视但很实用的那部分SQL

    一.前言 虽然我们大多数人都学习过SQL,但是经常忽略它.总是会自以为学到的已经足够用了,从而导致我们在实际开发的过程中遇到复杂的问题后只能在检索数据后通过传统的代码来完成,但是其中很多的功能利用SQ ...

  2. Mysql 对数字的格式化

    format函数:     格式化浮点数 format(number, length); Formats the number X to a format like '#,###,###.##', r ...

  3. Android loading进度条使用简单总结

    在这里,总结一下loading进度条的使用简单总结一下. 一.说起进度条,必须说说条形进度条,经常都会使用到嘛,特别是下载文件进度等等,还有像腾讯QQ安装进度条一样,有个进度总给人良好的用户体验. 先 ...

  4. 端口扫描器——ZenmapKail Linux渗透测

    3.3  端口扫描器——ZenmapKail Linux渗透测​ Zenmap(端口扫描器)是一个开放源代码的网络探测和安全审核的工具.它是Nmap安全扫描工具的图形界面前端,它可以支持跨平台.使用Z ...

  5. Train Problem I (HDU 100题纪念)

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...

  6. ZOJ 3157 Weapon

    题目传送门 题意:就是CF round# 329 B 的升级版,要求出相交点的个数 分析:逆序数用树状数组维护,求出非逆序数,然后所有情况(n * (n - 1)) / 2减之就是逆序数个数. #in ...

  7. 字符串处理 Codeforces Round #296 (Div. 2) B. Error Correct System

    题目传送门 /* 无算法 三种可能:1.交换一对后正好都相同,此时-2 2.上面的情况不可能,交换一对后只有一个相同,此时-1 3.以上都不符合,则不交换,-1 -1 */ #include < ...

  8. 模拟 POJ 2993 Emag eht htiw Em Pleh

    题目地址:http://poj.org/problem?id=2993 /* 题意:与POJ2996完全相反 模拟题 + 字符串处理:无算法,读入两行字符串找出相应点用used标记,输出时标记过的输出 ...

  9. ! cocos2d 预编译重复

    由于预编译文件重复,导致下面的类没有被编译,所以,在写代码的时候也没有提示还报错,说LoadingScene没有定义. #ifndef __HELLOWORLD_SCENE_H__ #define _ ...

  10. BZOJ3560 : DZY Loves Math V

    因为欧拉函数是非完全积性函数,所以可以考虑对每个数进行分解质因数,将每个质数的解乘起来即可. 对于一个质数$p$,设它在各个数中分别出现了$b_1,b_2,...b_n$次,那么由生成函数和欧拉函数的 ...