文章目录
1 什么是NoSql
NoSQL(NoSQL = Not Only SQL )
,意即“不仅仅是SQL”,它泛指非关系型的数据库
关系型数据库:以关系(由行和列组成的二维表)模型为核心数据库. 有表的储存系统RDBMS: mysql
,oracle
,SQLserve
r等
1.1 NoSql分类
2 Redis
2.1 Redis的认识
Redis 是一个高性能的 开源的、C语言写的Nosql(非关系型数据库),数据保存可以存储在内存中或者磁盘中
2.2 Redis特点(优势)
- 数据存储:存放在内存,还支持持久化.-存取速度快,并发能力强,数据安全性高
- 支持value类型
- 支持多个语言客户端
- 还支持集群(支持高并发,海量数据)
- 主要使用它来做缓存
2.3 redis和memcache之间区别–面试题
2.4 redis的使用场景–面试题
- 做缓存
- 计数器应用(注册人数 浏览人数 比如 微博 评论 转发)
- 实时攻防系统
①防止攻击 – 设计 一个人 如果访问10次,就将账户锁定 - 设定有效期的应用(设定一个数据,到一定的时间失效。 自动解锁,购物券)
- 自动去重应用(只需要不断地将数据往 set 中扔就行了,set 意为 集合,所以会自动排重)
- 实现队列 (quene FIFO) – redis 也有结构支持
- 支持订阅发布(比如QQ群消息)
2.5 Redis使用
2.5.1 下载安装
- Redis 的官方下载站是 http://redis.io/download,可以去上面下载最新的安装程序下来
http://redis.cn/
-
启动redis服务(带配置文件启动,和不带配置文件启动)
-
连接到redis进行操作
cmd>{%redis%}/redis-cli -h ip地址 -p 端口号
ip 默认为本地 -p 默认6379
cmd>{%redis%}/redis-cli
2.5.2 redis使用
-
对字符串操作
语法
set key value
get key
-
keys的操作
keys *
获取所有key列表
del key
删除key
expire key xx
设置key的过期时间(xx秒后过期)
ttl key
查看key的过期时间
flushall
清空整个redis服务器数据,所有的数据库全部清空
flushdb
清除当前库,redis中默认有16个数据库,名称分别为0,1,2.。。15
select index
select 0
-
操作list
list集合可以看成是一个左右排列的队列(列表)
lpush key value
将一个或多个值 value 插入到列表 key 的表头(最左边)
rpush key value
将一个或多个值 value 插入到列表 key 的表尾(最右边)
lpop key
移除并返回列表 key 的头(最左边)元素。
rpop key
移除并返回列表 key 的尾(最右边)元素。
lrange key start stop
返回列表 key 中指定区间内的元素,查询所有的stop为-1即可
lrem key count value
lindex key index
返回列表 key 中,下标为 index 的元素
ltrim key start stop
对一个列表进行修剪
存放都是字符串,由redis组织成各种数据结构
list控制同一边进,同一边出就是栈
list控制一边进,另一边出就是队列.
-
操作set
set集合是一个无序的不含重复值的队列
sadd key member
将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略
srem key member
移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略
smembers key
返回集合 key 中的所有成员 -
操作hash
hash类型类似于php的数组
hset key name value
添加一个name=>value键值对到key这个hash类型
hget key name
获取hash类型的name键对应的值
hmset key name1 key1 name2 key2
批量添加name=>value键值对到key这个hash类型
hmget key name1 name2
批量获取hash类型的键对应的值
hkeys
返回哈希表 key 中的所有键
hvals
返回哈希表 key 中的所有值
hgetall
返回哈希表 key 中,所有的键和值 -
设置密码
CONFIG SET
命令可以动态地调整 Redis 服务器的配置而无须重启,重启后失效
CONFIG SET requirepass 123456
将密码设置为123456
CONFIG SET requirepass ""
清除密码
AUTH 123456
输入密码进行认证
3 Java代码操作redis
3.1 导入jar包
3.2 Jedis简单操作
@Test
public void testName()throws Exception{
//链接redis服务端
Jedis jedis = new Jedis("127.0.0.1", 6379, 1000);
//设置密码
jedis.auth("123456");
jedis.set("name", "皮皮虾");
System.out.println(jedis.get("name"));
jedis.close();
}
3.3 连接池配置 and Jedis数据结构操作
/**
* 连接池操作
*/
@Test
public void testRedisPool()throws Exception{
//创建连接池配置对象
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(2);//设置最大空闲连接数
config.setMaxTotal(10);//设置最大总的连接数
config.setMaxWaitMillis(1000*1);//最大的等待时间
//创建连接池对象
JedisPool pool = new JedisPool(config,"127.0.0.1",6379,1000*1,"123456");
//得到jedis对象 就可以操作
System.out.println("------------------String操作-------------------------");
Jedis jedis = pool.getResource();
//新增
jedis.set("test1", "皮皮虾");
System.out.println(jedis.get("test1"));
//修改
jedis.set("test1", "皮皮怪");
//删除
jedis.del("test1");
System.out.println(jedis.keys("*"));
System.out.println("------------------list操作-------------------------");
jedis.lpush("students", "1","2","3","4","5","6");
List<String> student1 = jedis.lrange("students", 0, -1);
for (String s : student1) {
System.out.println(s);
}
System.out.println("------------------Set操作-------------------------");
jedis.sadd("studentsSet", "皮皮虾","皮皮怪","皮皮虫","猪儿虫");
System.out.println(jedis.smembers("studentsSet"));
System.out.println("------------------Hash操作-------------------------");
jedis.hset("studentsHash", "student", "猪猪侠");
System.out.println(jedis.hget("studentsHash", "student"));
jedis.close();
}
3.4 持久化方式
==rdb方式 ==
默认开启该配置 redis.windows.conf配置
save (sec) (key change) 在sec秒之后,如果发现有key改变次数达到配置,就会进行同步
缺点:数据它有丢失 ,它是有时间节点,在这个节点内突然断点,就不能同步到磁盘
aof方式
默认没有开启配置 需要redis.windows.conf里面进行配置
appendonly yes
到时候 如果有写的命令操作,就会把数据同步到 …aof文件里面 如果断电之后,再次启动,加载该文件,执行命令,在数据写到库里面
这两种可以结合使用 推荐使用aof方式