Redis:一个开源的,免费,高性能,k-v数据库,内存数据库,非关系型数据库,支持持久化,集群和事务。
$ wget http://download.redis.io/releases/redis-x.x.xxx.tar.gz
$ tar xzf redis-x.x.xxx.tar.gz
$ cd redis-x.x.xxx
$ make
我安装的5.0版本的还需要根据提示 make test
之后进入src中运行make install
或者直接参考这里
daemonize : 默认为no,修改为yes启用守护线程,即在后台运行,一般服务端开发均使用此配置。
port :设定端口号,默认为6379
bind :绑定IP地址
databases :数据库数量,默认16
save :RDB持久方案,指定多少时间、有多少次更新操作,就将数据同步到数据文件。
(RDB 是Redis默认的持久化方案。在指定的时间间隔内,执行指定次数的写操作,则会将内存中的数据写入到磁盘中。即在指定目录下生成一个dump.rdb文件。Redis重启会通过加载dump.rdb文件恢复数据)
(AOF Redis 默认不开启。它的出现是为了弥补RDB的不足(数据的不一致性),所以它采用日志的形式来记录每个写操作,并追加到文件中。Redis 重启的会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。)
#redis默认配置有三个条件,满足一个即进行持久化
save 900 1 #900s有1个更改
save 300 10 #300s有10个更改
save 60 10000 #60s有10000更改
dbfilename :指定本地数据库的文件名,默认为dump.rdb
dir :指定本地数据库的存放目录,默认为./当前文件夹
requirepass :设置密码,默认关闭
redis -cli -h host -p port -a password
一个redis.conf文件对应一个redis服务的配置,如果有多个redis.conf的文件配置,比如redis6380.conf,redis6381.conf,那么在进入redis安装目录的时候,redis-server 默认启动的是 redis.conf,指定启动需要 redis-server redis6380.conf,也就是指定以redis6380.conf作为配置来启动redis服务,而redis-cli -h localhost -p 6380 -a admin 客户端也需要以这种方式来连接,即指定端口和ip。
首先Redis五种数据类型:String,hash,set,list,zset
公用命令
- DEL key 删除key
- DUMP key 序列化给定key,并返回序列化之后的值
- EXISTS key 检查key是否存在
- EXPIRE key second 给key设定过期时间
- TTL key 返回key剩余时间
- PERSIST key 移除key的过期时间,key将持久保存
- KEY pattern 查询所有符号给定模式的key
- RANDOM key 随机返回一个key
- RANAME key newkey 修改key的名称
- MOVE key db 移动key至指定数据库中
- TYPE key 返回key所储存的值的类型
EXPIRE key second的使用场景:
1、限时的优惠活动
2、网站数据缓存
3、手机验证码
4、限制网站访客频率
String 是 redis 最基本的类型,一个key对应一个value。 string类型是二进制安全的,redis的string可以包含任何数据,如图像、序列化对象。
一个键最多能存储512MB。
==二进制安全是指,在传输数据的时候,能保证二进制数据的信息安全
也就是不会被篡改、破译;如果被攻击,能够及时检测出来 ==
String命令
赋值:set key value
取值:get key
批量赋值:mset key value … keyN valueN
批量取值:mget key … keyN
取值并赋值:getset key value
删除key:del key … keyN
数值加一:incr key
数值加N:incrby key n
数值减一:decr key
数值减N:decrby key n
字符串追加:append key value
字符串长度:strlen key
注 形如"key … keyN" 表示可以批量操作
String应用场景
1、String通常用于保存单个字符串或JSON字符串数据
2、因为String是二进制安全的,所以可以把保密要求高的图片文件内容作为字符串来存储
3、计数器:常规Key-Value缓存应用,如微博数、粉丝数。INCR本身就具有原子性特性,所以不会有线程安全问题
Redis hash 是一个键值对集合,和Java 的HashMap 类似。
Redis hash 是一个String 类型的 field 和 value 的映射表,hash特别适合用于存储对象(key 可以是对象+id,field 是对象属性,value则是属性值)。
常用命令:
给一个字段赋值:hset key field value
给多个字段赋值:hmset key field value … fieldN valueN
取一个字段的值:hget key field
取多个字段的值:gmset key field … fieldN
取所有的字段名和值:hgetall key
删除字段名和值:hdel key field … fieldN
判断字段是否存在:hexists key field
获取key的所有field:hkeys key
获取key的所有value:hvals key
获取field个数:hlen key
注:这里的field 就是 字段名,value 就是字段值
应用场景
Hash的应用场景,通常用来存储一个用户信息的对象数据。
1、相比于存储对象的string类型的json串,json串修改单个属性需要将整个值取出来。而hash不需要。
2、相比于多个key-value存储对象,hash节省了很多内存空间
3、如果hash的属性值被删除完,那么hash的key也会被redis删除
Redis 列表是采用来链表来存储的简单字符串列表,按照插入顺序排序。添加元素一般从链表两端开始。
常用命令
向列表左侧加元素:lpush key value … valueN
向列表右侧加元素:rpush key value … valueN
遍历列表:lrange key startIndex endIndex
获取List长度:llen key
通过下标获取值:lindex key index
通过下标设置值:lset key index value
列表左侧移除第一个元素:lpop key
列表右侧移除第一个元素:rpop key
截取保留剩下的列表:ltrim key startIndex endIndex
在制定元素插入值:linsert key after/before index value
把集合第一个元素移到其他集合中:rpoplpush key otherListKey
注:若endIndex=-1 表示最后一位;otherListKey 表示其他集合
应用场景
1、对数据大的集合数据删减
列表显示、关注列表、粉丝列表、留言评价…分页、热点新闻等
2、任务队列
list通常用来实现一个消息队列,而且可以确保先后顺序,不必像MySQL那样通过order by来排序
Set
Redis 的 Set 是String类型的无序集合。它是通过HashTable实现实现的,用法和 List 类型很相似。
常用命令:
新增集合元素:sadd key value … valueN
删除集合元素:srem key value … valueN
获取集合所有元素:smembers key
判断集合元素是否存在:sismember key value
集合差集:sdiff key1 key2
集合交集:sinter key1 key2
集合并集:sunion key1 key2
获取集合长度:scard key1
常用场景:
对两个集合间的数据[计算]进行交集、并集、差集运算
1、以非常方便的实现如共同关注、共同喜好、二度好友等功能。对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存储到一个新的集合中。
2、利用唯一性,可以统计访问网站的所有独立 IP
有序且不重复。每个元素都会关联一个double类型的分数,Redis通过分数进行从小到大的排序。分数可以重复
常用于排行榜:
1、如推特可以以发表时间作为score来存储
2、存储成绩
3、还可以用zset来做带权重的队列,让重要的任务先执行