NoSQL

Not Only SQL


特性:

易扩展

大数据量,高性能

灵活的数据模型

高可用



Redis 

 key-value 数据库

 

 5种类型:

 1字符串类型

 2散列类型

 3列表类型

 4集合类型

 5有序集合类型

 

 就是String list set sortset map

 

 官方数据:50个并发 执行10W 读 的速度11W次/s  写 8.1W次/s

 

 

 

 应用:

缓存 (数据查询 短链接 新闻内容 商品内容)  *****

聊天室的在线好友列表

任务队列(秒杀 抢购 12306)

应用排行榜

网站访问统计

数据过期处理(可以精确到毫秒)

分布式集群架构中session分离

 

 配合json

 

 安装:下载地址:https://github.com/MSOpenTech/redis/releases。


Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我们下载 Redis-x64-xxx.zip压缩包到 C 盘,解压后,将文件夹重新命名为 redis。

打开一个 cmd 窗口 使用cd命令切换目录到 C:\redis 运行 redis-server.exe redis.windows.conf 。

这时候另启一个cmd窗口,原来的不要关闭,不然就无法访问服务端了。


切换到redis目录下运行 redis-cli.exe -h 127.0.0.1 -p 6379 。

这种实在本地运行,

远程连接要将: conf 文件中:

bind 127.0.0.1 

改成 远程地址



设置键值对 set myKey abc


取出键值对 get myKey

会有自动提示

 

 

 

 java 使用 redis

 

redis.clients

jedis

2.7.0

 jedis-2.7.0.jar

 commons-pool2-2.3.jar

 

 

 

 

package com.stevezong.redis.demo;

import redis.clients.jedis.Jedis;

public class T {

@Test

//获得单一的jedis对象操作数据库

public void t9() {

//1、获得连接对象

Jedis jedis = new Jedis("172.29.12.158",6379);

String username = jedis.get("username");

System.out.println(username);

jedis.set("addr","上海");

System.out.println(jedis.get("addr"));

jedis.close();

@Test

//通过jedis的pool获得jedis连接对象

public void t10() {

//创建pool的配置对象

JedisPoolConfig poolConfig = new JedisPoolConfig();

//最大闲置个数

poolConfig.setMaxIdle(30);

//最小闲置个数

poolConfig.setMinIdle(10);

//最大连接数

poolConfig.setMaxTotal(50);

//创建一个pool

JedisPool pool = new JedisPool(poolConfig,"172.29.12.158", 6379);

Jedis jedis = pool.getResource();

System.out.println(jedis.get("addr"));

jedis.close();

pool.close();

}

}

 

 

 

 常用的就是 String  hash

 key的定义:不要太长,不要超过1024个字节 消耗内存 降低查询效率

key不要太短,降低key的可读性

key有统一的命名规范

 

 

 String  是最基础的  他在redis 中是二进制安全的 也就是 存入和获取的一样, value 最大512M

 

 

 set

set key value

 get

get key

返回 (nil) 表示无

 getset

getset key value 

先获取该key的值 然后设定该key的值

 del

del key

返回(nil) 表示无

删除

 incr

incr key

自增1

如果没有这个key 就是0

 decr

decr key

自减1

 

 INCRBY

INCRBY key 自增量

 decrby

decrby key 自减量

 append

append key value

拼接字符串


 

 Hash 类型

 

可以看成 具有String key 和String value的map容器

非常适合存储值对象的信心

如 Username password age  如果hash 中包含很少的字段 那么该类行的数据也将仅仅占用很少的磁盘空间 每一个hash可以存储 4293967295个键值对

 

 

 hset

hset key field value

 hget

hget key field

 hmset

批量 赋值 

hmset key field1 value field2 value

 hgetall

查hash 中的所有

hgetall key

 hdel

删除hash 的一条数据

hdel key field

hdel key field field1

 del

删除整个hash

del key

 hincrby

自增

hincrbu key field 自增量

 hexists 

判断指定的key中的filed 是否存在 存在1 不存在0

hexists key field

 hlen

hash的长度

hlen key

 hkeys 

所有的key

hkeys key

