Redis基本使用

Redis简介

Redis 是Remote Dictionary Server(远程数据服务)的缩写,由意大利人antirez(Salvatore Sanfilippo)开发的一款高速缓存数据库,该软件使用C语言编写,它的数据模型为key-value,它支持丰富的数据结构(类型),比如String、List、Hash、Set、Sorted set。可持久化,保证数据安全。
缓存 有两种类型:数据缓存、页面缓存(smarty),使用缓存可以合理的减轻数据库的负责。在开发网站的时候如果一些数据在短时间内不会发生变化,而它们还有被频繁访问,为了提高用户的请求速度和降低网站的负载,就把这些数据存放在一个读取速度更快的介质上(或者是通过较少的计算量就可以获得该数据),该行为就称为数据的缓存。该介质可以是文件、数据库、内存,内存经常用户数据缓存。
页面缓存经常用在CMS内存管理系统里面。新闻页面适合做页面缓存。
数据缓存经常会用在页面的具体数据里面。商品页面的组成部分根据业务特点,各个部分数据比较独立,适合给他们分别做"数据缓存"。

Redis&Memcache比较

Redis不仅仅支持简单的k/v类型数据,同时还提供list、set、zset、hash等数据结构的存储。
Redis支持master-slave(主-从)模式应用。
Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
Redis单个value的最大限制1GB,memcache只能保存1MB的数据。

Redis/src下几个重要文件讲解

redis-cli:终端操作脚本
redis-server:启动redis服务脚本文件
redis-benchmark:压力测试文件
redis-check-aof/redis-check-dump:检测备份文件脚本
redis.conf:daemonize yes(将弄no改为yes,则为后端启动)

Docker安装Redis

docker run -d -p 6379:6379 --name xipikerRedis redis
通过[docker exec -it <容器id||容器名> bash]进入容器
[/src]几个重要文件在 [usr/local/bin/]下面

具体使用

在redis里面,除了空格和"\n"不能作为名字的组成内容外,其他内容都可以作为key的名字部分,名字的长度不做要求。

命令描述
exists [key]测试指定key是否存在
del [key]删除给定的key
type [key]返回给定key的value类型
keys [pattern]返回匹配指定模式的所有key
rename [oldkey] [newkey]改key的名字
dbsize返回当前数据库key的数量
expire [key] seconds为key指定过期时间
ttl [key]返回key的剩余过期时间
select db-index选择数据库
move key db-index将key从当前数据库移动到指定数据库
flushdb删除当前数据库中的所有key
flushall删除所有数据库中的所有key

String类型操作

命令描述
set [key] value设置key对应的值为string类型的value
mset [key1] [value1] [key2] [value2]一次设置多个key值
mget [key1] [key2]一次获取多个key值
incr [key]对key的值做加加操作,并返回新的值
decr [key]同上,但是做的是减减操作
incrby [key] [integer]同incr,加指定值
decrby [key] [integer]同decr,减指定值
append [key] [value]给指定key的字符串追加value
substr [key] [start] [end]返回截取过key的字符串

数据类型List链表
list类型其实是一个双向链表,通过push、pop操作从链表的头部或者尾部添加删除元素。这使得list即可以作为堆栈,也可以作队列。上进上出:栈,上进下出:队列。
链表的使用场景:获取最新的用户登录信息"select * from user order by logintime desc limit 10",以上sql语句可以实现用户需求,但是数据多的时候,全部数据都要受到影响,对数据库的负载比较高。必要情况还需要给关键字段(id或logintime)设置索引,索引也比较消耗系统资源。如果通过list链表实现以上功能,可以在list链表中只保留最新的10个数据,每进来一个新数据进来就删除一个旧数据。每次就可以从链表中直接获得需要的数据。极大节省各方面资源消耗。

