Java 之SpringData Redis快速入门 以及( Redis快速入门安装和使用)

NoSQL 简介

NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。

在现代的计算系统上每天网络上都会产生庞大的数据量。

这些数据有很大一部分是由关系数据库管理系统(RDBMS)来处理。 1970年 E.F.Codd’s提出的关系模型的论文 “A relational model of data for large shared data banks”,这使得数据建模和应用程序编程更加简单。

通过应用实践证明,关系模型是非常适合于客户服务器编程,远远超出预期的利益,今天它是结构化数据存储在网络和商务应用的主导技术。

NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。

常见的NoSql产品

在这里插入图片描述

2、Redis的介绍和安装

(1)介绍

官网:https://redis.io/

速度很慢,几乎进去不去啊。

中文网站:http://www.redis.cn/

有部分翻译的官方文档,英文差的同学的福音

Redis 简介

Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。

Redis 与其他 key - value 缓存产品有以下三个特点:

Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

Redis不仅仅支持简单的key-value类型的数据,

同时还提供list,set,zset,hash等数据结构的存储。

Redis支持数据的备份,即master-slave模式的数据备份。

Redis 优势

性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。

丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及

Ordered Sets 数据类型操作。

原子 – Redis的所有操作都是原子性的,

意思就是要么成功执行要么失败完全不执行。

单个操作是原子性的。多个操作也支持事务,即原子性,

通过MULTI和EXEC指令包起来。

丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

Redis与其他key-value存储有什么不同?

Redis有着更为复杂的数据结构并且提供对他们的原子性操作,

这是一个不同于其他数据库的进化路径。

Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。

Redis运行在内存中但是可以持久化到磁盘,

所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。

在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,

在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。

同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

在这里插入图片描述

(2)安装Redis
1)将Redis上传到虚拟机当中并解压

在这里插入图片描述

将目录路径切换到压缩包放的位置

在这里插入图片描述

tar zxvf redis-4.0.9.tar.gz

切换到解压后的Redis目录当中

在这里插入图片描述

cd redis-4.0.9

执行安装命令

make & make install

在这里插入图片描述

修改配置文件

在这里插入图片描述

vim redis.conf

将这个注释掉(注意有两个这个上面的默认已经注释掉了,下面这个需要手动注释,如果不注释就只能本地访问)

在这里插入图片描述

保护模式设置关闭

在这里插入图片描述

保存退出

开启端口号

iptables -A INPUT -ptcp --dport 6379 -j ACCEPT

service iptables save

2)启动redis

redis-server redis.conf

启动成功

在这里插入图片描述

终止运行

Ctrl+C

使用后台启动

修改配置文件

vim redis.conf

在这里插入图片描述

保存退出

再次启动

redis-server redis.conf

启动成功

在这里插入图片描述

3)链接Redis

redis-cli

链接成功

在这里插入图片描述

输入

ping

返回

在这里插入图片描述

3、设置开机启动

(1)先修改redis的安装目录的名称

停止redis

killall redis-server

修改redis的安装目录名称

mv redis-4.0.9 redis

(2)输入命令,新建文件

vim /etc/init.d/redis

输入下面内容:

#!/bin/sh

chkconfig: 2345 90 10

description: Redis is a persistent key-value database

PATH=/usr/local/bin:/sbin:/usr/bin:/bin

REDISPORT=6379

EXEC=/usr/local/bin/redis-server

REDIS_CLI=/usr/local/bin/redis-cli

PIDFILE=/var/run/redis.pid

CONF=“/usr/local/leyou/redis/redis.conf”

case “$1” in

start)

if [ -f $PIDFILE ]

then

echo “$PIDFILE exists, process is already running or crashed”

else

echo “Starting Redis server…”

$EXEC $CONF

fi

if [ “$?”=“0” ]

then

echo “Redis is running…”

fi

;;

stop)

if [ ! -f $PIDFILE ]

then

echo “$PIDFILE does not exist, process is not running”

else

PID=$(cat $PIDFILE)

echo “Stopping …”

$REDIS_CLI -p $REDISPORT SHUTDOWN

while [ -x ${PIDFILE} ]

do

echo “Waiting for Redis to shutdown …”

sleep 1

done

echo “Redis stopped”

fi

;;

restart|force-reload)

${0} stop

${0} start

;;

*)

echo “Usage: /etc/init.d/redis {start|stop|restart|force-reload}” >&2

exit 1

esac

然后保存退出

