[toc]mysql
cd /usr/local/src/ wget http://download.redis.io/releases/redis-4.0.9.tar.gz tar zxvf redis-4.0.9.tar.gz cd redis-4.0.9 make && make install echo $?
[root@xavi redis-4.0.9]# redis- redis-benchmark redis-check-rdb redis-sentinel redis-check-aof redis-cli redis-server [root@xavi redis-4.0.9]# which redis-cli /usr/local/bin/redis-cli
[root@xavi redis-4.0.9]# cp redis.conf /etc/ vim /etc/redis.conf ------------------------------------------ 此处用来配置监听IP # Examples: # # bind 192.168.1.100 10.0.0.1 # bind 127.0.0.1 ::1
建立如上定义的 aof 的目录linux
mkdir /data/redis
[root@xavi redis-4.0.9]# redis-server /etc/redis.conf // [root@xavi redis-4.0.9]# netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 9433/redis-server 1
[root@xavi redis-4.0.9]# less /var/log/redis.log
有以下两个报错:意思是 当你内存比较低的时候会报错,让咱们把 vm.overcommit_memory 调节为 1 (1) WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. (2) echo never > /sys/kernel/mm/transparent_hugepage/enabled
解决方法:redis
[root@xavi redis-4.0.9]# vim /etc/rc.local 添加以下两行: sysctl vm.overcommit_memory=1 echo never > /sys/kernel/mm/transparent_hugepage/enabled
和Memcached服务同样,若是关闭RDB和aof数据就会存储在内存中,当重启服务或者重启机器 存储的数据就会丢失。若是数据很重要,咱们就须要作持久化。算法
[ ] RDB,简而言之,就是在不一样的时间点,将redis存储的数据生成快照并存储到磁盘等介质上。sql
[ ] AOF,则是换了一个角度来实现持久化,那就是将redis执行过的全部写指令记录下来,在下次redis从新启动时,只要把这些写指令从前到后再重复执行一遍,就能够实现数据恢复了。数据库
其实RDB和AOF两种方式也能够同时使用,在这种状况下,若是redis重启的话,则会优先采用AOF方式来进行数据恢复,这是由于AOF方式的数据恢复完整度更高。vim
redis会把内存中的数据备份到硬盘中,这个取决于:安全
vim /etc/redis.conf 打开redis配置文件app
save 900 1 #表示每15分钟且至少有1个key改变,就触发一次持久化 save 300 10 #表示每5分钟且至少有10个key改变,就触发一次持久化 save 60 10000 #表示每60秒至少有10000个key改变,就触发一次持久 save “” #这样能够禁用rdb持久化
# appendfsync always //一直写,每次有变动就写进去 appendfsync everysec //安全高效,每一秒记录一次,把数据从内存刷新到磁盘中去 # appendfsync no //每隔一段时间,根据系统的算法,Linux系统不按期把内存的数据同步到磁盘上去,根据这个频率走,容易丢数据
总结:AOF记录的比RDB更全面less
string为最简单的类型,与Memcached同样的类型,一个key对应一个value,其支持的操做与Memcached的操做相似,它的功能更丰富。设置能够存二进制的对象。
示例:
[root@xavi redis-4.0.9]# redis-cli 127.0.0.1:6379> set mykey "123" OK 127.0.0.1:6379> get mykey "123" 127.0.0.1:6379> mset k1 1 k2 2 k3 a OK 127.0.0.1:6379> mget k1 mykey 1) "1" 2) "123"
list是一个链表结构,主要功能是push、pop、获取一个范围的全部值等等。操做中key理解为链表的名字。
127.0.0.1:6379> LPUSH list1 "xavilinux" (integer) 1 127.0.0.1:6379> Lpush list1 "123" (integer) 2 127.0.0.1:6379> LPUSH list1 "aaa bbb" (integer) 3 127.0.0.1:6379> LRANGE list1 0-1 //0-1中间有空格 (error) ERR wrong number of arguments for 'lrange' command 127.0.0.1:6379> LRANGE list1 0 -1 //从0到-1 1) "aaa bbb" 2) "123" 3) "xavilinux"
set是集合,和咱们数学中的集合概念类似,对集合的操做有添加删除元素,有对多个集合求交并差等操做。操做中key理解为集合的名字。
好比在微博应用中,能够将一个用户全部的关注人存在一个集合中,将其全部粉丝存在一个集合。由于 Redis 很是人性化的为集合提供了求交集、并集、差集等操做,那么就能够很是方便的实现如共同关注、共同喜爱、二度好友等功能,对上面的全部集合操做,你还可使用不一样的命令选择将结果返回给客户端仍是存集到一个新的集合中。
set示例
127.0.0.1:6379> sadd set1 a (integer) 1 127.0.0.1:6379> SADD set1 b (integer) 1 127.0.0.1:6379> sadd set1 c (integer) 1 127.0.0.1:6379> SMEMBERS SET1 (empty list or set) 127.0.0.1:6379> SMEMBERS set1 1) "c" 2) "a" 3) "b" 127.0.0.1:6379> sadd set2 a (integer) 1 127.0.0.1:6379> sadd set2 2 (integer) 1 127.0.0.1:6379> sadd set2 3 (integer) 1 127.0.0.1:6379> sadd set2 c (integer) 1 127.0.0.1:6379> SMEMBERS set2 1) "c" 2) "a" 3) "3" 4) "2" 127.0.0.1:6379> SUNION set1 set2 //求并集 1) "a" 2) "c" 3) "3" 4) "b" 5) "2" 127.0.0.1:6379> sinter set1 set2 //求交集 1) "c" 2) "a" 127.0.0.1:6379> SDIFF set1 set2 //求差集 1) "b" 127.0.0.1:6379> SREM set1 c //删除某元素 (integer) 1
sorted set是有序集合,它比set多了一个权重参数score,使得集合中的元素可以按 score 进行有序排列,
示例:
127.0.0.1:6379> ZADD set3 12 abc (integer) 1 127.0.0.1:6379> ZADD set3 2 "cde 123" (integer) 1 127.0.0.1:6379> ZADD set3 24 "xavi" (integer) 1 127.0.0.1:6379> ZADD set3 4 "xavilinux" (integer) 1 127.0.0.1:6379> ZRANGE set3 0 -1 1) "cde 123" 2) "xavilinux" 3) "abc" 4) "xavi" 倒叙排列 127.0.0.1:6379> ZREVRANGE set3 0 -1 1) "xavi" 2) "abc" 3) "xavilinux" 4) "cde 123"
在 Memcached 中,咱们常常将一些结构化的信息打包成 hashmap,在客户端序列化后存储为一个字符串的值(通常是 JSON 格式),好比用户的昵称、年龄、性别、积分等
127.0.0.1:6379> HSET hash1 name xavi (integer) 1 127.0.0.1:6379> HSET hash1 age 30 (integer) 1 127.0.0.1:6379> HSET hash1 job IT (integer) 1 127.0.0.1:6379> HGET hash1 name "xavi" 127.0.0.1:6379> HGET hash1 job "IT" 127.0.0.1:6379> hgetall hash1 1) "name" 2) "xavi" 3) "age" 4) "30" 5) "job" 6) "IT"