0
点赞
收藏
分享

微信扫一扫

Redis - 基础篇


Redis - 基础篇_NoSQLRedis - 基础篇_Redis_02Redis - 基础篇_Redis_03Redis - 基础篇_事务_04Redis - 基础篇_Jedis_05Redis - 基础篇_RDB_06Redis - 基础篇_NoSQL_07Redis - 基础篇_Redis_08


一、Redis 的安装

Linux 系统的操作:

1、解压源码;

2、编译(需要预安装gcc:yum install gcc--c++) make;

3、安装 make PREFIX=/usr/local/redis install;

4、从源文件夹复制redis.conf到安装路径redis;

5、运行 ./redis-server;

6、不推荐前端运行,可修改配置中daemonize为后端运行(daemonize no改为 yes)(./redis-server redis.conf);

7、查看是否运行 ps -ef | grep -i redis;

8、关闭服务端 kill -9 进程(不建议使用);./redis-cli shutdown;

9、使用命令:(get) (set) (keys *) (del)


二、 Jedis 的入门

Redis - 基础篇_NoSQL_09

// 单例操作
@Test
public void demo1(){
Jedis jedis = new Jedis("127.0.0.1",6379);
jedis.set("name", "test");
String name = jedis.get("name");
System.err.println(name);
jedis.close();

}

// 连接池操作
@Test
public void demo2(){
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(30);
config.setMaxIdle(10);
JedisPool jedisPool = new JedisPool(config,"127.0.0.1",6379);
Jedis jedis = null;
try{
jedis = jedisPool.getResource();
jedis.set("name", "test");
String value = jedis.get("name");
System.out.println(value);
}catch(Exception e){
e.printStackTrace();
}finally{
if(jedis != null){
jedis.close();
}
if(jedisPool != null){
jedisPool.destroy();
}
}
}

Ps:连接中的问题:linus防火墙对连接的影响以及对于属性修改

1) 打开linux防火墙6379端口:vim etc/sysconfig/iptables(复制yy,粘贴t,复制已开端口22那行)

2) 重启防火墙:service iptables restart


三、Redis 的数据结构

Redis - 基础篇_RDB_10Redis - 基础篇_Jedis_11Redis - 基础篇_RDB_12Redis - 基础篇_RDB_13

Redis的数据结构之字符串String常用命令:


set company imooc:设置值

get company :取值

getset company :先获取值在设置值

del company 删除值

incr company 对数字加一

decr company 对数字减一 如果没有设置默认为0,如果是字符串,默认报错

incrby company x,增加x

decrby company x,减去x

append 以字符串的形式相加而不是数字形式相加



Redis - 基础篇_事务_14Redis - 基础篇_Jedis_15

Redis的数据结构之存储Hash常用命令:


设置值:hset hash key1 val1

设置多个值:hmset hash key1 val1 key2 val2 = hset hash key1 val1 key2 val2

获取单个key值:hget hash key

获取多个key值:hmget hash key1 key2

删除单个key值:hdel hash key1

删除所有:del hash

判断某个属性是否存在:hexists hash key1

获取所有key和value: hgetall hash

获得属性数量:hlen hash

获取所有key: hkeys hash

获取所有val: hvals hash

指定某个属性增加某个数量: hincrby hash age number



Redis - 基础篇_Jedis_16 Redis - 基础篇_Redis_17

Redis - 基础篇_事务_18

Redis的数据结构之存储list常用命令:


两端添加

lpush listname value1 value2 value3:如果listname不存在则创建listname并从左侧添加,先添加的元素靠后,下标从0开始。如果listname存在则直接从左侧添加

rpush listname value1 value2 value3:从右侧添加,先添加的元素靠前,下标从0开始

查看列表

lrange listname start end:左边查看指定范围内的listname的元素,下标从0开始,如果end为-1代表是最后一个元素

两端弹出

lpop listname:左边弹出listname中的第一个元素。如果listname不存在元素则返回nil,一旦做了弹出操作,被弹出的元素将在listname中消失

rpop listname:尾部(右部)弹出,与lpop同理

获取列表元素个数

llen listname:获取listname中元素的个数,如果listname不存在则返回0

扩展命令

lpushx listname value1 value2...:如果listname存在则进行添加操作,如果listname不存在则添加失败返回0

rpushx listname value1 value2...:与lpushx同理

lrem listname count value:如果count大于0,则从左往右删除count个value;如果count小于0,则从右向左删除count个value;如果count等于0则表示删除所有的value

lset listname index value:将listname中下标为index的值修改为value

linsert listname before listvalue value:在listname中的listvalue前插入一个value

linsert listname after listvalue value:在listname中的listvalue之后插入一个value

rpoplpush listname1 listname2:将listname1中右边的第一个元素进行弹出然后向listname2的左侧进行添加弹出的元素



Redis - 基础篇_NoSQL_19Ps:Set无序。 Redis - 基础篇_事务_20

Redis - 基础篇_NoSQL_21

Redis的数据结构之set常用命令:


像set中增加元素 sadd myset 1 2 3 不允许重复

srem myset 1 2 删除数据

smember Myset 所有的值

sismember myset a 0不存在 1存在

差集运算 sdiff myset1 myset2

交集运算 sinter mya2 myb2

并集运算 sunion mya2 myb2 去掉重复元素

