欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java后端--25--内存数据库Redis讲解

程序员文章站 2022-03-27 17:13:32
一、Redis简介redis是Nosql数据库中使用较为广泛的非关系型内存数据库,redis内部是一个key-value存储系统。它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(有序集合)和hash(哈希类型,类似于Java中的map)。Redis基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为数据结构存储服务务器。二、Redis的特性多种数据类型存储:1、字符串类型2、散列类型3、列表类型...

一、Redis简介

redis是Nosql数据库中使用较为广泛的非关系型内存数据库,redis内部是一个key-value存储系统。它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(有序集合)和hash(哈希类型,类似于Java中的map)。Redis基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为数据结构存储服务务器。

二、Redis的特性

多种数据类型存储:

1、字符串类型
2、散列类型
3、列表类型
4、集合类型
5、有序集合类型

内存存储与持久化:

1、内存的读写速度远快于硬盘
2、自身提供了持久化功能(RDB、AOF两种方式)

功能丰富:

1、可用作缓存、队列、消息订阅/发布
2、支持键的生存时间
3、按照一定规则删除相应的键

简单稳定:

1、相比SQL而言更加简单
2、不同语言的客户端丰富
3、基于C语言开发,代码量少

Redis特性:

1、性能极高:Redis能读的速度是110000次/s,写的速度是81000次/s。
2、丰富的数据类型:Redis支持二进制案例的Strings、Lists、Hashes、Sets及OrderedSets数据类型操作。
3、原子:Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
4、其它特性:Redis还支持publish/subscribe、通知、key过期等特性。

三、下载安装(MacOS)

1、下载地址:https://redis.io/download/

Java后端--25--内存数据库Redis讲解

2、解压安装

# 解压安装包
tar xzf redis-6.0.8.tar.gz

# 进入解压后的目录
cd redis-6.0.8

# 编译
make

# 编译成功后,进入到src目录下
cd src

# 使用默认配置启动redis服务
./redis-server

# 启动redis客户端,用于与redis-server进行交互
./redis-cli

3、测试连接性与状态回复

Java后端--25--内存数据库Redis讲解

4、Redis的多数据库

Redis默认支持16个数据库,可以通过修改配置文件来更改支持数据库的数量,对外都是以一个从0开始的递增数字命名,可以通过参数databases来修改默认数据库个数。客户端连接Redis服务后会自动选择0号数据库,可以通过select命令更换数据库,例如选择1号数据库:

# 选择1号数据库命令
127.0.0.1:6379>select 1

说明:

1、Redis不支持自定义数据库名称。
2、Redis不支持为每个数据库设置访问密码。
3、Redis的多个数据库之间是完全隔离的。

四、Redis的基本命令

以下命令均在redis-cli客户端执行

# 清空所有数据库的数据
flushall

# 清空当前所在数据库的数据
flushdb

# 查询所有键。查询某个具体的键,将后面的*改为键名即可
keys *

# 判断一个键是否存在,存在返回1,否则返回0。其中key是键名
exists key

# 删除一个键,返回删除键的个数。其中key是键名
del key

# 查看键的数据类型。其中key是键名
# string(字符串)、hash(散列类型)、list(列表类型)、set(集合类型)、zset(有序集合类型)
type key

# 帮助
help

五、Redis的字符串数据类型

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

赋值与取值:

127.0.0.1:6379> set test 123
OK
127.0.0.1:6379> get test
"123"

递增数字:

127.0.0.1:6379> incr num
(integer) 1
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> incr num
(integer) 3

增加定制的整数:

127.0.0.1:6379> incrby num 3
(integer) 6
127.0.0.1:6379> incrby num 3
(integer) 9
127.0.0.1:6379> incrby num 3
(integer) 12

减少整数:

127.0.0.1:6379> decr num
(integer) 11
127.0.0.1:6379> decr num
(integer) 10
127.0.0.1:6379> decr num
(integer) 9

减少指定的整数:

127.0.0.1:6379> decrby num 2
(integer) 7
127.0.0.1:6379> decrby num 2
(integer) 5
127.0.0.1:6379> decrby num 2
(integer) 3

尾部追加值:

127.0.0.1:6379> set str hello
OK
127.0.0.1:6379> append str "hanmeimei"
(integer) 14
127.0.0.1:6379> get str
"hellohanmeimei"

获取字符串长度:

127.0.0.1:6379> strlen str
(integer) 14

同时设置多个值:

127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> get k1
"v1"

同时获取多个值:

127.0.0.1:6379> mget k1 k3
1) "v1"
2) "v3"

六、列表类型

