Redis 黑马(学习记录)
redis: remote dictionary server 远程数据服务,内存高速缓存数据库,C语言编写的
数据保存在内存中,数据模型为key-value,redis实现了内存中数据的持久化,定时存储到硬盘中。
Redis 的应用场景
mysql数据库,数据是以文件形式存储在硬盘里面
的
缓存:数据缓存、页面缓存(smarty)
目的:如果数据在短时间内不会发生变化,提高用户的请求速度和降低网站的负载,读取速度更快的介质
存储介质:文件、数据库、内存,内存是经常用于数据缓存
缓存形式:
页面缓存,经常用在CMS内存管理系统里面
数据缓存,经常用在页面的具体数据里面
举个栗子
- 新闻页面,内容主题单一、集中,适合做
页面缓存
- 商品页面,商品页面的组成部分根据业务特点,各个部门数据比较独立,适合给他们分别作
数据缓存
Redis 和 memcache 比较
- redis 不仅仅支持简单的 k/v 类型的数据,同事还提供 list、set、zset、hash等数据结构
- redis 支持 master-slave (主-从)模式应用
- redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行用
- redis 单个 value 的最大限制是 1GB, memcached 只能保存 1MB的数据
redis-cli 启动redis客户端脚本文件
redis-server 启动redis服务脚本文件
redis-benchmark 压力测试文件
redis-check-aof
redis-check-dump 检测设备文件脚本
创建redis的运行目录,并拷贝文件
cp src/redis-cli /usr/local/redis
cp src/redis-server /usr/local/redis
cp redis.conf /usr/local/redis
修改redis.conf,改为后台启动服务。
---> daemonize yes (17行)
启动服务
./redis-server redis.conf
ps -A | grep redis
./redis-cli
基本操作
set name du
get name
keys 键操作
keys * 查询所有 key
keys app* 查询匹配的 key
exists key 测试指定的key是否存在
del key1 key2 ... 删除指定的key
type key 返回key的类型
keys pattern 返回匹配结果 (*)
rename oldkey newkey 改名字
dbsize 返回当前数据库的key的数量
expire key seconds 为key指定过期时间
ttl key 返回key的剩余时间
select db-index 选择数据库
move key db-index 将 key 从单签数据库移动到指定的数据库
flushdb 删除当前数据库中的所有 key
flushall 删除所有数据库中的所有 key
config get databases 查询一共有多少数据库
redis 默认有 16 个db(数据库)
数据类型
string 类型操作
set key value 设置 key 对应的值为 string 类型
mset key1 value1 ... keyn valuen 一次性设置多个 key
mget key1 key2 ... keyn 一次性读取多个 key
incr key 加加 i++ , key 必须为 整数
decr key 减减 i-- , key 必须为 整数
incrby key integer 同 incr ,integer 步进
decrby key integer 同 decr ,integer 步进
append key value 给指定 key 的字符串值追加 value
substr key start end 返回截取过的 key 的字符串值
list 类型数据(双向链表)
lpush key string 在 key 对应 list 的头部添加字符串元素
rpop key 从 list 的尾部删除元素,并返回删除元素
llen key 返回 key 对应,list 的长度,key 不存在返回 0,如果 key 对应类型不是 list 返回错误
lrange key start end 返回对应区间内的元素,下表从 0 开始
rpush key string 同上,在尾部添加字符串元素
lpop key 从 list 的头部删除元素,并返回删除元素
ltrim key start end 截取 list ,保留制定区间内元素
set 集合类型
redis 的 set 是 string 类型的无序集合。
set 元素最大可以包含()个元素。
sadd key member 添加一个 string 元素到 key 对应的 set 的集合中,成功返回 1,如果元素已经在集合中 返回 0,key 对应的 set 不存在返回错误
srem key member [member] 从 key 对应 set 中移除给定元素,成功返回1
smove p1 p2 member 从 p1 对应 set 中移除 member 并添加到 p2 对应 set 中
scard key 返回 set 的元素个数
sismember key member 判断 member 是否在 set 中
sinter key1 key2 ... keyn 返回所有给定 key 的交集
sunion key1 key2 ... keyn 返回所有给定 key 的并集
sdiff key1 key2 ... keyn 返回所有给定 key 的差集
smembers key 返回 key 对应 set 的所有元素,结果是无序的
这一块还需要补充
Sort Set 排序集合类型
和 set 一样,sort set 也是 string 类型元素的集合,不同的是每一个元素都会关联一个权
。
通过权值
可以有序的获取集合中的元素
zadd key score member 添加元素到集合,元素在集合中存在则更新对应 score
zrem key member 删除指定元素,1表示成功,如果元素不存在返回 0
zincrby key incr member 按照 incr 幅度增加对应 member 的 score 值,返回 score 值
zrank key member 返回指定元素在集合中的排名(下标),集合中元素是按 score 从小到大排序的
zrevrank key member 同上,但是结合中元素按 score 从大到小排序的
zrange key start end 类似 lrange 操作,从集合中取指定区间的元素,返回的是有序结果集
zrevrange key start end 同上,返回结果是按 score 逆序的
zcard key 返回集合中元素个数
zscore key element 返回给定元素对应的 score
zremrangebyrank key min max 删除集合中排名在给定区间的元素
zremrangebyrank key min max 删除排名在指定范围的元素(权值从小到大排序)
重复元素
set 没有重复
list 可以有重复
sort set 没有重复值
hash 类型
事务
multi 开启事务
exec 执行事务
discard 回滚
持久化功能
redis 为了内部数据安全考虑,会把本身的数据以文件
形式保存到硬盘中一份,在服务器重启之后会自动把硬盘的数据恢复到内存(redis)中。
数据保存到硬盘的过程就称之为“持久化”效果。
分类:
- snap shotting 快照持久化
- 该持久化默认开启,一次性把redis中全部的数据保存一份存储到硬盘中,如果数据非常多(10-20G)就不适合频繁进行该持久化操作。
- 修改 redis.conf 文件中的 save 900 1 项,来修改备份的频率。
- dbfilename dump.rdb 定义备份文件的名字。
每次生成快照都需要耗费相当多的资源,如果频率过高,数据保持了相对安全(不丢失),但是服务器的资源都被生成快照占用了,怎么办?
-
append only file (AOF持久化)
精细持久化,秒级,特别的耗费性能,但是如果一秒内有大量的修改,那么这种精细持久化,就体现出来了价值,“一次保存很多”。考虑下双十一,抢购等活动