Redis知识要点
一、Redis简介
1.关于关系型数据库和nosql(非关系型)数据库
关系型数据库是基于关系表的数据库,最终会将数据持久化到磁盘上,而nosql数据 库是基于特殊的结构,并将数据存储到内存的数据库。
从性能上而言,nosql数据库 要优于关系型数据库,从安全性上而言关系型数据库要优于nosql数据库,
所以在实 际开发中一个项目中nosql和关系型数据库会一起使用,达到性能和安全性的双保证。
2.关系型数据库与nosql数据库的优缺点比较
3.在Linux下安装Redis
下载Redis安装包链接:https://redis.io/download
安装过程根据自己的Linux版本系统来,不一样的系统可能有些指令不一样
大致步骤:由于Redis是C语言开发的,所以需要在Linux下安装C、C++环境
我的Linux命令为: yum -y install gcc-c++
然后将上面的压缩包通过ScureCRT进行上传,上传成功后将其进行解压
Linux指令:tar -zxvf redis-3.0.0.tar.gz
进入解压文件夹:cd redis-3.0.0
执行 make MALLOC=libc
安装成功后,执行 make PREFIX=/usr/local/redis install
安装完后,在/usr/local/redis/bin下有几个可执行文件
4.启动Redis
1、前端启动:(了解)-无法部署集群
这时会进入另一个命令窗口,执行图中操作,表明连接本地成功
启动redis,客户端连接: 连接6379端口
点击Crtl+C,结束该连接,敲入图中命令,表明连接成功
运行客户端(默认连接本机6379端口):./bin/redis-cli,如以后要连接外网则为:redis-cli -h ip地址 -p 端口
2、后端启动
Redis启动-后端模式
修改redis.conf配置文件, daemonize yes 以后端模式启动。
然后按住Crtl+C,结束编辑,敲 :wq 进行保存,启动时,指定配置文件
4.关闭Redis
① 查询到PID,kill -9 pid 【断电,非正常关闭,一般不用,否则造成数据丢失】
② 正常关闭 【正常关闭,数据保存】
5.Redis数据类型(重点)
redis 使用的是键值对 保存数据。(map)
key:全部都是字符串 value:有五种数据类型
注:Key名:自定义,key名不要过长,否则影响使用效率,不过实际情况差不多,Key名不要太短,最好是有意义。
6.Redis命令--String命令(重点)
字符串类型是Redis中最为基础、常用的数据存储类型,字符串在Redis中是二进制安全的,这便意味着该类型存入和获取的数据相同。
在Redis中字符串类型的Value最多可以容纳的数据长度是512M。
二进制安全和数据安全是没有关系的。
MySQL-关系型数据库,二进制不安全。【乱码丢失数据】
赋值:(增,改)
set key value:设定key持有指定的字符串value,如果该key存在则进行覆盖操作。总是返回”OK”
如果赋予相同的key,新的value会覆盖老的value
取值:(查)
get key:获取key的value。如果与该key关联的value不是String类型,redis将返回错误信息,
因为get命令只能用于获取String value;如果该key不存在,返回(nil)。
删除:(删)
del key :删除指定key 返回值是数字类型,表示删了几条数据
扩展:
getset key value:先获取该key的值,然后在设置该key的值。
incr key:将指定的key的value原子性的递增1.如果该key不存在,其初始值为0,在incr之后其值为1。
如果value的值不能转成整型,如hello,该操作将执行失败并返回相应的错误信息。 相当于 ++i
decr key:将指定的key的value原子性的递减1.如果该key不存在,其初始值为0,在incr之后其值为-1。
如果value的值不能转成整型,如hello,该操作将执行失败并返回相应的错误信息。 相当于 --i
Incr和decr 只能对字符串是数字的 进行操作。
append key value:拼凑字符串。如果该key存在,则在原有的value后追加该值;如果该key不存在,则重新创建一个key/value。
String使用环境:主要用于保存json格式的字符串
7.Redis命令--hash命令(了解)
Redis中的Hash类型可以看成具有String Key和String Value的map容器。所以该类型非常适合于存储值对象的信息。
如Username、Password和Age等。如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。
每一个Hash可以存储4294967295个键值对。
Hash ----à {username:”张三”,age:”18”,sex:”man”}------javaBean
Hash特点:占用的磁盘空间极少
赋值:(增,改)
hset key field value:为指定的key设定field/value对(键值对)。
hmset key field value [field2 value2 …]:设置key中的多个filed/value
取值:(查)
hmget key filed1 filed2 ….:获取key中的多个filed的值
hgetall key:获取key中的所有filed-vaule
删除:(删)
hdel key field1 field2....:删除key中的多个filed的值
del key :删除整个hash
一些简单命令:hexists、hlen、hkeys、hvals
查询所有的key:key *
8.Jedis(Java操作Redis数据库技术)(重点)
该技术相当于JDBC的功能,有一个Jedis连接池,还有Redis有什么命令,Jedis就有什么方法。
防火墙设置:想从Linux系统获取Redis的操作需要将其防火墙端口打开,否则会显示超时
要使用该技术,需要在Eclipse下面导入相应的jar包
开放6379端口
/sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT
保存配置
/etc/rc.d/init.d/iptables save
注:有些Linux该目录下没有iptables文件,可以去Linux系统里面直接开启6379端口
开启之后,在Eclipse下面执行下面代码,就可以表示连接成功
Jedis连接池
抽取连接池工具:JedisUtils
9.Redis常用命令(重点)
1、redis-LinkedList【重点】
Java List : 数组ArrayList 链表LinkedList
为什么redis选取了链表?
Redis操作中,最多的操作是进行元素的增删
2、list常用命令:
① 两端添加(增)
头部添加---》lpush key values[value1 value2…]:在指定的key所关联的list的头部插入所有的values,
如果该key不存在,该命令在插入的之前创建一个与该key关联的空链表,之后再向该链表的头部插入数据。插入成功,返回元素的个数。
尾部添加---》rpush key values[value1、value2…]:在该list的尾部添加元素。
② 两端删除(删)
lpop key:返回并弹出指定的key关联的链表中的第一个元素,即头部元素。如果该key不存在,返回nil;
若key存在,则返回链表的头部元素。
rpop key:从尾部弹出元素。
③ 查询元素(查)
lrange key start end:获取链表中从start到end的元素的值,start、end从0开始计数;也可为负数,
若为-1则表示链表尾部的元素,-2则表示倒数第二个,依次类推…
④ 一些其他命令
1、获取链表中元素的个数:llen key
2、lpushx key value:仅当参数中指定的key存在时,向关联的list的头部插入value,如果不存在,将不进行插入
3、rpushx key value:在该list的尾部添加元素
4、删除某种元素---》lrem key count value(一般不用,效率低):删除count个值为value的元素,
如果count大于0,从头向尾遍历并删除count个值为value的元素;
如果count小于0,则从从尾向头遍历并删除;如果count等于0,则删除表中所有等于value的元素。
5、设置某个元素的值---》lset key index value(一般不用,效率不高):设置链表中index的脚标的元素值,
0代表链表的头元素,-1代表链表的尾元素。操作链表的脚标不存在则抛出异常。
6、插入某个元素的值---》linsert key before/after pivot value:在pivot元素前或者后插入value这个元素。
7、rpoplpush resource destination:将链表中的尾部元素弹出并添加到头部。[循环操作]