Redis数据库的增删改查操作:

1. NoSQL简介

  • NoSQL最常见的解释是“non-relational”, “Not Only SQL”也被很多人接受。NoSQL仅仅是一个概念,泛指非关系型的数据库,区别于关系数据库,它们不保证关系数据的ACID特性。NoSQL是一项全新的数据库革命性运动,其拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。
  • NoSQL有如下优点:易扩展,NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。无形之间也在架构的层面上带来了可扩展的能力。大数据量,高性能,NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。

2. redis简介

  • redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。
  • redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件
  • Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。

3. redis基本操作

3.1 启动服务端

redis-server
[root@xishaohua bin]# redis-server
6737:C 26 Jun 2021 05:32:20.084 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
6737:C 26 Jun 2021 05:32:20.084 # Redis version=6.2.4, bits=64, commit=00000000, modified=0, pid=6737, just started
6737:C 26 Jun 2021 05:32:20.084 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
6737:M 26 Jun 2021 05:32:20.085 * Increased maximum number of open files to 10032 (it was originally set to 1024).
6737:M 26 Jun 2021 05:32:20.085 * monotonic clock: POSIX clock_gettime
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 6.2.4 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                  
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 6737
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           https://redis.io       
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

6737:M 26 Jun 2021 05:32:20.086 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
6737:M 26 Jun 2021 05:32:20.086 # Server initialized
6737:M 26 Jun 2021 05:32:20.086 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
6737:M 26 Jun 2021 05:32:20.086 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo madvise > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled (set to 'madvise' or 'never').


3.2 启动客户端

- 支持中文的方式启动:
[root@xishaohua ~]# redis-cli --raw
-运行测试命令:
127.0.0.1:6379> ping
PONG

3.3 切换数据库

  • 数据库名称没有,默认16个,通过0-15来表示
  • select3 选择3号数据库
  • select0 选择0号数据库
  • 登录到redis客户端,如果没有做任何select操作,默认选择的是0号数据库
-- 例子1:选择编号为1的数据库
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> lrange luser1 0 -1
cc
bb
aa

3.4 reids键值对说明

  • redis是key-value的数据结构;
  • 每一条数据都是一个键值对;
  • 键的类型是字符串;
  • 值的类型认为五种:
    - 字符串 string;
    - 哈希 hash;
    - 列表 list;
    - 无序集合 set;
    - 有序集合zset;

4. 字符串string

4.1 string介绍

  • 字符串(string)是redis最基本的类型;
    在这里插入图片描述

4.2 增加、修改

4.2.1 set 键 值
  • 如果键不存在就是添加,如果存在就是修改值
--添加键user1值aaa
set user1 aaa
127.0.0.1:6379[1]> select 3
OK
127.0.0.1:6379[3]> set user1 aaa
OK
127.0.0.1:6379[3]> 
-- 修改值
set user1 bbb
4.2.2 设置键值并添加过期时间
  • set 键 过期时间 值
  • 过期时间单位为秒
setex user2 3 aaa
4.2.3 设置多个键值对
	- mset 键1 值1 键2 值2 键3 值3
127.0.0.1:6379[3]> mset user2 aaa user3 bbb user4 ccc user5 ddd
OK
127.0.0.1:6379[3]> 
4.2.4 追加值
  • append 键 值
append user2 hahha

4.3 获取

  • 获取值
    - get 键
    - 如果键不存在,显示空行
127.0.0.1:6379[3]> get user2 
aaahahha
127.0.0.1:6379[3]> get user2
aaahahha
127.0.0.1:6379[3]> get user10

127.0.0.1:6379[3]> 
  • 获取多个值
    - mget 键1 键2
127.0.0.1:6379[3]> mget user2 user3
11
33
127.0.0.1:6379[3]> 

4.4 删除

  • 删除键
    - del 键
del user1
127.0.0.1:6379[3]> del user1
1
127.0.0.1:6379[3]> get user1


  • 删除多个键
    - del 键1 键2
127.0.0.1:6379[3]> del user2 user3
2
127.0.0.1:6379[3]> mget user2 user3


127.0.0.1:6379[3]> 

5. 键命名

5.1 查找键

  • keys 键
127.0.0.1:6379[3]> keys user4
user4
127.0.0.1:6379[3]> 
  • keys *
-- 显示所有键
keys *
127.0.0.1:6379[3]> keys *
user5
user4
127.0.0.1:6379[3]> 

5.2 判断键是否存在

  • exists 键
  • 判断键是否存在
    - 存在返回1
    - 不存在返回0
exists127.0.0.1:6379[3]> keys *
user5
user4
127.0.0.1:6379[3]> exists user5
1
127.0.0.1:6379[3]> exists user5 user4
2
127.0.0.1:6379[3]> exists user5 user6
1
127.0.0.1:6379[3]> exists user6
0
127.0.0.1:6379[3]> 

5.3 查看键对应的value类型

  • type 键