 hvals

所有的value

hvals key


list 类型

是按照出入顺序排序的字符串链表  可以在头 left 和 尾部 right 添加新的元素  如果该key 不存在 将创建一个新的链表  如果链表中所有的元素都被移除 这个key 也会被删除

list 最大的元素数量是4292967295

 lpush

lpush key value value value .....

 rpush

rpush key value value value ...

 lrange 

取  0 是开始 -1最后 -2到第二

lrange key start stop

 lpop

lpop key

 rpop

rpop key

 llen

长度

llen key

 

 lpushx 

存 当key 存在的时候 可以插入 不存在不能插入

lpushx key value

 lrem

删除   count 为0时 从头到尾 删除 value   count大于0 为3时 从头到尾 删除 3个value  value要背删除的数据

lrem key count value

 lset

存 在index位置插入一个value

lset key index value

 linsert

存 在 pivot 的前面或者后面 插入一个value

linsert key BEFORE|AFTER pivot value

 rpoplpush

取加存 从某个key list 的尾部取一个 放入 某个key2 list的头

rpoplpush key key2


set 类型

set 中不能重复元素

 

 

 

 sortedset 类型

 

 

 

 

key的通用操作

keys 

查所有的key

* 任意一个多个

?任意一个

 

del

删除

del key1 key2 key3

exists

是否存在 有1 没有0

exists key

 

rename

重命名

rename oldKey newKey

expire

过期时间 秒

empire key time

ttl 

获取剩余过期时间 没有设置超时-1 已经超时-2

ttl key

 

type

类型

type key

Redis 特性

多数据库

客户端默认使用0号

1个redis 最大可有16个

0-15

使用select

select 1

select 2

移动key 到 0-15的库中

move key 0-15

 

 

 ping

 检测连接是否存活

 

 quit 

 退出

 

 echo

打印后面的内容

 

 dbsize

返回当前数据库中的key的数目

 

 info

获取服务器的信息和统计

 

 flushall

删除所有库的所有key

 

 SAVE 

该命令将在 redis 安装目录中创建dump.rdb文件。


 Bgsave

创建 redis 备份文件也可以使用命令 BGSAVE,该命令在后台执行。

 

订阅与发布


subscribe channel 订阅频道  subscribe mychar 订阅mychar这个频道

publish channel content 发布频道 publish mychar xxx 发布mychar频道内容为xxx

psubscribe channel*:批量订阅 psubscribe dd* 订阅dd开头的频道

 

 

 

redis 事物


multi 开启事物用于标记书屋的开始

exec 提交事物

discard 事物回滚

 

 

 redis 持久化

 两种 RDB AOF

 

 RDB 默认支持 无需配置

 指定的时间间隔将内存中的数据集快照写入磁盘

简单: 数据多 适合使用 但是可能会丢数据.

 AOF

 以日志的形式记录服务器所处理的每一个写操作 在redis 服务器启动之初会读取该文件来重新构建数据库 以保证启动后数据库中的数据是完整的

默认没有开启

 无持久化

 通过配置的方式禁用redis 服务器的持久化功能 redis 加强版的memcached 

 

 可以同时使用RDB和AOF

 

 

 

 redis 配置文件

 save 900 1  900秒内修改1个key  拍快照

 save 300 10 300秒内修改10个 拍快照

 save 60 10000 60秒内修改1W个 拍快照

  但是尽管这样设置,Redis也不是严格 15 分钟保存一次的,可能 7 - 8 分钟就会触发保存

 dbfilename dump.rdb  配置rdb文件的名字

 dir ./  配置 rdb 文件的目录

 

 开启AOF

 appendonly no  改为 yes

 appendfilename "appendonly.aof" 文件名

 存的时机:

 # appendfsync always 总是 每次有数据修改发生都会写入aof文件

 appendfsync everysec 每秒

 # appendfsync no     从不

 

 

数据恢复:

1、flushall 清空数据库

2、shutdown nosave 关闭redis 服务 防止dump.rdb

3、编辑aof文件 将日志中的flushall命令删除并重启服务

 

 

 

 

redis 客户端

redis desktop manager