Redis复习
1.NoSQL数据库简介
作用:
解决IO压力
缓存数据库:减少io的读操作
- NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库。
- NoSQL 不依赖业务逻辑方式存储,而以简单的key-value模式存储。因此大大的增加了数据库的扩展能力。
- 不遵循SQL标准
- 不支持ACID
- 远超于SQL的性能
NoSQL适用场景
•对数据高并发的读写
•海量数据的读写
•对数据高可扩展性的
NoSQL不适用场景
•需要事务支持
•基于sql的结构化查询存储,处理复杂的关系,需要即席查询。
用不着sql的和用了sql也不行的情况,请考虑用NoSql
ØRedis
•几乎覆盖了Memcached的绝大部分功能
•数据都在内存中,支持持久化,主要用作备份恢复
•除了支持简单的key-value模式,还支持多种数据结构的存储,比如 list、set、hash、zset等。
•一般是作为缓存数据库辅助持久化的数据库
2.Redis简介安装
2.1下载地址
Redis官方网站:http://Redis.io
Redis中文官方网站:http://www.Redis.net.cn/
关于笔者此次安装版本:3.2.5 for Linux
不用考虑在windows环境下对Redis的支持

2.2安装步骤
下载获得redis-3.2.5.tar.gz后将它放入我们的Linux目录/opt
解压命令:tar -zxvf redis-3.2.5.tar.gz
解压完成后进入目录:cd redis-3.2.5
在redis-3.2.5目录下执行make命令
未安装gcc就安装一下:
yum -y install gcc
yum -y install gcc-c++安装完成后使用如下命令查看版本
gcc -v
g++ -v在redis-3.2.5目录下再次执行make命令
报错:Jemalloc/jemalloc.h:没有那个文件
解决方案:运行make distclean之后再 make
在redis-3.2.5目录下再次执行make命令
Redis Test(可以不用执行)
执行完make后,跳过Redis test 继续执行make install
查看默认安装目录:usr/local/bin
3.启动
备份redis.conf:拷贝一份redis.conf到其他目录
在/root下创建文件夹
mkdir myredis
cp /opt/redis-3.2.5/redis.conf /root/myredis/修改redis.conf文件将里面的daemonize no 改成 yes(128行),让服务
在后台启动
vim redis.conf
启动命令:执行
redis-server /root/myredis/redis.conf
注意: 不加绝对路径的话还是用的默认配置文件或当前目录下的redis.conf
查看状态:
ps -ef | grep redis
用客户端访问: Redis-cli
个端口可以 Redis-cli –p 6379
redis-cli -p 6379
测试验证: ping
keys * 查询当前库的所有键
单实例关闭:Redis-cli shutdown
也可以进入终端后再关闭
多实例关闭,指定端口关闭:Redis-cli -p 6379 shutdown
相关知识:
默认16个数据库,类似数组下标从0开始,初始默认使用0号库
使用命令 select <dbid> 来切换数据库。如: select 8
统一密码管理,所有库都是同样密码,要么都OK要么一个也连接不上
3.Redis五大数据类型

相关命令
参考链接:
https://www.redis.net.cn/tutorial/3506.html
https://blog.csdn.net/Huang_ZX_259/article/details/122718413
key
keys * ·查询当前库的所有键
exists s <key> ·判断某个键是否存在
type <key> ·查看键对应的值的类型
del <key> ·删除某个键
expire <key> <seconds 为键值设置过期时间,单位秒。
ttl <key> 查看还有多少秒过期,-1表示永不过期,
-2表示已过期
dbsize ·查看当前数据库的key的数量
Flushdb ·清空当前库
Flushall ·通杀全部库
String
- String是Redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value
- String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
- String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512M
原子性
Redis单命令的原子性主要得益于Redis的单线程
List
Ø单键多值
ØRedis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。
Ø它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。
Set
Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动去重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。
Redis的Set是string类型的无序集合。它底层其实是一个value为null的hash表,所以添加,删除,查找的复杂度都是O(1)。
Hash
ØRedis hash 是一个键值对集合。
ØRedis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
Ø类似Java里面的Map<String,String>
zset (sorted set)
Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的每个成员都关联了一个评分(score) ,这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了 。
因为元素是有序的, 所以你也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的智能列表。
4.Redis相关配置
学习链接:https://www.redis.net.cn/tutorial/3504.html
这里仅介绍几个关键的:
大小写不敏感
include:类似jsp中的include,多实例的情况可以把公用的配置文件提取出来
ip地址的绑定(bind)
默认情况bind=127.0.0.1只能接受本机的访问请求
不写的情况下,无限制接受任何ip地址的访问
生产环境肯定要写你应用服务器的地址
如果开启了protected-mode,那么在没有设定bind ip且没有 设密码的情况下,Redis只允许接受本机的相应
daemonize :是否为后台进程
5.Redis的java客户端Jedis
Jedis所需要的jar包
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>用windows中的Idea连接虚拟机的Redis的注意事项
禁用Linux的防火墙:Linux(CentOS7)里执行命令
systemctl stop firewalld.service
/root/myredis/redis.conf中注释掉bind 127.0.0.1(61行) ,然后 protect-mode no(80行)。
Jedis测试连通性
|

6.通过Jedis操作Redis
初始keys *
注:此处第二个原因是redis template
向redis存放使用java对象序列化的值,序列化方式和string的一般方式不同。
笔者懒得动了,仅给出参考解决链接:
https://blog.csdn.net/qq_16159433/article/details/121491555

package com.atguigu.redis; |
执行后keys *

