redis
[TOC]
redis基本知识
redis: 一种分布式的内存数据库缓存
NoSQL: Not Only SQL “不仅仅是SQL” 泛指非关系型数据库
单进程
redis默认16个库,下表从开始,初始化使用0号库
大数据时代的三V : Volume(海量) Variety(多样) Velocity(实时)
互联网三高: 高性能 高可用 高扩展
高性能: 响应(低延迟) 吞吐(高吞吐量 高并发)
TPS QPS
amdahl定律
RDBMS和NoSQL的区别
1 2 3 4 5 6 7 8 9 10 11 12 13
| RDBMS: 高度组织化结构化的数据 结构化查询语言(SQL) 数据操纵语言,数据定义语言 严格的一致性 基础事务 NoSQL: 代表的不仅仅是SQL 没有声明性查询语言 没有预定义的模式 键值存储 文档存储 列存储 图形存储 最终一致性而非ACID属性 非结构化和不可预知的数据 CAP属性 高性能 高可用 可伸缩性
|
分布式
不同的多台服务器上面部署不同的服务模块(工程),他们之间通过RPC(Remote Procedure Call 远程过程调用)/RMI之间通信和调用,对外提供服和组内协作
集群
不同的多台服务器上面部署相同的服务模块,通过分布式调度软件进行统一的调度,对外提供访问和服务
分布式数据库中的CAP和BASE
CAP
- C: Consistency(强一致性)
- A: Availability(可用性)
- P: Partition tolerance(分区容错性)
BASE
- 基本可用(Basically Available)
- 软状态(Soft State)
- 最终一致(Eventually Consistent)
Key
1 2 3 4 5
| set k1 v1 set k2 v2 get k1 get k2 set k1 value1
|
dbsize
查看当前数据库的key数量
flushdb
清空当前库
flushall
清空所有的库
keys *
查看当前库的所有的键
keys k?
查看当前库中以k
开头的键
select index(0~15)
选择库
Redis5种数据类型
String(字符串)(一key单value)
string是redis最基本的类型,一个key对应一个value string是二进制安全的,redis的string可以包含任何数据,一个redis的string的value最多可以是512M
string类型的内部编码有三种
- int 储存八个字节的长整型
- embstr 代表embstr格式的SDS(Simple Dynamic String) 简单动态字符串, 用来储存小于44个字节的字符串, 只分配一次内存空间(因为Redis和SDS是连续的)
- raw: 储存大于44个字节的字符串, 需要分配两次内存空间
redis中浮点数和大整数怎么存
k的值一定要为数字类型
1 2
| set k abcdefg; GETRANGE k 0 3;
|
1 2
| SETRANGE k 0 ABCD; get k;
|
1 2 3 4
| setex k 10 v; => set k v; expire k 10;
|
set(集合) (无序且唯一 一key多value)
实现: 字典
1 2 3 4 5 6 7 8 9 10 11 12
| smembers set sadd set 1 2 1 2 3 3 smember set => 1) "1" 2) "2" 3) "3" sismember set 9 scard set SREM set 1 SRANDMEMBER set 5 spop set
|
1
| smove set1 set2 value //将set1中的value移动到set2中
|
1 2 3
| sdiff set set1 sinter set set1 sunion set set1
|
hash(哈希)(一key多value)
实现: 哈希表
1 2 3 4 5 6 7 8 9 10 11 12 13
| hset student name "jack" hget student name hmset student name "jack age 21" hmget student name age hgetall student HDEL student age hlen student HEXISTS student age HKEYS student HVALS student HINCRBY student age 2 HINCRBYFLOAT student age 3.0 HSETNX student number 1
|
list (列表) (字符串链表) (一key多value)
结构: LinkedList
lrange
lindex
1 2 3 4 5 6 7 8 9 10
| Lpush list 1 2 3 4 5 Lrange list 0 -1 => 1) "5" 2) "4" 3) "3" 4) "2" 5) "1" Lpop list Rpop list
|
1 2 3 4 5 6 7 8 9 10 11 12
| Rpush list 1 2 3 4 5 Lrange list 0 -1 => 1) "1" 2) "2" 3) "3" 4) "4" 5) "5" Lpop list Rpop list Lindex list 2 llen list //3 长度
|
1 2 3 4 5 6 7 8 9 10
| lpush list 1 2 3 4 5 6 7 8 LTRIM list 0 5 LRANGE list 0 -1 = > 1) "8" 2) "7" 3) "6" 4) "5" 5) "4" 6) "3
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| rpush list1 4 5 6 7 rpush list2 1 2 3 rpoplpush list1 list2 lrange list2 0 -1 = > 1) "7" 2) "1" 3) "2" 4) "3" LSET list2 0 9 1) "9" 2) "1" 3) "2" 4) "3" LINSERT list2 before/after 9 10
|
Zset(有序集合)(sorted set)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| zadd zset 1 v1 2 v2 3 v3 zrange zset 0 -1 => 1) "v1" 2) "v2" 3) "v3" ZREVRANGE zset 0 -1 => 1) "v2" 2) "v1" zrange zset 0 -1 withscores => 1) "v1" 2) "1" 3) "v2" 4) "2" 5) "v3" 6) "3" ZRANGEBYSCORE zset 2 3 => 1) "v2" 2) "v3" ZRANGEBYSCORE zset 2 (3 => 1) "v2" ZRANGEBYSCORE zset 2 3 limit 0 1 => 1) "v2" ZREM zset v3 => 1) "v1" 2) "v2" ZCARD zset => (integer) 2 ZCOUNT zset 1 2 => (integer) 2 ZRANK zset v2 => (integer) 1 ZSCORE zset v1 => "1" ZREVRANK zset v2 "0" ZREVRANGEBYSCORE zset 2 1
|