命令描述
lpush [key] string在key对应list的头部添加字符串元素
rpop [key]从list的尾部删除元素,并返回删除元素
llen [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元素最大可包含(2的32次方-1)个元素。
关于set集合类型除了基本的增删操作,还包括集合取并集(union)、交集(intersection)、差集(difference)。通过这些操作可以很容易的实现sns中的好友推荐功能。

命令描述
sadd [key] [member]添加一个string元素到key对应的set集合中,成功返回1,如果元素已经在集合中返回0,key对应的set不存在返回错误
srem [key] [member] [member2]用于移除集合中的一个或多个成员元素,不存在的成员元素会被忽略。当 key 不是集合类型,返回一个错误。
smove [key1] [key2] [member]从key1对应set中移除member然后添加到key2中
scard [key]返回set的元素个数
sismember [key] [member]判断member是否在set中
sinter [key1] [key2]返回所有给定的key的交集
sunion [key1] [key2]返回所有给定的key的并集
sdiff [key1] [key2]返回所有给定的key的差集
smember [key]返回key对应set的所有元素,结果是无序的

数据类型Sort set
sorted set是string类型元素的集合,每个元素会关联一个权,通过权值可以有序的获得集合中的元素。
该sort set应用场景:获得热门帖子(回复量)信息:“select * from message order by backnum desc limit 5”;(以上需求可以通过简单sql语句实现,但是sql语句比较耗费mysql数据库资源)。

命令描述
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]类似lrange操作从集合中去指定区间元素。返回的是按score逆序结果
zcard [key]返回集合中元素个数
zscore [key] [element]返回给定元素对应的score
zremrangebyrank [key] [min] [max]删除集合中排名在给定区间的元素

数据类型Hash
hash数据类型存储的数据与mysql数据库中存储的一条记录极为相似。

命令操作
hset [key] [field] [value]设置hash field为指定值,如果key不存在则先创建
hget [key] [field]获取指定的hash field
hmget [key] [field1] [field2] …获取全部指定的hash field
hmset [key] [field1] [value1] …同时设置hash的多个field 和 value
hincrby [key] [field] [integer]将指定的hash field加上指定值
hexists [key] [field]测试指定field是否存在
hdel [key] [field]删除指定hash的field
hlen [key]返回指定hash的field数量
hkeys [key]返回hash的所有field
hvals [key]返回hash的所有value
hgetall [key]返回hash的所有field和value
持久化功能

redis为了内部数据安全的考虑,会把本身的数据以文件的形式保存到硬盘一份,在服务器重启之后会自动把硬盘的数据恢复到内存(redis)的里面。数据保存到硬盘的过程就称为"持久化"效果。

snap shotting 快照持久化

该持久化默认开启,一次性把redis中全部的数据保存一份存储在硬盘中,如果数据非常多(10-20G)就不适合频繁该持久化操作。
该持久化默认保存文件为dump.rdb,可以在redis.conf进行修改,dbfilename参数进行修改
该持久化默认备份频率,可以在redis.conf进行修改:
save 900 1 #900秒内如果超过1个key被修改,则发起快照保存
save 300 10 #同上
save 60 10000 #同上
以上三个save意思为,数据修改的频率非常高,备份频率也高,数据修改的频率低,备份的频率也低。
快照支持化和精细持久化可以尽最大程度保证数据的安全。

append only file(AOF持久化)

本质:把用户执行的每个"写"指令(添加、修改、删除)都备份到文件中,还原数据的时候就是执行具体写指令来重建整个数据库的内容。
开启AOF持久化(会清空redis内部的数据)。
同时可以修改备份文件的名字,默认是appendonly.aof
appendfsync always //每次收到写命令就立即强制写入磁盘,速度慢,但是可以完全保证持久化,不推荐使用。
appendfsync everysec //每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐使用。
appendfsync no //完全依赖os,性能最好,持久化没有保证。

命令描述
bgsave异步保存数据到磁盘
lastsave返回上次成功保存到磁盘的unix时间戳
shutdown同步保存到服务器并关闭redis服务器
bgrewriteaof当日志文件过长时优化aof日志文件存储

./redis-cli bgrewriteaof
./redis-cli bgsave
./redis-cli -h 127.0.0.1 -p 6379 bgsave #手动发起快照

Redis主从模式

为了降低每个redis服务器的负载,可以多设置几个,并做主从模式,一个服务器负载"写"(添加、修改、删除),其他服务器负载"读"数据主服务器数据会"自动"同步给从服务器
redis.config [slave-read-only yes] [slaveof localhost port]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值