注意:以下信息需要根据安装目录进行调整:

EXEC=/usr/local/bin/redis-server # 执行脚本的地址

REDIS_CLI=/usr/local/bin/redis-cli # 客户端执行脚本的地址

PIDFILE=/var/run/redis.pid # 进程id文件地址

CONF=“/usr/local/src/redis-3.0.2/redis.conf” #配置文件地址

(3)设置权限

chmod 755 /etc/init.d/redis

(4)启动测试

/etc/init.d/redis start

启动成功会提示如下信息:

Starting Redis server…

Redis is running…

(5)设置开机自启动

chkconfig --add /etc/init.d/redis

chkconfig redis on

(6)重新启动redis

redis-server redis.conf

在这里插入图片描述

二、Redis指令


1、通过help命令

可以让我们查看到Redis的指令帮助信息∶

在 help后面跟上空格,然后按tab键,会看到Redis对命令分组的组名:

在这里插入图片描述

主要包含:

  • @generic:通用指令

  • @string:字符串类型指令

  • @list:队列结构指令

  • @set: set结构指令

  • @sorted_set:可排序的set结构指令

  • @hash: hash结构指令

其中除了 @generic以为的,对应了Redis中常用的5种数据类型:

  • String:等同于java中的, Map<String,String>

  • list:等同于java中的Map<String,List<String>>

  • set:等同于java中的Map<String,Set<String>>

  • sort_set:可排序的set

  • hash:等同于java中的: Map<String,Map<String,String>>

可见,Redis中存储数据结构都是类似java的map类型。

Redis不同数据类型,只是 'map’的值的类型不同。

2、通用指令

(1)keys

获取符合规则的键名列表。

  • 语法:keys pattern

示例: keys * (查询所有的键)

在这里插入图片描述

在这里插入图片描述

127.0.0.1:6379> set name jack

OK

127.0.0.1:6379> set age 123

OK

127.0.0.1:6379> keys *

  1. “age”

  2. “name”

127.0.0.1:6379>

生产环境当中一定要禁用keys *

(2)exists

判断一个键是否存在,如果存在返回整数1,

  • 语法:EXISTS key

  • 示例:

在这里插入图片描述

127.0.0.1:6379> exists name

(integer) 1

127.0.0.1:6379> exists hhh

(integer) 0

127.0.0.1:6379> exists hhh

(integer) 0

127.0.0.1:6379>

127.0.0.1:6379> exists gae

(integer) 0

127.0.0.1:6379> exists age

(integer) 1

127.0.0.1:6379>

(3)del

DEL:删除key,可以删除—个或多个key

  • 语法:DEL key [key …]

  • 示例:

在这里插入图片描述

127.0.0.1:6379> del name

(integer) 1

127.0.0.1:6379> del hhh

(integer) 0

127.0.0.1:6379> exists name

(integer) 0

(4)select(切换库)

切换到别的库就看不到刚刚 创建的key和value

127.0.0.1:6379> select 2

OK

127.0.0.1:6379[2]> keys *

(empty list or set)

在这里插入图片描述

redis默认有16个库(0-15)默认就是在0号库

(5)expire

语法:

  • EXPIRE key seconds

  • 作用:设置key的过期时间,超过时间后,清除(默认是永远不会清除)

  • 返回值:

    • 如果成功设置过期时间,返回1。
    • 如果key不存在或者不能设置过期时间,返回0
(7)TTL

TTL:查看一个key的过期时间·语法:TTL key

  • 返回值:

  • 返回剩余的过期时间

    • -1二列永不过期
    • -2:已过期或不存在·示例:

在这里插入图片描述

127.0.0.1:6379> set name jack

OK

127.0.0.1:6379> EXPIRE name 10

(integer) 1

127.0.0.1:6379> TTL name

(integer) 6

127.0.0.1:6379> TTL name

(integer) 2

127.0.0.1:6379> TTL name

(integer) 1

127.0.0.1:6379> TTL name

(integer) 0

127.0.0.1:6379> TTL name

(integer) -2

127.0.0.1:6379>

-2代表死亡

(8)persist
  • 语法

persister key

  • 作用

移除给定key的生存时间,将这个key 从带生存时间 key转换成一个不带生存时间、永不过期的key .

3、字符串指令

字符串结构,其实是Redis中最基础的K-V结构其键和值都是字符串。

类似Java的Map<String,String>

