redis--2

redis学习第二章
实践

  1. 键的命名
    redis对于键的命名并没有强制的要求,但比较好的实践是用“对象类型:对象ID:对象属性”来命名一个键,如用键user:1:friends来存储ID为1的用户的好友
  2. 自增id
    在redis中可以生成一个users:count的键来存储当前类型对象的数量,每增加一个对象都使用INCR命令递增该键的值。由于使用INCR命令建立的键的初始键值为1,所以很容易得知,incr命令后返回的即是加入该对象的当前类型的总数,又是该新增对象的ID。
  3. 数据存储(字符串类型)
    由于每个字符串类型的键只能存储一个字符串,而我们要存储的数据可能有多个属性,以博文为例:标题、正文、作者、发布时间等多个属性构成。为了存储这些元素,我们需要序列化函数(如PHP的serialize和JavaScript的JSON.stringify)将他们转换成一个字符串,除此之外,我们也可以使用MessagePack(http://msgpack.org 与json一样可以将对象序列化字符串,但是结果是二进制,所以占用空间更小,性能更高)进行序列化,速度更快,占用空间也更小
  4. 其他基本命令
1:添加指定数值
INCRBY key increment

incrby 命令与 incr 命令基本一样,只不过前者可以通过increment参数指定一次性增加多少个数值
redis > incrby key 2
(integer) 2
redis > incrby key 3
(integer) 5

2:减少数值
DECR key
DECRBY key decrement

DECR命令与INCR命令用法相同,只不过该命令是让键值递减

3:添加浮点数
INCRBYFLOAT key increment

INCRBYFLOAT命令与INCR命令类似,只不过前者可以递增一个双精度浮点数,如:
redis > incrbyfloat key2.7
“7.7”//注意 此时使用incr 会报错

4:向尾部追加值
APPEND key value

APPEND作用是向键值的末尾追加value。如果键值不存在则将该键的值设置为value,相当于SET key value ,返回的是追加后字符串的总长度如:
redis > set foo hello
OK
redis > APPEND foo " world!"//此时foo中的值是 hello world!
(integer) 12

5:获取字符串长度
STRLEN key

strlen命令返回键值的长度,如果键不存在则返回0。例如:
redis > STRLEN key
(integer) 12
redis > SET key “你好”
OK
redis > strlen key
(integer) 6
前面提到字符串类型可以存储二进制数据,所以他可以存储任何编码类型的字符串。例中接收到的是使用utf-8编码的中文,由于“你”和“好”两个字的utf-8编码长度都是3,所以长度是6

6:同时获得/设置多个键值
MGET key [key ...]
MSET key value [key value ...]

MGET/MSET与GET/SET相似,不过MGET/MSET可以同时获得、设置多个键的键值。如:
redis > MSET key1 v1 key2 v2 key3 v3
OK
redis > MGET key1 key2
1). “v1”
2). “v2”

7:位操作
GETBIT key offest
SETBIT key offest value
BITCOUNT key [start] [end]
BITOP operation destkey key [key ...]

一个字节由8个二进制位组成,redis提供了4个命令可以直接对二进制位进行操作。例如,先赋值bar给foo:
redis > set foo bar
OK
bar 的3个字母“b”“a”和“r”对应的ASCII码分别为98、97和114,转换成二进制后,分别为01100010、01100001和01110010。
GETBIT命令可以获得一个字符串类型指定位置的二进制位的值(0或1),索引从0开始:
redis > GETBIT foo 0
(integer) 0
redis > GETBIT foo 6
(integer) 1
若需要获取的二进制位的索引超过了实际长度则默认位值为0
redis > GETBIT foo 100000
(integer) 0
SETBIT命令可以设置字符串类型键指定位置的二进制的值,返回值是该位置的旧值。如我们要将foo键值设置为aar,可以通过位操作将foo键的二进制位的索引第6位设为0,第七位设为1
redis > SETBIT foo 6 0
(integer) 1
redis > SETBIT foo 7 1
(integer) 0
redis > GET foo
“aar”
如果要设置的位置超过了键值的二进制长度,SETBIT命令会自动将中间的二进制位设置为0,同理设置一个不存在的键的指定二进制位的值会自动将其前面的位赋值为0:
redis > SETBIT nofoo 10 1//nofoo 前9位0 第10位1
(integer) 0
BITCOUNT命令可以获得字符串类型键中值是1的二进制位个数,例如:
redis > BITCOUNT foo
(integer) 10
可以通过参数来限制统计的字节范围,如果我们只希望统计前两个字节(即"aa"):
redis > BITCOUNT foo 0 1
(integer) 6
BITOP该命令可以对多个字符串类型键进行位运算,并将结果存储在destkey参数指定的键中。BITOP命令支持的运算操作有AND、OR、XOR和NOT。如我们可以对bar和aar进行OR运算:
redis > SET foo1 bar
OK
redis > SET foo2 aar
OK
redis >BITOP OR res foo1 foo2//将bar和aar进行或运算,并且将结果存入res
(integer) 3
redis > GET res
“car”
BITPOS在redis2.8.7中引入了BITPOS命令,可以获得指定键的第一位值是0或者1的位置,还是以“bar”这个键值为例,如果想获取键值中第一个二进制位为1的偏移量可以执行:
redis > SET foo bar
Ok
redis > BITPOS foo 1
(integer) 1
正如BITPOS的结果所示。“bar”中的第一个值为1的二进制位的偏移量为1(BITPOS索引从0开始)。
BITPOS的第二个和第三个参数就是指定查询范围(索引从0字节开始),例如我们要获取第二字节到第三个字节之间(即“a”和“r”)出现的第一个值为1的二进制的偏移量,则可以执行:
redis > BITPOS foo 1 1 2
(integer) 9
技巧
利用位操作命令可以非常紧凑的操作布尔值。比如如果网站的每个用户都有一个递增的整数ID,如果使用一个字符串类型键配合位

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值