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 的键值对:
② get 方法
【例】
再次设置 name = deathmask,值会被覆盖:
127.0.0.1:6379> get name
"deathmask"
③ setnx 方法
设置 key 对应的值为 string 类型的 value,如果 key 已经存在,返回 0,nx 表示 not exist。
【例】
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> 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> 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"
【例2】
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> get key1
"dee1"
127.0.0.1:6379> get key2
"dee2"
⑦ msetnx 方法
一次设置多个 key 的值,成功返回 1,表示所有的值都被设置了。失败返回 0 ,表示没有任何值被设置,但是不会覆盖已经存在的 key。
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)
设置 key 的值,并返回 key 的旧值。
【例】
⑨ getrange 方法
获取 key 的 value 值的子字符串。
127.0.0.1:6379> getrange email 0 12
"dee@gmail.com"
一次获取多个 key 的值,如果对应 key 不存在则对应返回 nil。
【例】
⑪ incr 方法
对 key 的值做 加加 操作,并返回新的值。
【例】每次递增1
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"
127.0.0.1:6379> incr real-age
(integer) 1
127.0.0.1:6379> get real-age
"1"
⑫ incrby 方法
同 incr 方法类似,加指定值,key 不存在时会设置 key,并认为原来的 value 为 0。
【例】
127.0.0.1:6379> incrby times 5
(integer) 5
127.0.0.1:6379> get times
"5"
127.0.0.1:6379> get times
"0"
⑬ decr 方法
对 key 的值做 减减操作。
⑭ decrby 方法
同 decr 方法类似,减指定值。
【例】
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
⑮ append 方法(重要)
给指定 key 的字符串追加 value ,返回新字符串的长度。
【例】
127.0.0.1:6379> append name @163.com
(integer) 17
127.0.0.1:6379> get name
"deathmask@163.com"
⑯ strlen 方法
取指定 key 的 value 值的长度。
【例】
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 不存在,则先创建。
【例】
说明:myhash 是 hash 表的名称,field1 是 hash 表的一个字段,hello 是这个字段对应的值。存储用户比较方便。
【例2】
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) 0
127.0.0.1:6379> hget myhash field
"hello"
③ hmset 方法
同时设置 hash 的多个 field
【例】
127.0.0.1:6379> hget user:002 name
"dee"
127.0.0.1:6379> hget user:002 specialty
"php"
④ hget 方法
获取全部指定的 hash field。
【例】
⑤ hincrby 方法
指定的 hash field 加上给定值。
【例】
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 sex
(integer) 0
返回指定 hash 的 field 数量。
【例】
删除指定 hash 的 field。
【例】
127.0.0.1:6379> hget user:002 age
(nil)
返回 hash 的所有 field。
【例】
返回 hash 的所有 value。
【例】
获取某个 hash 中全部的 field 及 value。
【例】
【总结】设置 hash 类型的数据,首先要设置 hash 的表,然后设置 hash 的 field,最后设置 hash field 的 value。
新闻热点
疑难解答