字符串类型是Redis中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据。可以存储JSON化的对象、字节数组等。一个字符串类型键允许存储的数据最大容量是512MB。

下表列出了常用的 redis 字符串命令:

| 序号 | 命令及描述 |

| — | — |

| 1 | SET key value

设置指定 key 的值 |

| 2 | GET key

获取指定 key 的值。 |

| 3 | GETRANGE key start end

返回 key 中字符串值的子字符 |

| 4 | GETSET key value

将给定 key 的值设为 value ,并返回 key 的旧值(old value)。 |

| 5 | GETBIT key offset

对 key 所储存的字符串值,获取指定偏移量上的位(bit)。 |

| 6 | MGET key1 [key2…]

获取所有(一个或多个)给定 key 的值。 |

| 7 | SETBIT key offset value

对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。 |

| 8 | SETEX key seconds value

将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。 |

| 9 | SETNX key value

只有在 key 不存在时设置 key 的值。 |

| 10 | SETRANGE key offset value

用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。 |

| 11 | STRLEN key

返回 key 所储存的字符串值的长度。 |

| 12 | MSET key value [key value …]

同时设置一个或多个 key-value 对。 |

| 13 | MSETNX key value [key value …]

同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。 |

| 14 | PSETEX key milliseconds value

这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。 |

| 15 | INCR key

将 key 中储存的数字值增一。 |

| 16 | INCRBY key increment

将 key 所储存的值加上给定的增量值(increment) 。 |

| 17 | INCRBYFLOAT key increment

将 key 所储存的值加上给定的浮点增量值(increment) 。 |

| 18 | DECR key

将 key 中储存的数字值减一。 |

| 19 | DECRBY key decrement

key 所储存的值减去给定的减量值(decrement) 。 |

| 20 | APPEND key value

如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾。 |

基本的存取命令

在这里插入图片描述

自增长

在这里插入图片描述

自减

在这里插入图片描述

批量增

在这里插入图片描述

在这里插入图片描述

批量获取

在这里插入图片描述

4、字符串指令

Redis的Hash结构类似于Java中的Map<String,Map<String,String>>

键是字符串,值是另一个映射。

结构如图:

在这里插入图片描述

这里我们称键为key,字段名为hKey,字段值为hValue

Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。

Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。

127.0.0.1:6379> HMSET runoobkey name “redis tutorial” description “redis basic commands for caching” likes 20 visitors 23000

OK

127.0.0.1:6379> HGETALL runoobkey

  1. “name”

  2. “redis tutorial”

  3. “description”

  4. “redis basic commands for caching”

  5. “likes”

  6. “20”

  7. “visitors”

  8. “23000”

在以上实例中,我们设置了 redis 的一些描述信息(name, description, likes, visitors) 到哈希表的 runoobkey 中。


下表列出了 redis hash 基本的相关命令:

| 序号 | 命令及描述 |

| — | — |

| 1 | HDEL key field1 [field2]

删除一个或多个哈希表字段 |

| 2 | HEXISTS key field

查看哈希表 key 中,指定的字段是否存在。 |

| 3 | HGET key field

获取存储在哈希表中指定字段的值。 |

| 4 | HGETALL key

获取在哈希表中指定 key 的所有字段和值 |

| 5 | HINCRBY key field increment

为哈希表 key 中的指定字段的整数值加上增量 increment 。 |

| 6 | HINCRBYFLOAT key field increment

为哈希表 key 中的指定字段的浮点数值加上增量 increment 。 |

| 7 | HKEYS key

获取所有哈希表中的字段 |

| 8 | HLEN key

获取哈希表中字段的数量 |

| 9 | HMGET key field1 [field2]

获取所有给定字段的值 |

| 10 | HMSET key field1 value1 [field2 value2 ]

同时将多个 field-value (域-值)对设置到哈希表 key 中。 |

| 11 | HSET key field value

将哈希表 key 中的字段 field 的值设为 value 。 |

| 12 | HSETNX key field value

只有在字段 field 不存在时,设置哈希表字段的值。 |

| 13 | HVALS key

获取哈希表中所有值。 |

| 14 | HSCAN key cursor [MATCH pattern] [COUNT count]

迭代哈希表中的键值对。 |

在这里插入图片描述

(1)HSET和HGET以及HGETALL

127.0.0.1:6379> hset user:123 name “Rost”

(integer) 1

127.0.0.1:6379> hset user:123 age 21

(integer) 1

127.0.0.1:6379> hget user:123 name

“Rost”

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值