Redis是一个kv数据块,所以先来看一下对键的操作。
Key的操作
1.设置一个键并指定值
127.0.0.1:6379> set bar 1
OK
2.查看所有的键
127.0.0.1:6379> keys *
1) "bar"
3.判断一个key是否存在
127.0.0.1:6379> exists bar
(integer) 1
4.查看一个key的数据类型
127.0.0.1:6379> type bar
string
5.删除key
127.0.0.1:6379> del bar
(integer) 1
字符串类型的操作
字符串类型是Redis中的基本数据类型,也是其他四种数据类型的基础,一个字符串类型的key最多能存储512MB的数据。
操作命令
set key value #设置key-value
get key #获取value
incr key #value为数组时,+1
incrby key num #增加指定的数字,+n
decr key #value为数字时,-1
decrby key num #减少指定的数字,-n
append key str #尾部追加字符
strlen key #获取长度
mset key value [,key value] #同时设置多个key-value
mget key1, [key2,ke3..] #同时获取多个value
示例
127.0.0.1:6379> set k1 hello
OK
127.0.0.1:6379> get k1
"hello"
127.0.0.1:6379> set k2 3
OK
127.0.0.1:6379> incr k2
(integer) 4
127.0.0.1:6379> incrby k2 10
(integer) 14
127.0.0.1:6379> decr k2
(integer) 13
127.0.0.1:6379> decrby k2 5
(integer) 8
127.0.0.1:6379> append k1 world
(integer) 10
127.0.0.1:6379> get k1
"helloworld"
127.0.0.1:6379> strlen k1
(integer) 10
127.0.0.1:6379> mset k3 v3 k4 v4
OK
127.0.0.1:6379> mget k3 k4
1) "v3"
2) "v4"
127.0.0.1:6379>
实践
1)利用incr实现博文的访问量统计。
这个应用的要点在于怎样设计key能更好的满足需求(通常为查询),同时,还要考虑到key风格的同一和扩展
post:articleId:page.view
Redis对key的命名并没有强制的规范,但比较好的实践是对象类型:对象ID:对象属性
,例如user:1:friends
,user:2:name
等等,如果属性有多个单词组成,则使用.
来分隔,这样,逐层关联属性的key更有利于扩展和维护,虽然很可能使key过长进而占用空间,但与空间相比,或许可读性更重要。
2)生成自增ID
在MySQL这样的关系型数据库中,我们可以通过设置AUTO_INCREMENT属性来实现,而在redis中,通常是利用incr
来实现 :对象类型:count
user:count
product:count
article:count
....
然后在程序中调用incr
命令来+1
3)存储文本或二进制数据
以保存博文内容为例,伪代码实现如下所示:
#创建新博文id
$postId = incr posts:count
#序列化文章的各个部分为一个字符串
$serializedPost = serialize($title, $context, $author, $time)
#保存
set post:$postId:data = $serializedPost
$postId = 10
#获取原始数据
$serializedPost = get post:$postId:data
#反序列化数据
$title,$context,$author,$time = unserialize($serializedPost)
#访问量+1
$postCount = incr posts:count
当然,以上实现逻辑还存在问题,后续补充。