阳哥Redis
16年录的,有些东西可能有些过时
笔记从p5开始做
K-V键值
文档数据库 - MongoDB - 分布式文件存储的数据库,的代表
列存储数据库 - HBase
图关系数据库 - Neo4J、InFoGrid - 社交关系,广告推荐
CA 单点集群 传统数据库
CP 性能不是很高 Redis
AP 对一致性要求不高 大多数网站架构选择
BASE
Basically Available 基本可用
Soft state 软状态
Eventually consistent 最终一致
通过放弃系统某一时刻的一致性来换取系统整体伸缩性和性能的改观
Redis kv cache persistence
REmote DIctionary Server
完全开源,高性能kv分布式内存数据库
特点:
怎么玩
本笔记基于b站尚硅谷的视频所做
解决功能性问题:Java、Jsp、RDBMS、Tomcat、HTML、Linux、JDBC、SVN
解决拓展性问题:Struts、Spring、SpringMvc、Hibernate、Mybatis
解决性能问题:NoSQL、Java线程、Hadoop、Nginx、MQ、ElasticSearch
单服务器->单数据库
->
nginx -> 多台服务器 ->数据库
问题:用户信息存在session对象里,多台服务器里的session对象怎么信息同步?
问题:IO压力
A 原子性
C 一致性
I 独立性
D 持久性
C 强一致性
A 可用性
P 分区容忍性
CA 单点集群 传统数据库
CP 性能不是很高 Redis
AP 对一致性要求不高 大多数网站架构选择
高并发的读写
海量数据读写
对数据高可拓展性
最新N个数据(通过list按自然时间排序的数据
排行榜Top N(利用zset
时效性的数据(例如验证码
计数器,秒杀(原子性
去除大量数据中的重复数据(set
构建队列(利用list
发布订阅消息系统(pub/sub模式
Memcache
Redis
MongoDB
按行存储
www.redis.io
www.redis.cn
先要安装gcc,然后再装
# wget http://download.redis.io/releases/redis-6.2.1.tar.gz # tar xzf redis-6.2.1.tar.gz # cd redis-6.2.1 # make # make install
make 后src目录下会出现redis-server 与redis-cli
若make后报了好多错,可以用make distclean
清楚一下再make
一遍
make install 后 /usr/local/bin
目录中会出现redis-check-aof redis-cli redis-server redis-benchmark redis-check-rdb redis-sentinel
六个文件
前台启动
# redis-server
后台启动
先复制一份redis.conf
然后把其中的daemonize no
改成daemonize yes
# redis-server ///redis.conf的所在地///
keys *
查看当前库的所有key
exists [key]
查看某个key是否存在
type [key]
查看某个key是啥类型
del key
删除指定的key数据
unlink key
根据value选择非阻塞删除,没当时删除,真正的删除会在后续的异步操作中执行
expire [key] [time/s]
time秒后key过期
ttl [key]
查看key的过期时间,-1表示 永不过期,-2表示过期
select 1
切换到1号库,默认有0-15号
dbsize
当前库的key的数量
fluashdb
清空当前库
flushall
清空所有库
set
get
strlen
EXPIRE
setnx
append [key] [str]
incr [key] 一定要是数字值才能这样,value++
decr [key] 一定要是数字值才能这样,value--
incrby [key] [int]
decrby [key [int]
getrange [key] [start] [end] 获取从start 到end位的值,包括end
setrange [key] [start] [end]
setex [key] [value] [time_sec]
sent [key] [value] 如果不存在就设置
mset
mget
msetnx
getset
单键多值
底层是个双向链表,对两端操作性能比较高,对下标操作比较慢
值在键在,值亡键亡
底层是个quicklist
元素少的时候是个ziplist,压缩链表
数据量增加,多个压缩链表,组成一个quicklist
LPUSH [list_name] [ele1] [ele2] [ele3]
RPUSH [list_name] [ele1] [ele2] [ele3] 与LPUSH相似,但是是反着进的
LRANGE [lis_name] [start_position] [end_position]
LPOP [list_name] 会返回没掉的值,值取光的话,键就没了
RPOP [list_name] 会返回没掉的值,值取光的话,键就没了
rpoplpush
lrange
lrange k1 0 -1 取k1的所有元素
lindex
llen
linsert
lrem
lset
sadd
smembers
dismember
scard
srem
spop
srandmember
smove
sinter
sunion
sdiff
hset
hget
hmset
hexists
hkeys
hvals
hincrby
hsetnx
zadd
zrange
zrangebyscore
zrevrangebyscore
zincrby
zrem
zcount
zrange
zrank
从p13开始看