三言两语Redis

2017/5/15 posted in  Redis

redis的数据结构与对象

  • 数据库键总是一个字符串对象(string object)
  • 而数据库键的值可以是... 这五种对象中的其中一种
    • 字符串对象(string object)
    • 列表对象(list object)
    • 哈希对象(hash object)
    • 集合对象(set object)
    • 有序集合对象(sorted set object)

list

redis常用命令

常用命令 说明 举例 备注
lpush 在list的左侧插入一个新元素 lpush mylist “1"
rpush 在list的右侧插入一个新元素 rpush mylist “2"
lrange 从list中指定一个范围来提取元素 lrange mylist 0 -1  列出mylist中从编号0到倒数第一个元素

说明

redis中的list底层实现不是数组,而是链表.那么在头部和尾部插入一个新元素时候,其时间复杂度是常数级别的.有利必有弊,同时,链表型的lists的元素定位会比较慢.

list应用场景

  • 我们可以利用lists来实现一个消息队列,而且可以确保先后顺序,不必像MySQL那样还需要通过ORDER BY来进行排序
  • 利用LRANGE还可以很方便的实现分页的功能
  • 在博客系统中,每片博文的评论也可以存入一个单独的list中

redis的原子性

127.0.0.1:6379> set mynum "2"
OK
127.0.0.1:6379> get mynum
"2"
127.0.0.1:6379> incr mynum
(integer) 3
127.0.0.1:6379> incr mynum
(integer) 4
127.0.0.1:6379> incr mynum
(integer) 5

由于INCR等指令本身就具有原子操作的特性,所以我们完全可以利用redis的INCR、INCRBY、DECR、DECRBY等指令来实现原子计数的效果,假如,在某种场景下有3个客户端同时读取了mynum的值(值为2),然后对其同时进行了加1的操作,那么,最后mynum的值一定是5。不少网站都利用redis的这个特性来实现业务上的统计计数需求

redis持久化

redis提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File)

RDB(Redis DataBase)

简而言之,就是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上.

AOF(Append Only File)

将redis执行过的所有写指令记录下来,在下次redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了

补充

其实RDB和AOF两种方式也可以同时使用,在这种情况下,如果redis重启的话,则会优先采用AOF方式来进行数据恢复,这是因为AOF方式的数据恢复完整度更高。

如果没有数据持久化的需求,也完全可以关闭RDB和AOF方式,这样的话,redis将变成一个纯内存数据库,就像memcache一样.