1. Redis
1.1 nosql介绍
nosql是一类新出现的数据库(not only sql),非关系型数据库,它的特点:
l 不支持SQL语法;
l 存储结构跟传统关系型数据库中的那种关系表完全不同,nosql中存储的数据都是KV形式;
l NoSQL的世界中没用一种通用的语言,每种nosql数据库都有自己的api和语法,以及擅长的业务场景;
l NoSQL中的产品种类相当多:Mongodb, Redis, Hbase Hadoop, Cassandra Hadoop
1.2 NoSQL和SQL数据库的比较:
l 适用场景不同:sql数据库适合用于关系特别复杂的数据查询场景,nosql反之;
l “事务”特性的支持:sql对事务的支持非常完善,而nosql基本不支持事务;
l 两者在不断地取长补短,呈现融合趋势
1.3 Redis简介
Redis是一个内存型(也支持数据的持久化)的key-value类型数据库。经常用来做缓存。
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis是 NoSQL技术阵营中的一员,它通过多种键值数据类型来适应不同场景下的存储需求。
1.4 Redis特性
Redis 与其他 key - value 缓存产品有以下三个特点:
l Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
l Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
l Redis支持数据的备份,即master-slave模式的数据备份。
性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
用来做缓存(ehcache/memcached)——redis的所有数据是放在内存中的(内存数据库)。
1.5 配置
Redis的配置信息在/etc/redis/redis.conf下,查看:
sudo vi/etc/redis/redis.conf
核心配置选项:
l 绑定ip:如果需要远程访问,可将此⾏注释,或绑定⼀个真实ip;bind 127.0.0.1
l 端⼝,默认为6379;port 6379
· 是否以守护进程运⾏:如果以守护进程运⾏,则不会在命令⾏阻塞,类似于服务;如果以⾮守护进程运⾏,则当前终端被阻塞;设置为yes表示守护进程,设置为no表示⾮守护进程;推荐设置为yes;daemonize yes
l 数据⽂件;dbfilename dump.rdb
l 数据⽂件存储路径;dir /var/lib/redis
l ⽇志⽂件;logfile/var/log/redis/redis-server.log
l 数据库,默认有16个;database 16
l 主从复制,类似于双机备份。Slaveof
2. 了解Redis服务器端和客户端的命令
2.1 服务器端
l 服务器端的命令为redis-server
l 可以使⽤help查看帮助⽂档;redis-server –help
l 推荐使⽤服务的⽅式管理redis服务
l 启动;sudo service redis start
l 停⽌;sudo service redis stop
l 重启 sudo service redis restart
l 个人习惯
l ps -ef|grep redis 查看redis服务器进程
sudo kill -9 pid 杀死redis服务器
sudo redis-server /etc/redis/redis.conf 指定加载的配置文件
2.2 客户端
l 客户端的命令为redis-cli
l 可以使⽤help查看帮助⽂档;redis-cli --help
l 连接redis;redis-cli
运⾏测试命令;ping
l 切换数据库;数据库没有名称,默认有16个,通过0-15来标识,连接redis默认选择第一个数据库;select n
redis数据库: |
==============
需要记的一些东西:
==================
1. redis数据库是一个非关系型的数据库
2. redis的数据是存储在内存中的
3. redis可以将数据从内存中读取出来并保存到文件, 之后需要的时候再读入内存中, 实现数据的持久化
4. 经常用来做缓存
5. redis的数据类型有五种: string, hash, list, set, zset
6. 具体命令可百度搜索 redis命令参考
服务器启动和数据库连接:
========================
·启动redis服务器:
1. 检查服务器是否已经启动-------->>-: ps aux | grep redis
2. 启动服务器-------------------->>-: sudo redis-server /etc/redis/redis.conf #格式: sudu + redis-server +配置文件路径
·停止redis服务器:
· 停止redis服务器---------------->>-: sudo kill -9 进程id #进程id可通过检查服务器是否启动功能查看
·连接redis服务器:
1. 连接redis服务器---------------->>-: redis-cli -h 服务器ip地址 -p 服务器端口号 #默认ip(127.0.0.1) 默认端口号(6379)
2. 测试连接是否成功--------------->>-: 终端输入ping 如果得到返回值PONG, 就是已经连接成功
·数据库切换:
·redis数据库默认有16个, 没有名字, 通过0-15来标识
· 切换数据库---------------------->>-: select 数字
数据类型操作:
==============
· string类型: string类型是字符串类型, 同时可以以二进制的方式保存图片或者json对象描述信息, 最大可容纳512M内存数据
--------------
查:
· 获取键对应的值----------------->>-: get key
· 获取多个键对应的值------------->>-: mget key1 key2 key3 ......
· 查看所有键--------------------->>-: keys *
· 判断键是否存在----------------->>-: exists key # 存在返回1, 不存在返回0
· 查看键对应值的类型------------->>-: type key
· 查看键的剩余有效时间----------->>-: ttl key # 返回-1代表永不过期, 返回-2代表已过期
增:
· 设置一个键值------------------->>-: set key value # 如果键不存在,会创建.如果键存在,会更新
· 设置带有过期时间的键值--------->>-: setex key seconds value # seconds--秒 , 到时间后会被自动删除
· 设置多个键值------------------->>-: mset key1 value1 key2 value2 ......
· 给键的值追加数据--------------->>-: append key value # value是要追加的字符串内容, 其实就是字符串拼接
删:
· 删除指定键和值----------------->>-: del key1 key2 ......
改:
· 修改key的有效时间-------------->>-: expire key seconds # seconds--秒
· hash类型: #hash的value存的是属性和属性的值
------------
增:
· 设置单个属性-------------------->>-: hset key field value # field代表属性 value代表属性的值
# 使用hset命令有可能报错, 如果报错执行命令 config set stop-writes-on-bgsave-error no 即可
· 设置多个属性-------------------->>-: hmset key field1 value1 field2 value2 ......
查:
· 获取key的一个属性的值----------->>-: hget key field
· 获取key中多个属性的值----------->>-: hmget key field1 field2 ......
· 获取key的所有属性--------------->>-: hkeys key
· 获取key的所有属性的值----------->>-: hvals key
删:
· 删除key的某些属性--------------->>-: hdel key field1 field2 ......
· list类型: # 列表的元素只能是string, 而且是按照插入顺序排序
------------
增:
· 创建一个列表-------------------->>-: rpush key value1 value2 ......
· 在列表左侧插入数据-------------->>-: lpush key value1 value2 ...... #顺序是先把1加入到列表左侧, 再把2加入到1的左侧
· 在列表右侧插入数据-------------->>-: rpush key value1 value2 ...... #顺序是先把1加入到列表右侧, 再把2加入到1的右侧
· 在指定元素的前面加数据---------->>-: linsert key before 指定元素 新加元素
· 在指定元素的后面加数据---------->>-: linsert key after 指定元素 新加元素
查:
· 指定索引范围查询---------------->>-: lrange key 起始索引 终止索引
· 查询列表中所有元素-------------->>-: lrange key 0 -1
改:
· 更改指定索引位置的元素值-------->>-: lset key 索引 value
删:
· 清空列表------------------------>>-: ltrim key 1 0
· 删除所有的指定元素-------------->>-: lrem key 0 value
· 从右往左删除count个value-------->>-: lrem key -count value
· 从左往右删除count个value-------->>-: lrem key count value
· set类型: 无序集合, 元素为string类型, 元素是唯一的不能有重复, 不能进行修改操作
-----------
增:
· 增加元素------------------------>>-: sadd key member1 member2 ......
查:
· 查所有元素---------------------->>-: smembers key
删:
· 删除指定元素-------------------->>-: srem key member1 member2 ......
· zset类型:
------------
增:
· 增加元素------------------------>>-: zadd key score1 member1 score2 member2 ......
#score是权重, 由数字构成, 一一对应后面的member, 权重越小, 对应的member的位置越靠前
查:
· 指定索引范围查询---------------->>-: zrange key start stop
· 查所有元素---------------------->>-: zrange key 0 -1
· 查权重a到权重b之间的元素-------->>-: zrangebyscore key 权重a的索引 权重b的索引
· 查指定元素的权重值-------------->>-: zscore key member
删:
· 删除指定元素-------------------->>-: zrem key member1 member2 ......
· 删除权重a到权重b之间的元素------>>-: zremrangebyscore key 权重a的索引 权重b的索引