redis是用C语言开发的一个开源的高性能键值对(key-value)数据库(nosql),应用在缓存.它通过提供多种键值数据类型来适应不同场景下的存储需求.
redis的应用场景:
-
- 缓存
- 分布式集群架构中的session分离
- 任务队列(秒杀、抢购、12306等等)
- 应用排行榜(SortedSet)
- 网站访问统计
- 数据过期处理(expire)
目前为止redis支持的键值数据类型有5种.如下:
-
- 字符串类型(String)
- 散列类型(Hash)
- 列表类型(List)
- 集合类型(Set)
- 有序集合类型(SortedSet)
redis是单线程的,不适合存储比较大的数据.redis中所有的数据都是字符串.
1. String: key - value
- 设置值
set key value
- 获取值
get key
- 加一
inc key
- 减一
decr key
2. Hash: key - field - value
相当于Java中的Map<String, Map<String, String>>类型
- 设置值
hset key field value
- 获取值
hget key field
- 加num
hincrby key field num
3. List
List是有顺序可重复的,数据结构为双链表队列,可以从左右两个方向添加元素.
- 从左添加元素
lpush list a b c d
- 从右添加元素
rpush list 1 2 3 4
- 查看区间上的数据(从0到-1表示查看所有)
lrange list 0 -1
- 从左边取数据(弹栈删除)
lpop list
- 从右边取数据(弹栈删除)
rpop list
redis 127.0.0.1:6379> lpush list a b c d
(integer) 4
redis 127.0.0.1:6379> lrange list 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
redis 127.0.0.1:6379> rpush list 1 2 3 4
(integer) 8
redis 127.0.0.1:6379> lrange list 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
5) "1"
6) "2"
7) "3"
8) "4"
redis 127.0.0.1:6379> lpop list
"d"
redis 127.0.0.1:6379> lrange list 0 -1
1) "c"
2) "b"
3) "a"
4) "1"
5) "2"
6) "3"
7) "4"
redis 127.0.0.1:6379>
4. Set
Set无序,不能重复.
- 添加元素
sadd set a b c d d
- 查询元素
smembers set
- 删除元素
srem set a
5. SortedSet(zset)
zset有顺序,不能重复
适合做排行榜,排序需要一个分数属性
- 添加元素
zadd zset score member(
score member可以有多个)
- 查看元素,从小到大(如果要查看分数,需加上withscores)
zrange zset start end [withscores]
- 查看元素,从大到小(如果要查看分数,需加上withscores)
zrevrange zset start end [withscores]
- 对member元素增加score
zincrby zset score member
其它命令
设置key的过期时间(单位:秒)
expire key second
查看剩余时间(-2: 不存在, -1: 已被持久化, 正数表示剩余的时间)
ttl key
清除过期时间(即持久化,成功返回1,失败返回0)
persist key
删除key
del key
判断是否存在(存在返回1,不存在返回0)
exists key
选择数据库,默认是0号数据库
select 0
redis持久化方案
redis数据都放在内存中,如果机器挂掉,内存的数据就会丢失,因此需要做持久化,将内存中的数据保存在磁盘,下一次启动的时候就可以恢复数据到内存中.
redis持久化有两种方式(默认开启RDB)
redis持久化有两种方式(默认开启RDB)
1.RDB 快照形式 定期将当前时刻的数据保存磁盘中,会产生一个dump.rdb文件
特点: 会存在数据丢失,性能较好,数据备份
2.AOF(append only file) 记录所有对redis的操作命令记录在aof文件中,恢复数据只需重新执行一遍即可
特点: 每秒保存,数据比较完整,耗费性能
特点: 会存在数据丢失,性能较好,数据备份
2.AOF(append only file) 记录所有对redis的操作命令记录在aof文件中,恢复数据只需重新执行一遍即可
特点: 每秒保存,数据比较完整,耗费性能
如果同时开启两个持久化方案,则按照 AOF 的持久化放案恢复数据