type user4(查看user4对应的类型是什么)
127.0.0.1:6379[3]> type user4
string
127.0.0.1:6379[3]>

5.4 设置已有键的过期时间

  • expire 键 秒数
-- 设置键的过期时间
127.0.0.1:6379[3]> expire user4 100
1

5.5 查看键的有效时间

  • 以秒为单位
    - 返回大于0,代表有效时间,单位为:秒;
    - 返回-1为永远有效;
    - 返回-2为键不存在;
ttl 键
-- 设置键user4的过期时间100s
127.0.0.1:6379[3]> expire user4 100
1

6. 哈希 hash

6.1 hash介绍

  • hash用于存“储键值”对集合;
  • 每个hash中的键可以理解为字段(field),一个字段(field)对应一个值(value);
  • hash中的值(value)类型为字符串(string);
  • 同一个hash中字段名(field)不可重复。

6.2 增加,修改

  • 添加
  • hset 键 字段 值
-- 设置一个键huser1,字段name,值tom
hset huser1 name tom
  • 设置多个值
  • hmset 键 字段1 值1 字段2 值2
hmset huser2 name marry sex female
  • type 键
  • type huser1
127.0.0.1:6379[3]> type huser1
hash
127.0.0.1:6379[3]> 

6.3 获取

  • 获取一个字段的值
    - hget 键 字段
hget huser2 name
127.0.0.1:6379[3]> hget huser2 name
marry

  • 获取多个字段的值
    - hmget 键 字段1 字段2
-- hmget huser2 name sex

127.0.0.1:6379[3]> hmget huser2 name sex
marry
female
127.0.0.1:6379[3]> 

  • 获取所有字段的值
    - hvals 键
hvals huser2

127.0.0.1:6379[3]> hvals huser2
marry
female
127.0.0.1:6379[3]>
  • 获取所有的字段包括值
    - hgetall 键
hgetall huser2
127.0.0.1:6379[3]> hgetall huser2
name
marry
sex
female
127.0.0.1:6379[3]> 

6.4 删除

  • 删除指定字段
    - hdel 键 字段名
hdel huser2 sex

127.0.0.1:6379[3]> hgetall huser2
name
marry
sex
female
127.0.0.1:6379[3]> hdel huser2 sex
1
127.0.0.1:6379[3]> hgetall huser2
name
marry
127.0.0.1:6379[3]> 
  • 删除键
    - del 键
127.0.0.1:6379[3]> hgetall huser2
name
marry
127.0.0.1:6379[3]> del huser2
1
127.0.0.1:6379[3]> hgetall huser2

127.0.0.1:6379[3]> 

7. 列表 list

7.1 list介绍

  • 列表中的值(value)为字符串(string);
  • 列表中的每个值按照添加的顺序排列。

7.2 增加

  • 从列表左侧添加值
    - lpush 键 值1 值2
lpush luser1 aa bb
127.0.0.1:6379[3]> select 4
OK
127.0.0.1:6379[4]> lpush luser1 aa bb cc
3
127.0.0.1:6379[4]> 
  • 从右侧添加值
    - rpush 键 值1 值2
rpush luser1 dd
127.0.0.1:6379[4]> rpush luser1 dd
4
127.0.0.1:6379[4]> 
  • 从指定值前或后插入值
    - linsert key before / after 值 插入的值
linsert luser1 before cc 11
linsert luser1 after cc 22
127.0.0.1:6379[4]> linsert luser1 before cc 11
5
127.0.0.1:6379[4]> linsert luser1 after cc 22
6
127.0.0.1:6379[4]> 

7.3 获取

  • 返回列表里指定范围内的值
    - 索引从左侧开始,第一个值的索引为0;
    - 索引可以是负数,表示从尾部开始计数,如:-1表示最后一个值;
    - start,stop为要获取值的索引。
  • 获取所有值
  • lrange 键 start stop
lrange luser1 0 -1 
127.0.0.1:6379[4]> lrange luser1 0 -1
11
cc
22
bb
aa
dd
127.0.0.1:6379[4]> 
  • 获取指定范围的值
-- 获取指定的值
127.0.0.1:6379[4]> lrange luser1 2 4
22
bb
aa
127.0.0.1:6379[4]> 

127.0.0.1:6379[4]> lrange luser1 2 -1
22
bb
aa
dd
127.0.0.1:6379[4]> 

7.4 修改

  • 修改指定索引的值
    - lset 键 索引 值

127.0.0.1:6379[4]> lset luser1 0 ee
OK
127.0.0.1:6379[4]> lrange luser1 0 -1
ee
cc
22
bb
aa
dd
127.0.0.1:6379[4]> 

7.4 删除指定的值

  • 删除指定的值
    • 将列表中前count次出现的值移除
    • count > 0 从头往尾删;
    • count < 0 从尾往头删;
    • count = 0 删除所有值。