Redis列表是简单的字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部(左边)或者尾部(右边)。一个列表最多可以包含 4294967295,每个列表超过40亿个元素。

自动返回并删除列表的第一个(LPOP)或最后一个(RPOP)元素。例如,如果列表包含元素“a”、“b”、“c”,LPOP将返回“a”,而列表将变成“b”、“c”。如果键不存在或列表已为空,则返回特殊值“nil”

# 删除列表的第一个元素
LPOP key

# 删除列表的最后一个元素
RPOP key

返回存储在指定键处的列表的指定元素。0是第一个元素,1是第二个元素,依此类推。支持负索引,例如-1是最后一个元素,-2是倒数第二个元素,依此类推。

如果键处存储的值不是列表类型,则返回错误。如果索引超出范围,则返回空字符串。请注意,即使平均时间复杂度是O(n),请求列表的第一个或最后一个元素也是O(1)。

LINDEX key index

在列表的元素前或者后插入元素

LINSERT key before pivot value
LINSERT key after pivot value

返回存储在指定键的列表的长度。如果键不存在,则返回零(与空列表的行为相同)。如果键处存储的值不是列表,则返回错误

LLEN key

将一个值插入到列表头部

LPUSH key value1

将一个值插入到已存在的列表头部

LPUSHX key value

获取列表指定范围内的元素

LRANGE key start stop

移除列表元素

LREM key count value

通过索引设置列表元素的值

LSET key index value

对一个列表进行修剪(trim),即让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除

LTRIM key start stop

移除列表的最后一个元素,并将该元素添加到另一个列表并返回

RPOPLPUSH source destination

在列表中添加一个或多个值

RPUSH key value1

为已存在的列表添加值

RPUSHX key value

七、Redis集合

Redis的set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis中集合是通过哈希表实现的,所以添加、删除、查找的复杂度都是O(1)。集合中最大的成员数为4294967295,每个集合可存储40多亿个成员。

向集合添加一个成员:

sadd key member1

获取集合的成员数

scard key

返回给定所有集合的差集

sdiff key1

返回给定所有集合的差集并存储在destination中

sdiffstore destination key1

返回给定所有集合的交集

sinter key1

返回给定所有集合的交集并存储在destination中

sinterstore destination key1

判断member元素是否是集合key的成员

sismember key member

返回集合中的所有成员

smembers key

将member元素从source集合移动到destination集合

smove source destination member

移除并返回集合中的一个随机元素

spop key

返回集合中一个随机数

srandmember key [count]

移除集合中一个或多个成员

srem key member1

返回所有给定集合的并集

sunion key1

所有给定集合的并集存储在 destination 集合中

sunionstore destination key1

八、Hash数据结构

Redishash是一个string类型的field和value的映射表,hash特别适合用于存储对象。Redis中每个hash可以存储4294967295个键值对。

取值与赋值:
执行插入操作时返回1,执行更新操作时返回0

127.0.0.1:6379> hset user username suiyi
(integer) 1
127.0.0.1:6379> hget user username
"suiyi"

判断字段是否存在:

127.0.0.1:6379> hexists user username
(integer) 1
127.0.0.1:6379> hexists user age
(integer) 0

Hash的自增长:

127.0.0.1:6379> hincrby user age 2
(integer) 22
127.0.0.1:6379> hincrby user age 2
(integer) 24
127.0.0.1:6379> hincrby user age 2
(integer) 26

删除字段,返回值是被删除的字段个数:

127.0.0.1:6379> hdel user age
(integer) 1
127.0.0.1:6379> hdel user age name
(integer) 0
127.0.0.1:6379> hdel user age username
(integer) 1

只获取字段名或字段值:

127.0.0.1:6379> hmset user age 20 name suiyi
OK
127.0.0.1:6379> hkeys user
1) "age"
2) "name"
127.0.0.1:6379> hvals user
1) "20"
2) "suiyi"

获取字段数量:

127.0.0.1:6379> hlen user
(integer) 2

九、Redis职务

9.1、Redis事务

Redis事务可以一次执行多个命令,并且带有以下两个重要的保证:

1、事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
2、事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。

一个事务从开始到执行会经历以下三个阶段:

1、开始事务。
2、命令入队。
3、执行事务。

9.2、Redis事务命令

下表列出了redis事务的相关命令:

取消事务,放弃执行事务块内的所有命令:

discard

执行所有事务块内的命令:

exec

标记一个事务块的开始:

multi

取消WATCH命令对所有key的监视:

unwatch

监视一个key ,如果在事务执行之前这个key被其他命令所改动,那么事务将被打断:

watch key

本文地址:https://blog.csdn.net/wutianxu123/article/details/110441780

相关标签: Java后端