完成学习第二阶段:全盘回顾,脚踏实地跟随学习,做笔记实操。
完成学习第一阶段:快速获取认知。
字符串
get 设置k-v
getset k v :将k中原来的值设置为新的v
incr 递增decr 递减
incrby 直接增加到n decrby 直接增加n
append 在字符串后面追加一个字符
常用命令
字符串列表
lpush左插入 rpush右插入
lrang start end查看 -1是最后一个
lpop 左弹出 rpop右弹出
llen 查看列表元素个数
lpushx rpushx仅在列表存在的时候才进行插入
lrem count v 删除count个v
lset index v 在指定位置插入值
linsert xx after/before n v在 在n的前后位置插入v
rpoplpush a b 将a中的一个数据pop压入b
count > 0 从起始位置开始删除count个v
count < 0 从末尾位置开始删除count个v
count = 0 删除所有的v
常用命令
哈希
hset k 属性 值 设置k-v hmset 设置多个k-v
hget 获取指定属性的值 hmget 获取多个
hgetall 获取所有属性的值
hdel 删除k中某个属性的值 del直接删除一个k
hinrcby 追加数值
hexists 查看查看k中是否存在某个属性
hgetall 获取k中所有的属性和值
hlen获取k的长度
hkeys获取k中素有的属性 hvals获取所有的值
常用命令
字符串集合(set)
sadd xxx n.. 添加元素n…
srem xxx n… 删除元素
smembers xxx 查看set中的元素
sismember xxx n 查看是不是xxx中的元素
sinter a b a和b中的交集
sunion a b a和b中的并集
scard xxx 获取xxx中的数量
srandmember xxx 随机取出一个数
将结果存入到第三个set中
sdiffstore xxx a b 将a和b中差的值fangdaoxxx中
sinterstore xxx a b 将a和b中的交集存到xxx中
sunionstore xxx a b 将a和b的并集存放到xxx中
最大元素数量是4294967295
常用命令
有序字符串集合sorted-set
zadd xxx (v-k)… 添加元素
zscore xxx k 查看某个key的值、
zcard xxx 获取数量
zrem xxx k… 删除指定的k
查看
删除
zincrby xxx num k 给k值增加n
zcount xxx start end 获取star到end的v值的个数
zrange/zrevrange xxx start end (withscores 将所有的v值列出)升序/降序 按照位置
zrangebyscore xxx start end(withscores 将所有的v值列出) (limit star end 限制位置) 按照v值升序
ztemrangebyrank xxx start end 按照位置范围删除
ztemrangebycore xxx start end 按照v大小删除
常用命令
不要太长
不要太短
要有统一的命名规范
获取所有的keys keys*
删除del xxx…
exists xxx 查看某个key是否存在
rename 重命名
expire xxx 设置倒计时(秒)
ttl xxx 查看剩余时间
get 获取
type 获取k的类型
多数据库
事务
move可以将一个key从一个数据库移动到另一个中
通过multi 开启事务
优势
每个数据库是一个文件,容易备份
灾难恢复
性能优化,只负责分配进程
缺点
数据非常大,由于是子进程来处理,服务器可能会暂停运转
并不能保证数据的高可用性,比如每30秒向硬盘中写入一次数据,在第25秒的时候服务器挂了,那么数据就丢失了
优势
可以带来更高的安全性 同步持久化
不会破坏日志中的已存在的数据 是append到日志中
如果日志过大,可以重启redis
格式很清晰的日志文件,可以通过这个日志来完成数据重建
劣势
效率低一些
文件比RDB大一些
redis安装和启动
1、安装gcc
yum install gcc-c++
2、从官网下载redis的tar包,并利用FileZilla从Windows环境上传到Linux环境下
3、解压tar包
tar -zxvf redis-5.0.5.tar.gz
4、切换路径到redis-5.0.5
cd redis-5.0.5/
5、编译
make
6、安装redis到/usr/local/redis目录
make PREFIX=/usr/local/redis install
7、将redis.conf文件从安装包复制到安装目录中
cp redis.conf /usr/local/redis
8、切换到安装目录
cd /usr/local/redis
9、启动redis(前端启动),如果退出此界面(ctrl+c),则redis停止,此方法不推荐
./bin/redis-server
10、修改redis.conf配置文件,将的 daemonize no 改为 daemonize yes。退出保存。
vi redis.conf
11、 使用redis.conf配置启动redis
./bin/redis-server ./redis.conf
12、查看redis是否成功启动
ps -ef | grep -i redis
13、停止redis服务
./bin/redis-cli shutdown
14、或者使用kill关闭redis
kill -9 端口号
15、进入redish环境
./bin/redis-cli
17、如果想要外部环境连接Linux的redis,则需要关闭防火墙
如果是centos7
firewall-cmd --permanent --add-port=6379/tcp
如果是centos6
vi /etc/sysconfig/iptables
iptables下面配置文件加一行
-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379-j ACCEPT
18、如果还是不能外部环境连接Linux的redis,则可以关掉redis的端口绑定
vi redis.conf
注掉下面的bind 127.0.0.1
19、为redis设置密码
vi redis.conf
打开requirepass 的注释
20、可以用密码连接redis,只有这样才有权限查看密码
redis-cli -h 127.0.0.1 -p 6379 -a password
config get requirepass
如果没有用密码连接redis,则提示需要权限
21、用jedis连接redis
package com.imooc.jedis; import org.junit.Test; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; /** * Jedis的测试 * @author longq * */ public class JedisDemo1 { @Test /** * 单实例的测试 */ public void demo1() { // 1.设置IP地址和端口 Jedis jedis = new Jedis("192.168.128.128",6379) ; jedis.auth("password") ; jedis.set("name", "imooc") ; String value = jedis.get("name") ; System.out.println(value); jedis.close(); } @Test /** * 连接池方式连接 */ public void demo2() { //获取连接池的配置对象 JedisPoolConfig config = new JedisPoolConfig() ; //设置最大连接数 config.setMaxTotal(30) ; //设置最大空闲连接数 config.setMaxIdle(10); //获得连接池 JedisPool jedisPool = new JedisPool(config, "192.168.128.128", 6379, 0, "password") ; //获得核心对象 Jedis jedis = null ; try { //通过连接池获得连接 jedis = jedisPool.getResource() ; //设置数据 jedis.set("name","张三") ; //获取数据 String value = jedis.get("name") ; System.out.println(value); }catch(Exception e) { e.printStackTrace(); }finally { if(jedis != null) { jedis.close(); } if(jedisPool != null) { jedisPool.close(); } } } }
重点:学会使用程序操作redis
重点string和hash
wget http://download.redis.io/releases/redis-3.0.0.tar.gz 下载
tar -vxzf redis-3.0.0.tar.gz 解压
cd redis-3.0.0
make 编译
make PREFIX=/usr/local/redis/ install 安装
cp redis.conf /usr/local/redis 复制文件
cd bin
./redis-server 前端启动
vim redis.conf 后端启动 wq保存
daemonize no改为daemonize yes
./bin/redis-server ./redis.conf 启动
ps -ef | grep -i redis 6379端口
./bin/redis-cli shutdown 停止
./bin/redis-cli 客户端
ping 连接测试 pong
set name imooc 保存 name(key)
get name 获得
keys * 获得全部
del name 删除
redis 的五种数据类型
字符串String
哈希hash
字符串列表list
字符串集合set,不可重复,4294个
有序字符串集合sorted set
key的长度,和规范,单线程
String
incr num 将num的值加一如果不存在,先初始化后加一
decr num 递减
incrby num 5 加5
decrby num 6 减3
append num 5 追加字符串
hash
hset myhash username jack hash键值对的形式加数据
hmset myhash username root age 21 多个数据录入
hget myhash username获得
hmget myhash username age获得多个
hgetall myhash 获得所有
hdel myhash2 username age删除
del myhash2删除集合
hincrby myhash age 5加五
hexists myhash username 判断存在否返回 0,1
hlen myhash 长度
hkeys myhash 所有key
hvals myhash 所有value
list
arraylist linkedlist
lpush mylist a b c 左端添加
rpush mylist 1 2 3 右端添加
lrange mylist 0 5 分段查看 0 -2也可以
lpop mylist 弹出左边
rpop mylist 淡出右边
lpushx mylist x 向mylist添加,如果mylist不存在不添加
lrem mylist 2 3 删除两个3, -2 3 从尾部删除2个三,0 2 删除所有的2
lset mylist 0 2指定位置添加
linsert mylist defore b 11指定元素位置前添加
linsert mylist after b 11指定元素位置后添加
rpoplpush mylist mylist2将mylist的元素弹出一个加到mylist2(消息队列)
set(记录ip ,记录某个商品的购买记录,)
sadd myset a b c添加
srem myset a b 删除
smembers myset 查看
sismember myset a 查看是否存在
adiff myset1 myset2 查看差集
sinter myset1 myset2 查看交集
sunion myset1 myset2 查看并集
scard myset 查看长度
srandmenber myset 随机返回一个数
sdiffstore myset1 myset2 myset1 将1和2相差的值加到1
sinterstore myset1 myset2 myset1 将1和2交集的值加到1
sunionstore myset1 myset2 myset1 将1和2并集的值加到1
sorted-set有序,分数排序 游戏积分排名,微博热点,索引数据
zadd mysort 70 zz 80 ls 90 ww 添加
zscore mysort zs 获得分数
zcard mysore 获得数量
zrem mysort tom ww 删除
zrange mysort 0 -1 withsores 查看数据,withsores带不带分数
zrevange mysore 0 -1 withsores 降序
zremrangebyrank mysort 0 4按照范围删除
zremrangebyscore mysort 80 100按照分数范围删除
zrangebyscore mysore 0 100 withsores limit 0 2查看指定范围的数据切带分数和limit
zincrby mysort 3 ls给指定对象分数加3
zcount mysort 80 90 分数段的数量
通用操作
key * 获得所有
key my?查看my匹配的key
del my1 删除
exists my1 判断是否存在
get company 获取
rename company newcompany 重命名
expire newpany 1000 过期时间1000秒
ttl newcompany查看过期时间
type mylist查看类型
特性
多数据库,最多16个数据库
select 1(0到15)连接1号数据库
move myset 1移动myset到1号数据库
事务
multi exec discard
multi开启
exec提交
discard回滚
持久化
RDB:指定时间间隔,将内存数据写入硬盘
AOF:日志记录所有的操作
无持久化:缓存
总结一下:
NoSQL(非关系型数据库):
redis:key/value键值对存储数据库
mongodb:文档型数据库
hbase:列式数据库
neo4j:图式数据库,存储的是图关系而非行或列。主要用于社交网络的存储。
redis数据结构: String Hash Set SortedSet List
redis事务:multi exec discard
redis 持久化: rdb内存快照 aof命令日志