-- 例子1:向键luser2中加入值'h0' 'h1' 'h2' 'h3' 'h0' 'h1' 'h0' 'h1'
127.0.0.1:6379[1]> rpush luser2 'h0' 'h1' 'h2' 'h3' 'h0' 'h1' 'h0' 'h1'
8
127.0.0.1:6379[1]> lrange luser2 0 -1
h0
h1
h2
h3
h0
h1
h0
h1
127.0.0.1:6379[1]> 

-- 例子2:从键luser2列表右侧开始删除1个h1;
127.0.0.1:6379[1]> lrange luser2 0 -1
h0
h1
h2
h3
h0
h1
h0
h1
127.0.0.1:6379[1]> lrem luser2 -1 h1
1
127.0.0.1:6379[1]> lrange luser2 0 -1
h0
h1
h2
h3
h0
h1
h0

-- 例子3:从键luser2列表左侧开始删除2个h1;
127.0.0.1:6379[1]> lrange luser2 0 -1
h0
h1
h2
h3
h0
h1
h0
127.0.0.1:6379[1]> lrem luser2 2 h1
2
127.0.0.1:6379[1]> lrange luser2 0 -1
h0
h2
h3
h0
h0
-- 例子4:从键luser2列表中删除所有h0;
127.0.0.1:6379[1]> lrange luser2 0 -1
h0
h2
h3
h0
h0
127.0.0.1:6379[1]> lrem luser2 0 h0
3
127.0.0.1:6379[1]> lrange luser2 0 -1
h2
h3
127.0.0.1:6379[1]> 

8. 集合 set

8.1 set介绍

  • 无序集合中值(value)类型为字符串(string);
  • 集合里不允许有重复的值;
  • 说明:对于集合里的值只能添加与删除,不能修改。

8.2 添加值

  • 添加值
  • sadd 键 值1 值2 值3
127.0.0.1:6379[1]> sadd suser1 aa bb cc
3

8.3 查询值

  • 获取值
  • smembers 键
-- 获取集合中的值
-- smembers suser1

8.4 删除值

  • srem 键 值
  • 删除指定的值
127.0.0.1:6379[1]> smembers suser1
aa
bb
cc
127.0.0.1:6379[1]> srem suser1 aa
1
127.0.0.1:6379[1]> smembers suser1
bb
cc
127.0.0.1:6379[1]> 

9. 有序集合 zset

9.1 zset介绍

  • 有序集合中值(value)类型为字符串(string);
  • 集合里不允许有重复的值;
  • 每个值都会关联一个分数(score),分数(score)可以为负数,通过分数(score)将值从下到大排序;
  • 说明:对于有序集合里的值只能添加与删除不能修改。

9.2 添加值

  • zadd 键 score1 值1 score2 值2 score3 值3
    -添加值
-- 添加3个值,score分别为1,3,5,2
-- 添加的值会按照score从小到大排列
127.0.0.1:6379[1]> zadd zuser1 1 aa 3 dd 6 cc 2 ff
4
127.0.0.1:6379[1]> 

9.3 获取值

  • 返回指定范围内的值
    - start,stop为值的下标索引;
    - 第一个值的索引为0;
    - 索可以是负数,表示从尾部开始计数,-1表示最后一个值;
    - withscore:同时获取值对应的分数(score)。
127.0.0.1:6379[1]> zrange zuser1 0 -1
aa
ff
dd
cc
127.0.0.1:6379[1]> 
-- score显示
127.0.0.1:6379[1]> zrange zuser1 0 -1 withscores
aa
1
ff
2
dd
3
cc
6
127.0.0.1:6379[1]> 


-- 通过score获取值
-- zrangebyscore 键 min max
-- min代表score的起始值
-- max代表score的末尾值
127.0.0.1:6379[1]> zrangebyscore zuser1 1 6
aa
ff
dd
cc
127.0.0.1:6379[1]> 

-- 通过值得到score
-- zscore 键 值
27.0.0.1:6379[1]> zrangebyscore zuser1 1 6
aa
ff
dd
cc
127.0.0.1:6379[1]> zscore zuser1 cc
6
127.0.0.1:6379[1]> 

9.4 删除值

  • 删除指定的值
  • zrem 键 值
127.0.0.1:6379[1]> zrange zuser1 0 -1 withscores
aa
1
ff
2
dd
3
cc
6
127.0.0.1:6379[1]> zrem zuser1 aa
1
127.0.0.1:6379[1]> zrange zuser1 0 -1 withscores
ff
2
dd
3
cc
6
127.0.0.1:6379[1]> 
  • 通过score删除值
  • zremrangebyscore zuser1 min max
  • min是要删除score的最小值
  • max是要删除score的最大值
127.0.0.1:6379[1]> zrange zuser1 0 -1 withscores
ff
2
dd
3
cc
6
127.0.0.1:6379[1]> zremrangebyscore zuser1 0 10
3
127.0.0.1:6379[1]> zrange zuser1 0 -1

127.0.0.1:6379[1]> 

  • redis学习时的思维导图:
    在这里插入图片描述
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