1、关系型数据库 非关系型数据库
--关系型数据库:
--非关系型数据库:nosql == not only lqs
--举例:redis || mongodb || hbase hadoop || cassandra hadoop
--没有通用 api 和 语法,每一种非关系型数据库都有自己擅长的场景
--不支持sql语句
--基本形式 k-v
--关系型和非关系型的区别:
--关系型数据库支持非常复杂的数据关系,非关系型使用的是 kv 形式所以关系清晰明了
--关系型数据库支持事务[数据一致性],非关系型不支持
--两者取长补短,优势互补
2、redis的认识,非常重要
--redis 基于C语言[效率高] 支持网络[可搭建集群] 可内存也可持久化 key/value形式 有多种语言的api可供调用
--redis 及其他非关系型数据库 使用特点:
--数据可持久化,重新启动后可从磁盘加载至内存
--redis不仅支持 key-value 格式数据,还支持 set zset hash list 等数据格式的存储
--支持数据备份,即master-slave形式的备份
--redis优势:
--性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
--丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
--原子 – Redis的所有操作都是原子性的。
--丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
--redis应用场景:
--用来做缓存(ehcache/memcached)——redis的所有数据是放在内存中的(内存数据库)
--可以在某些特定应用场景下替代传统数据库——比如社交类的应用
--在一些大型系统中,巧妙地实现一些特定的功能:session共享、购物车
--只要你有丰富的想象力,redis可以用在可以给你无限的惊喜…….
3、redis的安装
--windows 安装:
--Redis-x64-3.2.100.msi
--https://pan.baidu.com/s/18gVEv7g1F0BuS6n0_5uJCg#list/path=%2F 链接
--ik18 密码
--直接安装即可,记得改变安装路径、设置path、设置memory limit
--redis是:客户端 服务器模式
--最基本启动:有后台直接展示出来
--redis-server启动
--redis-server:直接输入该命令使用的是默认conf文件,也就是安装目录中的redis.windows.conf
--redis-server redis.windows.conf:这个文件名可以换到任何一个目录中无所谓
--redis-cli:输入即可
--无后台启动:
--redis-server --service-install redis.windows.conf --loglevel verbose // 安装服务器
[报错]:[5364] 19 Aug 22:50:26.865 # HandleServiceCommands: system error caught. error code=1073, message = CreateService failed: unknown error // 表示需要先卸载再安装
--redis-server --service-uninstall // 卸载服务
--redis-server --service-start // 启动服务
--redis-server --service-stop // 停止服务
--windows下根据端口号查询进程,杀死进程
--根据启动的端口查询服务:netstat -ano|findstr 6379
--根据进程号杀死服务:taskkill /pid 193548 /f
--linux下查看redis 并杀死redis
--ps aux | grep redis 查看redis服务器进程
--sudo kill -9 pid 杀死redis服务器
--sudo redis-server /etc/redis/redis.conf 指定加载的配置文件
--redis 清屏:ctrl + l
3、基本进入指令 和 配置
--redis-cli -h 10.29.11.235 -p 6379 -a 密码
--配置:redis.windows.conf
--deamonize[守护进程]:windows下不支持,Linux中如果设置为yes,服务器运行日志会输出到一个文件中,文件默认地址为 /var/run/redis.pid
--pidfile:仍然是windows不生效,Linux下表示运行日志后台输出对象
--port 6379 默认为6379端口号
--bind 127.0.0.1 默认为 localhost
--示例1:bind 127.0.0.1 10.1.1.171 专门在后面加允许访问的数据库
--示例2:bind 0.0.0.0 允许所有ip
--logfile "redis.log" 配置日志文件 不同于pidfile,这里才是真正的日志
--databases 16 // 默认redis 16个数据库
--save 900 1
save 300 10
save 60 10000 // 这三个和持久化有关
--dbfilename dump.rdb // 持久化相关,内存数据写到磁盘的时候,默认使用该数据文件
--dir ./
--# slaveof <masterip> <masterport> // 默认是注释掉的,设置主从的配置
--配置参考博客:随用随看
https://blog.csdn.net/ljphilp/article/details/52934933
4、客户端和服务端指令:select
--选择数据库:
--redis默认使用16个数据库,编号0~15,默认第一个
--select:选择数据库 select 10 选择第11个数据库
--至于怎么查看是哪一号数据库:如下所示,非默认数据库自带标号
127.0.0.1:6379> select 0
OK
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]>
5、数据结构
--五种数据结构都是 key value,不同数据结构key不同,
--数据结构:
--字符串string
--最基础使用:
--增:set name itcast // 增加name,值为itcast
--删: del name // 删除name
--改: set name heiticast // 更新name值为 heiticast
--查: get name // 获取键为 name的值
--Sting 过期时间:
--有效期String:setex name_lala nimazhale
--查看键的有效期剩余时间:ttl name_lala // 过期最终值为-2,对于永久有效的ttl值为-1
--获取 键值:get name_lala // 过期的话值为nil
--一次设置多组键值对
--多组设置:mset name01 liming name02 lizhuo name03 liweishu
--多组获取:mget name01 name02 name03
--追加 append:
--set name itcast
--append name lalalalal
--get name
--String:应用场景:
--图形验证码[captcha]的那个 字符串
--token鉴权
--像这种简单的缓存数据
--对 key的操作: 一般操作key的方式具有通用性
--get key // 获取键值为 key的value
--del key // 删除键值为 key的键值对
--keys * 获取所有键
--keys name0* 获取以name0开头的键值
--exists lala 判断 lala的键存不存在,不存在为0,存在为1
--type name 判断 键为name的值的类型
--expire name 100 设置键为name的值的过期时间为100
--哈希hash
--有一个汇总的 key,下面包含各种单独的键值 k-v
--所有和hash有关的命令,都以h开头
--基础使用:
--hset 汇总的keyall key01 value01 key02 value02
--hget 汇总的key key01
--多值设置:
--hmset:hmset person name liming age 25 school wuhandaxue
// hset hmset 既可以新增也可以更改hash值
--hmget:hget person name age school
--hgetall:hgetall person // 当忘记一个汇总key下的独立key值到底有哪些时可以使用该命令
--hkeys:获取汇总key下所有key值 hkeys person
--hvals:获取汇总key下所有value值 hvals person
--hdel:hdel是删除key下的某一个具体的field // hdel person name
--del:del 就是整个hash干掉 // del person
--hash使用场景:
--放在购物车中待支付的商品,超过时间支付失败
--列表list:分为左边插入 和 右边插入
--lpush:从一个一维数组左边插入 lpush list value01 value01 value02
--lrange: 查看列表元素 lrange list 0 -1 // 获取所有元素
lrange list 0 0 // 获取第一个元素
--rpush: 从一个一维数组右边插入 rpush list value04 value05 value06
--lrem: 删除,原则比较特殊
--lrem key count value /
--count > 0: 从头往尾移count个值为value的元素
--count < 0: 从尾往头移除count个值为value的元素
--count = 0: 移除所有值为value的元素
--lset: 设置 lset list01 0 gengxin 设置list01 第一个元素值为 gengxin
lset list01 -1 lala 设置list01 最后一个元素值为 lala
--linsert: linsert list01 before|after lisi value 在lisi之前或者之后插入一个值
--集合set
--⽆序集合 || 元素为string类型 || 元素具有唯⼀性,不重复
--说明:对于集合没有修改操作
--sadd: 设置liming set集合 sadd liming liming lala clclc
--smembers:获取集合liming中成员 smembers liming
--srem: 删除集合元素 srem liming lala
--有序集合zset
--sorted set,有序集合
--元素为string类型
--元素具有唯⼀性,不重复
--每个元素都会关联⼀个double类型的score,表示权重,通过权重将元素从⼩到⼤排序
--说明:没有修改操作
--基础操作:
--zadd:增加zset集合 zadd key score1 member1 score2 member2 ...
// zadd set01 200 liming 300 mingli 190 minlig 10 limign
--zrange:查询zset集合 zrange set01 0 -1 zrange set01 0 0
--zrangebyscore:zrangebyscore key min max // 根据分数查询
// zrangebyscore set01 0 900 查询 0 900 之间的键
--zscore:zscore key member // 返回某一个键的score值
// zscore set01 limign
--zrem:zrem key member1 member2 ... // 删除key中成员
// zrem set01 liming
--zremrangebyscore:zremrangebyscore key min max // 删除权重分数在min max之间的值
// zremrangebyscore set01 0 900