相思资源网 Design By www.200059.com

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:6379> set name dee
OK

设置成功。

② get 方法

【例】
复制代码 代码如下:
127.0.0.1:6379> get name
"dee"

获取成功。

 

再次设置 name = deathmask,值会被覆盖:
复制代码 代码如下:
127.0.0.1:6379> set name deathmask
OK

127.0.0.1:6379> get name
"deathmask"

③ setnx 方法

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

【例】
复制代码 代码如下:
127.0.0.1:6379> setnx name dee
(integer) 0


127.0.0.1:6379> setnx app weibo
(integer) 1


127.0.0.1:6379> get name
"deathmask"


127.0.0.1:6379> get app
"weibo"

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

④ setex 方法

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

【例】
复制代码 代码如下:
127.0.0.1:6379> setex mobile 10 iphone
OK

127.0.0.1:6379> get mobile
"iphone"


127.0.0.1:6379> get mobile
"iphone"


127.0.0.1:6379> get mobile
(nil)

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

⑤ setrange 方法

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

【例】将 dee 的 126 邮箱 替换为 gmail 邮箱
复制代码 代码如下:
127.0.0.1:6379> set email dee@126.com
OK

127.0.0.1:6379> get email
"dee@126.com"


127.0.0.1:6379> setrange email 4 gmail.com
(integer) 13


127.0.0.1:6379> get email
"dee@gmail.com"

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

【例2】
复制代码 代码如下:
127.0.0.1:6379> set email dee@vip.ofim.com
OK

127.0.0.1:6379> get email
"dee@vip.ofim.com"


127.0.0.1:6379> setrange email 4 gmail.com
(integer) 16


127.0.0.1:6379> get email
"dee@gmail.comcom"

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

⑥ mset 方法

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

【例】
复制代码 代码如下:
127.0.0.1:6379> mset key1 dee1 key2 dee2
OK

127.0.0.1:6379> get key1
"dee1"


127.0.0.1:6379> get key2
"dee2"

⑦ msetnx 方法

一次设置多个 key 的值,成功返回 1,表示所有的值都被设置了。失败返回 0 ,表示没有任何值被设置,但是不会覆盖已经存在的 key。
复制代码 代码如下:
127.0.0.1:6379> msetnx key3 dee3 key4 dee4
(integer) 1


127.0.0.1:6379> msetnx key3 dee333 key4 dee444 key5 dee5
(integer) 0


127.0.0.1:6379> get key3
"dee3"


127.0.0.1:6379> get key4
"dee4"


127.0.0.1:6379> get key5
(nil)

⑧ getset 方法

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

【例】
复制代码 代码如下:
127.0.0.1:6379> getset key1 emperor
"dee1"

⑨ getrange 方法

获取 key 的 value 值的子字符串。
复制代码 代码如下:
127.0.0.1:6379> get email
"dee@gmail.comcom"


127.0.0.1:6379> getrange email 0 12
"dee@gmail.com"

返回第 0 到第12 个字符。
⑩ mget 方法

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

【例】
复制代码 代码如下:
127.0.0.1:6379> mget key1 key2 key3 key4 key5
1) "emperor"
2) "dee2"
3) "dee3"
4) "dee4"
5) (nil)

"codetitle">复制代码 代码如下:
127.0.0.1:6379> set age 28
OK

127.0.0.1:6379> get age
"28"


127.0.0.1:6379> incr age
(integer) 29


127.0.0.1:6379> incr age
(integer) 30


127.0.0.1:6379> get age
"30"

【例2】
复制代码 代码如下:
127.0.0.1:6379> get real-age
(nil)

127.0.0.1:6379> incr real-age
(integer) 1


127.0.0.1:6379> get real-age
"1"

"codetitle">复制代码 代码如下:
127.0.0.1:6379> get times
(nil)

127.0.0.1:6379> incrby times 5
(integer) 5


127.0.0.1:6379> get times
"5"

【例2】
复制代码 代码如下:
127.0.0.1:6379> incrby times -5
(integer) 0


127.0.0.1:6379> get times
"0"

"codetitle">复制代码 代码如下:
127.0.0.1:6379> get age
"30"


127.0.0.1:6379> decr age
(integer) 29


127.0.0.1:6379> decrby age 10
(integer) 19


127.0.0.1:6379> decrby age -10
(integer) 29

"codetitle">复制代码 代码如下:
127.0.0.1:6379> get name
"deathmask"


127.0.0.1:6379> append name @163.com
(integer) 17


127.0.0.1:6379> get name
"deathmask@163.com"

"codetitle">复制代码 代码如下:
127.0.0.1:6379> get name
"deathmask@163.com"


127.0.0.1:6379> strlen name
(integer) 17

(二)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:6379> hset myhash field1 hello
(integer) 1

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

【例2】
复制代码 代码如下:
127.0.0.1:6379> hset user:001 name dee
(integer) 1


127.0.0.1:6379> hget user:001 name
"dee"

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

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

② hsetnx 方法

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

【例】
复制代码 代码如下:
127.0.0.1:6379> hsetnx myhash field "hello"
(integer) 1


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


127.0.0.1:6379> hget myhash field
"hello"

③ hmset 方法

同时设置 hash 的多个 field

【例】
复制代码 代码如下:
127.0.0.1:6379> hmset user:002 name dee specialty php
OK

127.0.0.1:6379> hget user:002 name
"dee"


127.0.0.1:6379> hget user:002 specialty
"php"

④ hget 方法

获取全部指定的 hash field。

【例】
复制代码 代码如下:
127.0.0.1:6379> hmget user:002 name specialty
1) "dee"
2) "php"

⑤ hincrby 方法

指定的 hash field 加上给定值。

【例】
复制代码 代码如下:
127.0.0.1:6379> hmset user:002 name dee specialty redis age 28
OK

127.0.0.1:6379> hincrby user:002 age -6
(integer) 22


127.0.0.1:6379> hmget user:002 name specialty age
1) "dee"
2) "redis"
3) "22"


127.0.0.1:6379> hincrby user:002 age 5
(integer) 27


127.0.0.1:6379> hmget user:002 name specialty age
1) "dee"
2) "redis"
3) "27"

⑥ hexists 方法

测试指定 field 是否存在。

【例】
复制代码 代码如下:
127.0.0.1:6379> hexists user:002 name
(integer) 1


127.0.0.1:6379> hexists user:002 sex
(integer) 0

⑦ hlen 方法

返回指定 hash 的 field 数量。

【例】
复制代码 代码如下:
127.0.0.1:6379> hlen user:002
(integer) 3

⑧ hdel 方法

删除指定 hash 的 field。

【例】
复制代码 代码如下:
127.0.0.1:6379> hdel user:002 age
(integer) 1


127.0.0.1:6379> hget user:002 age
(nil)

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

返回 hash 的所有 field。

【例】
复制代码 代码如下:
127.0.0.1:6379> hkeys user:002
1) "name"
2) "specialty"

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

返回 hash 的所有 value。

【例】
复制代码 代码如下:
127.0.0.1:6379> hvals user:002
1) "dee"
2) "redis"

"codetitle">复制代码 代码如下:
127.0.0.1:6379> hgetall user:002
1) "name"
2) "dee"
3) "specialty"
4) "redis"

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

标签:
Redis,String,类型,Hash

相思资源网 Design By www.200059.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
相思资源网 Design By www.200059.com

评论“Redis String 类型和 Hash 类型学习笔记与总结”

暂无Redis String 类型和 Hash 类型学习笔记与总结的评论...

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。