黑马程序员技术交流社区

标题: 【哈尔滨校区】Redis使用介绍 [打印本页]

作者: liqiangheb    时间: 2018-11-2 10:00
标题: 【哈尔滨校区】Redis使用介绍
本帖最后由 liqiangheb 于 2018-11-2 10:08 编辑

Redis

一、为什么使用

二、优点:

三、适用场景:

四、不适场景:

五、Redis结构:

Redis是一个开源的key—value型数据库,支持string、list、set、zset和hash类型数据。对这些数据的操作都是原子性的,redus为了保证效率会定期持久化数据。

六、使用场景:

七、Linux下redis:

八、Redis基础知识

Memchached:多线程+锁

九、Redis命令:

keys *查看当前库所有的键
exists <key>判断是否存在key
del <key>删除某个键
expire <key> <second>设置键过期时间 单位是s秒
ttl <key>查看还有多少秒过期 -1表示用不过期 -2表示已经过期
move <key> <db>把键移到另一个库下
dbsize查看数据库key的数量
flushdb清空当前库
flushall通杀所有库
get <key>查看对应的键值
set <key> <value>添加键值对
append <key> <value>将给定的value 追加到原值的末尾
strlen < key >获取值得长度
setnx <key> <value>当key 不存在的时候设置key值
incr <key>将key中储存的数字加1,如果为空,则值为1
decr <key>将key中储存的数字减1,如果为空,则值为-1
incrby/decrby <key> <步长>将key中的数字增减

String批量处理:

mset <key1> <value1> <key2> <value2>同时设置多个键值对
mget <key1> <key 2>同时获得多个值
msetnx <key1> <value1> <key2> <value2>当给定的key都不存在
getrange <key> <start> <stop>类似sunstring
setrange <key> <start> <stop>类似sunstring覆盖原始值
setex <key> <过期时间> <value>设置键值的同时,给定过期时间
getset <key> <value>以旧换新,设置了新的值同时得到旧值

1、特点:

单键多值

Redis列表是简单的字符串列表,从左或者从右插入

底层是双向链表,对两端的操作性能很高,通过下标查询性能很低

lpush/rpush <key> <value1> <value2> ..从左或从右插入多个值
lpop/rpop <key>从左边或右边吐出一个值,值光键亡
rpoplpush <key1> <key2>从key1 右边吐出一个值到key2的左边
lrange <key> <index>按照索引下标获取元素 从左到右
lindex <key> <index>按照索引下标获取元素 从左到右
llen <key> 获取列表长度获取列表长度
linsert <key> before <value> <newvalue>在key中value前插入newvalue
sadd <key> <value1> <value2>将多个元素加入到key中,重复值忽略
smembers <key>取出该集合的所有值
sismember <key> <value>判断集合key中是否有该value值 有就1 没有0
scard <key>返回该集合的元素个数
srem <key> <value1> <value2>删除集合中的某个元素
spop <key>随机吐出该集合一个值
srandmember <key> <n>随机从集合中取出n个值,不会从集合中删除
smove <key1> <key2> <value>将key1中的value 移动到key2 中
sinter <key1> <key2>返回两个集合的交集元素
sunion <key1> <key2>返回两个集合的并集
hset <key> <filed> <value>给key 集合中的file 键赋值value
hget <key1> <field>从key1 集合file取出value
hmset <key1> <field1> <value1> <field2> <value2>批量设置hash的值
hexists <key> <field>查看key中的field 是否存在
hkeys <key>列出key中所有的filed
hvals <key>列出该hash集合中所有的value
zadd<key><score1><value1><score2><value2>将一个或多个元素以及score加入zset
zrange<key><start><stop> withscore返回下标在区间内的集合,带有score
zrangebyscore <ket> <min> <max>[withscore] [limit offset count]返回key中 score介于min和max中的成员,升序排列
zrevrangerbyscore <key> <min> <max> [withscore] [limit offset count]降序
zincrby <key> <increment> <value>在key集合中的value上增加increment
zrem <key> <value>删除key集合下的指定元素
zcount <key> <min><max>统计 区间内的元素个数
zcord <key>获取集合中的元素个数
zrank <key><value>查询value在key中的排名,从0开始

十、redis持久化:

①持久化过程:redis单独创建(fork)一个进程来持久化,会先将数据写入临时文件中,待上次持久化结束后,会将该临时文件替换上次持久化文件,比aof高效,但是最后一次数据可能会丢失

②Fork:在linux中,fork()会产生一个跟主进程一样的子进程,出于效率考虑,主进程和子进程会公用一段物理内存,当发生改变的时候,才会把主进程“”写时复制”一份给子进程

③Redis备份的文件:在redis.conf中设置,dbfilename默认为:dump.rdb

④ Rdb保存策略:

⑤Rdb的备份:

⑥Rdb恢复:

c) AOF优点:

i. 备份机制更加稳健

ii. 可读的日志文件,通过aof恢复更加稳健,可以处理失误

d) AOF缺点:

i. 比RDB更占磁盘

ii. 备份速度较慢

十一、Redis事务:输入multi,输入的命令都会依次进入到队列中,但不会执行,直到输入exec,redis会将之前命令队列中的命令依次执行,通过discard可以放弃组队。

十二、Redis订阅/发布:

是进程中的一种消息通信模式,发送者pub发送消息,订阅者sub接收消息 剩下的略。。。

十三、Redis主从复制:

十四、Jedis:

十五、集群分布:

实现对redis的水平拓展,启动n’的redis节点,将整个数据分布在这n个节点中







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2