__Redis总结
2021/5/7 19:31:08
本文主要是介绍__Redis总结,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
阳哥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分布式内存数据库
特点:
- 支持数据持久化
- 除了kv,还支持list、set、zset、hash
- 支持数据备份
能干啥: - 内存存储和持久化,支持异步将内存中的数据写到硬盘上,同时不影响服务
- 去最新的n哥数据操作
- 模拟类似于HttpSession这种需要设定过期时间的功能
- 发布、订阅消息
- 定时器、计数器
怎么玩
- 数据类型、基本操作、设置
- 持久化和复制,RDB / AOF
- 事物的控制
- 复制
README
本笔记基于b站尚硅谷的视频所做
互联网发展
解决功能性问题:Java、Jsp、RDBMS、Tomcat、HTML、Linux、JDBC、SVN
解决拓展性问题:Struts、Spring、SpringMvc、Hibernate、Mybatis
解决性能问题:NoSQL、Java线程、Hadoop、Nginx、MQ、ElasticSearch
单服务器->单数据库
->
nginx -> 多台服务器 ->数据库
问题:用户信息存在session对象里,多台服务器里的session对象怎么信息同步?
- 存到客户端里,有安全问题
- 互相复制,浪费性能
- 存到NoSQL数据库中
问题:IO压力
- 分库分表读写逻辑
- 存到缓存数据库中
SQL与NoSQL
传统ACID
A 原子性
C 一致性
I 独立性
D 持久性
NOSQL的CAP - 只能3选2
C 强一致性
A 可用性
P 分区容忍性
CA 单点集群 传统数据库
CP 性能不是很高 Redis
AP 对一致性要求不高 大多数网站架构选择
NoSQL适用场景
-
高并发的读写
-
海量数据读写
-
对数据高可拓展性
-
最新N个数据(通过list按自然时间排序的数据
-
排行榜Top N(利用zset
-
时效性的数据(例如验证码
-
计数器,秒杀(原子性
-
去除大量数据中的重复数据(set
-
构建队列(利用list
-
发布订阅消息系统(pub/sub模式
常见NoSQL
Memcache
- 不支持持久化
- 存内存中
Redis
- 支持持久化
- 多种数据类型
MongoDB
- 文档数据库
- 支持二进制数据及大型数据存储
行式存储数据库
按行存储
Redis
- KV
- string
- list
- set
- zset(sorted set)
- 支持不同方式的排序
- 缓存在内存中,能周期性的把更新的数据写入硬盘活着写入追加的记录文件
- 在此基础上时间了主从同步
官网
www.redis.io
www.redis.cn
- 默认16个db
- 端口6379
- 单线程 + 多路IO复用,串行操作
安装Redis
安装
先要安装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-check-aof 修复有问题的aof文件
- redis-cli 客户端
- redis-server 服务器
- redis-benchmark 性能测试工具
- redis-check-rdb 修复有问题的rdb文件
- redis-sentinel 集群Redis使用
启动
前台启动
# 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
清空所有库
String
- 二进制安全的,意味着string可以包含任何数据,比如jpg图片,或者序列化的对象
- 一个Redis中的字符串value最大512M
- simple dynamic string,SDS,动态字符串
- 每次分配高于字符串长度,每次扩容翻倍,若大于1M,每次只会扩容1M
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
List
-
单键多值
-
底层是个双向链表,对两端操作性能比较高,对下标操作比较慢
-
值在键在,值亡键亡
-
底层是个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
Set
- 底层是个hash表
sadd
smembers
dismember
scard
srem
spop
srandmember
smove
sinter
sunion
sdiff
Hash
- 是一个kv对的集合,是一个string类型的 field 和 value的映射表,很适合存储对象,类似Java里面的Map<String,Object>
hset
hget
hmset
hexists
hkeys
hvals
hincrby
hsetnx
Zset
- 等价于Java的Map<String, Double>,又类似于Treeset
- 跳跃表,给value排序根据score的范围,效率堪比红黑树,实现比红黑树简单
zadd
zrange
zrangebyscore
zrevrangebyscore
zincrby
zrem
zcount
zrange
zrank
配置文件详解
从p13开始看
这篇关于__Redis总结的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27阿里云Redis学习入门指南
- 2024-12-27阿里云Redis入门详解:轻松搭建与管理
- 2024-12-27阿里云Redis学习:新手入门指南
- 2024-12-24Redis资料:新手入门快速指南
- 2024-12-24Redis资料:新手入门教程与实践指南
- 2024-12-24Redis资料:新手入门教程与实践指南
- 2024-12-07Redis高并发入门详解
- 2024-12-07Redis缓存入门:新手必读指南
- 2024-12-07Redis缓存入门:新手必读教程
- 2024-12-07Redis入门:新手必备的简单教程