Redis
备注:个人学习笔记,是学习B站上的狂神说Java的课程摘录的笔记。
视频地址:https://www.bilibili.com/video/BV1S54y1R7SB
B站up主:狂神说Java
学习描述:
Nosql概述
NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
- 键值(Key-Value)存储数据库
- 列存储数据库
- 文档型数据库
- 图形(Graph)数据库
- 易扩展
- 大数据量,高性能
- 灵活的数据模型
- 高可用
Redis概述
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
Redis是单线程的
- Redis是基于内操作的,CPU不是Redis的瓶颈,Redis的瓶颈是根据机器的内存和网络带宽,所以就使用了单线程来实现。
Redis单线程快的原因
- Redis是将所有的数据全部放到内存中,所以说使用单线程去操作效率就是最高的,多线程CPU上下文会切换,耗时,对于内存系统来说,如果没有上下文切换的效率是最高的,多次读写都是在一个CPU上的。
五大数据类型:
String:
案例思路:计数器,统计多单位数量(关注,访问),粉丝数,对象缓存时间
- keys *:查看所有key
-
127.0.0.1:6379> keys * 1) "key2" 2) "key1"
- exists key:判断当前的key是否存在
-
127.0.0.1:6379> exists key3 (integer) 0 127.0.0.1:6379> exists key1 (integer) 1
-
move key 1:将key移到1号数据库
-
expire key 10:设置key的过期时间,单位是秒
-
127.0.0.1:6379> expire key1 10 (integer) 1 127.0.0.1:6379> get key1 "v1" 127.0.0.1:6379> get key1 (nil)
-
ttl key:查看当前key的剩余时间
-
127.0.0.1:6379> expire key1 30 (integer) 1 127.0.0.1:6379> ttl key1 (integer) 16
- type key:查看当前key的类型
127.0.0.1:6379> type key2
string
- set key value:设置值
127.0.0.1:6379> set key1 v1
OK
- get key:获得值
- keys * :获得所有的key
127.0.0.1:6379> keys *
1) "key2"
2) "key1"
127.0.0.1:6379> get key2
"v2"
- append key value:追加字符串,如果当前key不存在,就相当于setkey
127.0.0.1:6379> append key1 =v
(integer) 4
127.0.0.1:6379> get key1
"v1=v"
- strlen key:获取字符串的长度
127.0.0.1:6379> strlen key1
(integer) 4
- incr key:自增1
- decr key:自减1
127.0.0.1:6379> incr key1 #key1是string类型无法自增
(error) ERR value is not an integer or out of range
127.0.0.1:6379> incr key2
(error) ERR value is not an integer or out of range
127.0.0.1:6379> set key3 1 #设置key3
OK
127.0.0.1:6379> incr key3
(integer) 2
127.0.0.1:6379> get key2
"v2"
127.0.0.1:6379> get key3
"2"
127.0.0.1:6379> decr key3 #自减
(integer) 1
127.0.0.1:6379> get key3
"1"
- incrby key 10:设置步长,指定增量
- decrby key 10:设置步长,指定减量
127.0.0.1:6379> set key4 65
OK
127.0.0.1:6379> get key4
"65"
127.0.0.1:6379> incrby key4 8
(integer) 73
127.0.0.1:6379> decrby key4 55
(integer) 18
- getrange key 0 3:截取字符串[0,3]
- getrange key 0 -1:获取全部的字符串
127.0.0.1:6379> getrange key1 0 -1
"v1=v"
127.0.0.1:6379> getrange key1 1 3
"1=v"