目录
一、NoSQL介绍
1.1什么是NoSQL
1.2为什么会出现NoSQL技术
1.3NoSQL的类别
1.4传统的ACID是什么
1.5 CAP
1.5.1 经典CAP图
1.5.4 什么是BASE
二、Redis概述
2.1 什么是Redis
2.2 Redis能干什么
2.3 Redis的特点
2.4 Redis与memcached对比
2.5 Redis的安装
2.6 Docker安装
三、 基本操作
3.1.1 set
3.1.2set操作的选项
3.1.3 MSET
3.2.1 get
3.2.2 GETDEL
3.2.3 getrange
3.2.4 MGET
3.3 Append
3.4.1 DESC
3.4.2 DESCBY
3.5.1 INCR
3.5.2 INCRBY
3.5.3 INCRBYFLOAT
3.6 STRLEN
3.7 UBSTR
总结 : 传统的关系型数据库只能存储结构化数据,对于非结构化的数据支持不够完善。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
Consistency(强一致性) Availability(可用性) Partition tolerance(分区容错性)
注意:在做分布式架构的时候必须做出取舍。==一致性和可用性之间取一个平衡==。对于大多数web应用,其实并不需要强一致性。因此牺牲C换取P,这是目前分布式数据库产品的方向。
基本可用(Basically Available)软状态(Soft state)最终一致(Eventually consistent)
Redis 提供的API支持:C、C++、C#、Clojure、Java、JavaScript、Lua、PHP、Python、Ruby、Go、Scala、Perl等多种语言。
yum install -y gcc tcl gcc-c++ make
tar -zxvf redis-6.2.7.tar.gz
cd redis-6.2.7
make && make install
说明:如果在编译过程中出现 Jemalloc/jemalloc.h:没有那个文件 没有的错误,在确保 gcc 安装成功后,可执行 make distclean 进行清除后再次安装。
redis-server
查看Redis服务:
ps -ef | grep redis关闭Redis服务:
pkill redis-server kill 进程号 单实例关闭:redis-cli shutdown 多实例关闭:redis-cli -p 6379 shutdown
cp /usr/local/redis/redis.conf /etc/
vim /etc/redis.conf # 修改daemonize no
redis-cli -p 6379
127.0.0.1:6379> ping
PONG
redis-cli shutdown
ps -ef | grep redis
注意:也可以进入终端后再关闭:127.0.0.1:6379> shutdown
// 拉取最新
docker pull redis
//拉取指定版本
docker pull redis:6.2.7
docker images
docker run --restart=always --log-opt max-size=100m --log-opt max-file=2 -p 6379:6379 --name myredis -v /home/redis/myredis/myredis.conf:/etc/redis/redis.conf -v /home/redis/myredis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes --requirepass 000415
参数说明:
–restart=always:总是开机启动 –log:配置日志 -p 6379:6379:将6379端口挂载出去 –name:给这个容器取一个名字 -v:数据卷挂载
/home/redis/myredis/myredis.conf:/etc/redis/redis.conf:这里是将 liunx 路径下的myredis.conf 和redis下的redis.conf 挂载在一起。 /home/redis/myredis/data:/data:这个同上 -d redis:表示后台启动redis redis-server /etc/redis/redis.conf:以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的目录 /etc/redis/redis.conf 也就是liunx下的/home/redis/myredis/myredis.conf –appendonly yes:开启redis 持久化 –requirepass 000415:设置密码 (如果你是通过docker 容器内部连接的话,可设可不设。但是如果想向外开放的话,一定要设置)
docker ps
docker exec -it myredis redis-cli
set name zs
get name
格式:
SET key value [NX | XX] [GET] [EX seconds | PX milliseconds |
EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]
示例:
127.0.0.1:6379> set mykey1 "hello"
OK
EX seconds -- 设置指定的过期时间,以秒为单位。
PX milliseconds -- 设置指定的过期时间,以毫秒为单位。
EXAT timestamp-seconds -- 设置指定的 Unix 时间,以秒为单位,该时间点时键将过期。
PXAT timestamp-milliseconds -- 设置指定的 Unix 时间,以毫秒为单位,该时间点时键将过期。
NX -- 仅在键不存在时设置键。
XX -- 仅在键已存在时设置键。
KEEPTTL -- 保留与键关联的过期时间。
GET -- 返回键旧的字符串值,如果键不存在则返回 nil。如果键存储的值不是字符串,则返回错误并中止 SET 操作。
示例:
127.0.0.1:6379> set mykey1 "hello"
#为键mykey1设置值“hello”
OK
127.0.0.1:6379> set mykey2 2 EX 5
#为mykey2设置过期时间5秒
OK
127.0.0.1:6379> set mykey2 2 PX 5000
#为mykey2设置过期时间5000毫秒
OK
127.0.0.1:6379> set mykey4 4 EXAT 5
#为mykey4设置unix时间,以秒为单位
OK
127.0.0.1:6379> set mykey5 5 EXAT 5000
#为mykey5设置unix时间,以毫秒为单位
OK
127.0.0.1:6379> set mykey6 6 NX
#为mykey6设置value 当mykey6不存在时创建
OK
127.0.0.1:6379> set mykey7 7 XX
#为mykey7设置value 当mykey7存在时创建(这里很明显创建失败)
(nil)
127.0.0.1:6379> set mykey6 8 GET
"6"
#返回旧键即mykey中的字符串,如果不存在则返回nil,相当于get操作
格式:
MSET key [key ...]
示例:
127.0.0.1:6379> mset mykey200 200 mykey300 300
#一次性创建多个键值对
OK
格式:
GET Key
127.0.0.1:6379> get mykey1
#查找一个存在的键
"hello"
127.0.0.1:6379> get mykey100
#查找一个不存在的键
(nil)
格式:
GETDEL key
示例:
127.0.0.1:6379> set mykey10 100
#新建一个mykey10键并且赋值
OK
127.0.0.1:6379> getdel mykey10
#找到并且删除该mykey10
"100"
127.0.0.1:6379> get mykey10
#再查看就查不到了
(nil)
格式:
GETRANGE key start end
示例:
127.0.0.1:6379> getrange mykey1 2 8
#指定查看的键为mykey1 起始位置为2 结束到8
"llo wor"
格式:
MGET key [key ...]
示例:
127.0.0.1:6379> mget mykey200 mykey300
1) "200"
2) "300"
APPEND key value
示例:
127.0.0.1:6379> append mykey1 " world"
#为mykey1后面追加“ world”
(integer) 11
127.0.0.1:6379> get mykey1
#查看
"hello world"
DECR key
示例:
127.0.0.1:6379> set mykey8 1
OK
127.0.0.1:6379> decr mykey8
(integer) 0
127.0.0.1:6379> decr mykey8
(integer) -1
注意:
(1)desc 能够自减的对象必须是一个数值型数据
(2)desc只能进行自减一的操作
格式:
DECRBY key decrement
示例:
127.0.0.1:6379> decrby mykey8 10
#自减并且指定偏移量为10
(integer) -11
格式:
INCR key
示例:
127.0.0.1:6379> incr mykey8
(integer) -10
INCRBY key increment
127.0.0.1:6379> incrby mykey8 20
(integer) 10
INCRBYFLOAT key increment
示例:
127.0.0.1:6379> incrbyfloat mykey8 0.1
#incrbyfloat 可以使用浮点数自增
"10.1"
格式:
STRLEN key
示例:
127.0.0.1:6379> strlen mykey1
#获取指定键中的值的长度
(integer) 11
格式:
SUBSTR key start end
示例:
127.0.0.1:6379> substr mykey1 0 7
#获取指定键子串 起始0 结束到7
"hello wo"