获得set中值的数量 scard myset

随机返回一个成员 srandmember myset

sdiffstore myset1 myset3 myset4 将3 4 的差集存到1里

sinterstore m2 m3 m4 交集存m2

suionstore my3 ma3 mb3 并集存到my3



Redis - 基础篇_Redis_22 Redis - 基础篇_RDB_23 Redis - 基础篇_NoSQL_24

Redis的数据结构之Sorted-Set常用命令:


添加元素

zadd sortname score1 value1 score2 value2...:向sortname中添加元素value及元素的分数score,如果value存在,但是value对应的score不一样则进行替换

获得元素

zscore sortname value:返回sortname中value对应的score

zcard sortname:返回sortname中的value个数

删除元素

zrem sortname value1 value2:删除sortname中对应value的元素及分数

zremrangebyrank sortname start end:删除下标在start至end范围内的元素value及value对应的score

zremrangebyscore sortname start end:删除score在start至end范围内的元素value及value对应的score

范围查询

zrange sortname start end:返回sortname中下标在start至end范围内的value,返回value的顺序以value的score进行升序排序

zrange sortname start end withscore:返回sortname中下标在start至end范围内的value及value对应的分数,以value对应的score进行升序排序

zrevrange sortname start end withscores:返回sortname中下标在start至end范围内的value及value对应的score,以value的score进行降序排序

扩展命令

zrangebyscore setname start end withscores:返回成绩在start至end之间的value及value对应的成绩

zrangebyscore setname start end withscores limit num1 num2:返回setname中score在start至end之间的num2-num1个的value及value的score

zincyby setname value setkey:对setname的setkey的score加上value

zcount setname start end:返回setname中score在start至end之间的个数



四、Redis的Keys的通用操作


keys *:查询所有key

keys str? :查询以字符串str开头的key

del key1 key2 key3 ... :删除多个key

exists key:判断key是否存在,存在返回1不存在返回0

rename key newkey :对key进行重命名

expire  key times(秒) :设置过期的时间

ttl key:查看key所剩的时间,若没有设置,则返回-1

type key :获取指定key的类型



五、Redis 特性

Redis - 基础篇_RDB_25

1、多数据库

一个redis实例可以包含多个数据库,最多可以提供16个数据库,下标是从0到15,通过select number 切换数据库

move set number : 把名称为set的集合移动到数据库number中

2、Redis 事务

multi : 开启开务

exec : 提交事务

discard : 回滚事务


六、Redis 持久化

Redis - 基础篇_Jedis_26 Redis - 基础篇_Jedis_27

  1. RDB持久化(默认支持,不需配置):在指定的时间间隔n内,将数据写入到磁盘中。
  2. AOF持久化机制:以日志的形式记录 服务器中所有redis操作。redis启动后,会读取日志文件,重新构建redis数据库,保证数据的完整。
  3. 无持久化。
  4. 同时使用RDB和AOF。


RDB

优势:

1.数据库只包含一个文件,通过文件备份策略,定期配置,恢复系统灾难

2.压缩文件转移到其他介质上

3.性能最大化,redis开始持久化时,分叉出进程,由子进程完成持久化的工作

,避免服务器进程执行I/O操作,启动效率高


劣势:

1.无法高可用:系统一定在定时持久化之前宕机,数据还没写入,数据已经丢失

2.通过fock分叉子进程完成工作,数据集大的时候,服务器需要停止几百毫秒甚至1秒


配置:

cd /usr/local/redis

vim redis.conf


默认:

save 900 1 #每900秒至少1个key变化,持久化一次,到内存一个快照

save 300 10 #每300秒至少10个key变化,往硬盘写一次

save 60 10000 #每60秒至少10000个key变化,写一次

dbfilename dump.rdb #数据的文件名

dir ./ #保存的路径,redis路径下



AOF

优势:

1.同步:

a.每秒同步:异步完成,效率高,一旦系统宕机,修改的数据丢失

b.每修改同步:同步持久化,每分钟发生的变化记录到磁盘中,效率低,安全

c.不同步

2.日志写入操作追加模式append

a.系统宕机,不影响存在的内容

b.写入一半数据,若系统崩溃,下次启动redis,redis-check-aof工具解决数据一致性

3.如果日志过大,自动重写机制,修改的数据写入到到磁盘文件,创建新文件,记录产生的修改命令,重写切换时,保证数据安全

4.格式清晰的日志文件,完成数据的重建


劣势:

1.对于相同数据文件,相比RDB,AOF文件较大

2.效率低


配置:

vim  redis.conf


默认:

appendonly no #AOF方式默认关闭 

appendfilename appendonly.aof #配置文件

#appendfsync always #每修改一次,同步到磁盘上

appendsync everysec 每秒同步到磁盘一次

#appensync no 不同步


实践打开AOF:

appendonly yes

appendfsync always


终端2:先断开redis

./bin/redis-cli

shutdown

启动redis:

./bin/redis-server ./redis.conf


终端1:set name 100

终端2:产生appendonly.aof文件

终端1:flushall 清空数据库

终端2:

./bin/redis-cli shutdown

vim appendonly.aof

删除flushall

./bin/redis-server ./redis.conf

./bin/redis-cli

keys *

数据还原



举报

相关推荐

0 条评论