Redis基础
Redis
1.Redis
1.NoSQL
- SQL:关系型数据库
- 结构化
- 键值类型:Redis
- 文档类型:MongoDB
- 列类型:HBase
- Graph类型:Neo4j
- 关联的
- SQL查询
- ACID:原子性,隔离性,持久性,一致性
- 磁盘存储
- 垂直扩展
- 使用场景:
- 数据结构固定
- 对数据安全,一致性要求较高
- 结构化
- NoSQL:非关系型数据库
- 非结构化
- 无关联的
- 非SQL
- BASE:无法全部满足ACID
- 内存存储
- 水平扩展
- 使用场景:
- 数据结构不固定
- 对一致性,安全性要求不高
- 对性能要求高
2.Redis
- Remot Dictionary Server
- 远程词典服务器
- 基于内存的键值型NoSQL数据库
- 特征:
- 键值型,value支持多种不同数据结构,功能丰富
- 单线程,每个命令具备原子性
- 低延迟,速度快(基于内存,IO多路复用,良好的编码)
- 支持数据持久化
- 支持主从集群,分片集群
- 支持多语言客户端
3.Redis命令行客户端
1 | redis-cli [options][commonds] |
- options:
- -h:指定连接的redis的节点的ip地址,默认127.0.0.1
- -p:指定连接的redis节点的端口,默认6379
- -a:指定访问的密码
- commonds:
- ping:与redis服务器做心跳测试,服务端正常会返回pong
2.Redis命令
1.Redis数据结构
- key-value数据库
- key一般是String类型
- value有多种类型
2.通用命令
- KEYS:查看符号模板的所有key
- 即查找,*表示多个字符,?表示单个字符
- 因为单线程,所以太多的时候容易阻塞
- DEL:删除指定的key
- 返回值是删除key的个数
- EXISTS:判断key是否存在
- 返回01
- EXPIRE:给key设置有效期,有效期到期该key会被自动删除
- TTL:查看key的剩余有效期
3.String类型
-
字符串类型
- string:普通字符串
- int:整数类型,可以做自增自减操作
- float:浮点类型,可以做自增自减操作
-
底层都是字节数组形式存储
-
最大空间不超过512m
-
常见命令:
- SET:添加或者修改一个已经存在的String类型的键值对
- GET:根据key获取String类型的value
- MSET:批量添加多个String类型的键值对
- MGET:根据多个key获取多个String类型的value
- INCR:让一个整型的key自增1
- INCRBY:让一个整型的key自增并指定步长
- INCRBYFLOAT:让一个浮点数类型的数字自增并指定步长
- SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行
- 和SET 键值对 NX的效果一样
- SETEX:添加一个String类型的键值对,并且指定有效期
- 和SET 键值对 EX的效果一样
4.Key的层级格式
- key可以有多个单词形成层级结构,多个单词之间用:隔开
- 一般是项目名:业务名:类型:id
- 如果value是一个java对象,可以将对象序列化为json字符串后存储
5.Hash类型
-
与Java中的HashMap类似
-
散列,其value是一个无序字典
-
Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD
-
常见命令:
- HSET key field value:添加或者修改一个Hash类型的key的field的值
- HGET key field:获取一个Hash类型key的field的值
- HMSET:批量添加多个Hash类型key的field的值
- HMGET:批量获取多个Hash类型key的field的值
- HGETALL:获取一个Hash类型的key中的所有field和value
- HKEYS:获取一个Hash类型的key中的所有field
- HVALS:获取一个Hash类型的key中的所有value
- INCRBY:让一个Hash类型key的字段值自增并指定步长
- HSETNX:添加一个Hash类型的key的field值,前提是这个field不存在,否则不执行
6.List类型
- 双向链表结构,既可以支持正向检索也可以支持反向检索
- 特征:
- 有序
- 元素可以重复
- 插入和删除速度快
- 查询速度一般
- 常见命令:
- LPUSH key element ……:向列表左侧插入一个或多个元素
- LPOP key:移除并返回列表左侧的第一个元素,没有则返回null
- RPUSH key element ……:向列表右侧插入一个或多个元素
- RPOP key:移除并返回列表右侧的第一个元素
- LRANGE key start end:返回一段角标范围内的所有元素
- BLPOP和BRPOP:与LPOP和RPOP类似,在没有元素时等待指定时间,而不是直接返回null
7.Set类型
- 与Java中的HashSet类似,可以看作是一个value为null的HashMap
- 特征:
- 无序
- 元素不可重复
- 查找快
- 支持交集,并集,差集等功能
- 常见命令:
- SADD key member ……:向set中添加一个或多个元素
- SREM key member ……:移除set中的指定元素
- SCARD key:返回set中元素的个数
- SISMEMBER key member:判断一个元素是否存在于set中
- SMEMBERS:获取set中的所有元素
- SINTER key1 key2 ……:求key1与key2的交集
- SDIFF key1 key2 ……:求key1与key2的差集
- SUNION key1 key2 ……:求key1与key2的并集,重复元素只记录一次
8.SortedSet类型
- 可排序的set集合,与Java中的TreeSet类似,但底层数据结构不同
- SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序
- 底层的实现是一个跳表加hash表
- 特性:
- 可排序
- 元素不重复
- 查询速度快
- 适用于排行榜
- 常见命令:
- ZADD key score member:向sortedset中添加一个或多个元素,如果已经存在则更新score值
- ZREM key member:删除sortedset中的指定元素
- ZSCORE key member:获取sortedset中指定元素的score值
- ZRANK key member:获取sortedset中指定元素的排名
- ZCARD key:返回sortedset中元素的个数
- ZCOUNT key min max:统计score值在给定范围内的所有元素的个数
- ZINCRBY key increment member:让sortedset中的指定元素自增,步长为指定的increment值
- ZRANGE key min max:按照score排序后,获取指定排名范围内的元素
- ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内的元素
- ZINTER ZDIFF ZUNION:求交集,差集,并集
- 所有排序默认升序,降序在Z后面加REV
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 不做花看!