3 、redis的5种数据类型及相应命令
redis不区分命令大小写。
string 512m 一个散列类型键可包含至多232-1个字段 一个列表类型键最多能容纳232-1个元素 一个集合类型键最多能容纳232-1个元素 |
3.1、一些实用的基础命令
keys pattern |
|
exists key |
返回值:存在返回1,不存在返回0 |
del key1 [key2 key3 ...] |
返回值:删除的键的个数 |
type key |
返回值:string、hash、list、set、zset |
技巧:删除所有复合规则的键(注意del不支持通配符) |
|
方案1 (推荐) |
在linux命令行执行下面命令: [root@tkafka ~]# redis-cli del `redis-cli keys "a*"` 注意用的反单引号,将redis-cli keys "a*"命令的结果作为redis-cli del命令的参数。 |
方案2 |
在linux命令行执行下面命令: [root@tkafka ~]# redis-cli keys "a*" | xargs redis-cli del 利用的是linux管道和xargs命令 |
3.2、字符串类型[string]
字符串类型是redis中最基本的数据类型,是其它4种数据类型的基础,例如列表类型是以列表的形式组织字符串,集合类型是用集合的形式组织字符串。
string可存储任何形式的字符串,比如数值形式的字符串,二进制形式的字符串,json格式的字符串等,也就是说string能存储数值、图片、json化对象等。
基础命令 |
||
set key value get key |
|
|
mset key value [key2 value2 ...] mget key [key2 ...] |
|
|
append key value |
描述:向键值的末尾追加value,如果键不存在则相当于set key value。 返回值:追加后的字符串长度。 |
|
strlen key |
你好(6) ab(2) |
|
-- 当字符串类型存储的是【整数形式的字符串】时,才可以用的命令,否则报错: |
||
incr key incrby key increment |
注意:若key不存在,incr命令会默认key的值为0,再进行递增;若key的值不是整数形式的字符串,redis会报错。 返回值:返回递增后的值。 |
|
decr key decrby key decrement |
这两个指令功能都可以用 incrby key increment 实现 |
|
incrbyfloat key increment |
|
|
--位操作命令: |
||
getbit key offset |
|
|
setbit key offset value |
|
|
bitcount key [startByteIndex] [endByteIndex] |
统计字符串类型键中值是1的二进制位的个数。 可以加两个参数来限制统计的字节范围[0开始]。 |
|
bitop operation destkey key1 key2 … keyN |
对多个字符串类型键进行位运算,并将结果存储destkey参数指定的键中,operation可选AND、OR、XOR、NOT。 |
|
bitpos key bitValue [startByteIndex] [endByteIndex] |
获得指定键中第一个位值为0或1的二进制位的偏移量[0开始]。bitValue可选0、1。 可以加两个参数来限制查询的字节范围[0开始]。 |
|
注意:包括incr在内的所有redis命令都是原子操作,无论多少客户端同时连接,都不会出现并发性的安全问题。但是如果你希望在程序自己写一个方法来实现incr命令的效果,就得自己在代码层面保证该方法是线程安全的。
实践 |
1、键命名实践:【对象类型名:对象id:对象属性名】;如user:1:age 多个单词用“.”分隔,如user:2:first.name |
2、 文章访问量 对每篇文章都用一个键article:articleId:visit.count来记录该篇文章的访问量,访问一次就incr一次。 |
3、自增id 为一类对象如article定义一个键如articles:count,用于保存该类对象的数量。 每要增加一个该类对象时都先做一次incr,incr的返回值即可作为该新增对象的id。 |
4、存储文章数据(下节会讲这种实现方式的缺陷) 键名article:articleId:article.Data 键值:articleTitle,articleAuthor,aticleContent,articleTime序列化后的字符串。 获取文章数据时,获取键值后进行反序列化即可。 |
5、位操作命令实践
|
3.3、散列类型[hash]
redis是采用字典结构<key, value>存储数据的,在此之上,散列类型键的键值也是字典结构的<key, <field, value>>,其中的value只能是基础的字符串类型。redis中的数据类型不支持数据类型嵌套,也就是说hash、list、set、zset中的元素只能是基础的字符串类型。
&nbs