Redis入门

一. NoSQL的定义和分类

(一) 什么是NoSQL

NoSQL是非关系性数据库,全名为Not Only SQL,为了解决高并发、高可用、高可扩展,大数据存储等一系列问题而产生的数据库解决方案,就是NoSql。它不能替代关系型数据库,只能作为关系型数据库的一个良好补充。

(二)NoSQL的分类

1.键值(Key-Value)存储数据库 ,产品:Redis
2.列存储数据库,产品:HBase
3.文档型的数据库,产品:MangoDB

二.Redis的安装和使用

官网:https://redis.io/download
window版下载地址:https://github.com/MicrosoftArchive/redis/releases
下载Redis For window X64.zip,解压到指定目录

三.Redis自带客户端和图形界面客户端

(一)自带的客户端

redis-cli.exe

(二)图形界面客户端

RedisDesktopManager

(三)清缓存命令

flushall
把缓存键值对清空

四.Redis的String数据类型的赋值取值删除

(一)命令

1.赋值 SET key value

·
在这里插入图片描述

2.取值 GET key

·在这里插入图片描述

3.赋值并取值 SETGET key value

·在这里插入图片描述

4.设置/获取多个键值 mset key value key value

在这里插入图片描述

5.删除 del key

·
在这里插入图片描述

6.数值增减

a.递增数字 incr key
当存储的字符串是整数时,Redis提供了一个实用的命令INCR,其作用是让当前键值递增,并返回递增后的值。
在这里插入图片描述
b.增加指定的整数 incrby key 指定的数字
在这里插入图片描述
c.递减数值 DECR key
d.减少指定的整数 DECR key decrement

6.其它命令

(1)向尾部追加值 APPEND key value
APPEND的作用是向键值的末尾追加value。如果键不存在则将该键的值设置为value,即相当于 SET key value。返回值是追加后字符串的总长度。
在这里插入图片描述
(2)获取字符串长度 STRLEN key
在这里插入图片描述

(二)应用

1.自增主键

商品编号、订单号采用string的递增数字特性生成。

定义商品编号key:items:id
在这里插入图片描述

五.Redis的Hash数据类型的赋值取值删除

(一)使用string的问题

假设有User对象以JSON序列化的形式存储到Redis中,User对象有id,username、password、age、name等属性,存储的过程如下:
保存、更新:
User对象—>json(string)—> redis
如果在业务上只是更新age属性,其他的属性并不做更新我应该怎么做呢? 如果仍然采用上边的方法在传输、处理时会造成资源浪费,而使用Hash可以解决这个问题

(二)redis hash介绍

hash叫散列类型,它提供了字段和字段值的映射。字段值只能是字符串类型,不支持散列类型、集合类型等其它类型。如下:在这里插入图片描述

(三)命令

1.赋值

HSET命令不区分插入和更新操作,当执行插入操作时HSET命令返回1,当执行更新操作时返回0。

a.一次只能设置一个字段值
语法:HSET key field value在这里插入图片描述
b.一次可以设置多个字段值
语法:HMSET key field value [field value …]
在这里插入图片描述
c.当字段不存在时赋值,类似HSET,区别在于如果字段存在,该命令不执行任何操作
语法:HSETNX key field value
.在这里插入图片描述

2.取值

a.一次只能获取一个字段值
语法:HGET key field
.在这里插入图片描述
b.一次可以获取多个字段值
语法:HMGET key field [field …]
. 在这里插入图片描述
c. 获取所有字段值
语法:HGETALL key
.在这里插入图片描述

3.删除字段

可以删除一个或多个字段,返回值是被删除的字段个数
语法:HDEL key field [field …]
.在这里插入图片描述

4.增加数字

语法:HINCRBY key field increment
.在这里插入图片描述

5.其它命令

a.判断字段是否存在
语法:HEXISTS key field
.在这里插入图片描述
b.只获取字段名或字段值
语法:HKEYS key ;HVALS key
.在这里插入图片描述
c.获取字段数量
语法:HLEN key

六.Redis的List数据类型的赋值取值删除

(一)Arraylist和linkedlist的区别

Arraylist是使用数组来存储数据,特点:查询快、增删慢
Linkedlist是使用双向链表存储数据,特点:增删快、查询慢,但是查询链表两端的数据也很快。

Redis的list是采用来链表来存储的,所以对于redis的list数据类型的操作,是操作list的两端数据来操作的。
在这里插入图片描述

七. Redis的Set数据类型的赋值取值删除

集合类型:无序、不可重复
列表类型:有序、可重复

(一)命令

1.增加/删除元素

语法:SADD key member [member …]
在这里插入图片描述
SREM key member [member …]
在这里插入图片描述

2.获得集合中的所有元素

语法:SMEMBERS key
在这里插入图片描述

3.判断元素是否在集合中

语法:SISMEMBER key member
在这里插入图片描述

(二)运算命令

1.集合的差集运算 A-B

属于A并且不属于B的元素构成的集合。
在这里插入图片描述

语法:SDIFF key [key …]
在这里插入图片描述

2.集合的交集运算 A ∩ B

属于A且属于B的元素构成的集合。
在这里插入图片描述
语法:SINTER key [key …]
在这里插入图片描述

3.集合的并集运算 A ∪ B

属于A或者属于B的元素构成的集合
在这里插入图片描述

语法:SUNION key [key …]
在这里插入图片描述

(三)其它命令

1.获得集合中元素的个数

语法:SCARD key
在这里插入图片描述

2.从集合中弹出一个元素

注意:由于集合是无序的,所有SPOP命令会从集合中随机选择一个元素弹出
语法:SPOP key
在这里插入图片描述

八.Redis的SortedSet数据类型的赋值取值删除

(一)Sortedset

Sortedset又叫zset

Sortedset是有序集合,可排序的,但是唯一。

Sortedset和set的不同之处,是会给set中的元素添加一个分数,然后通过这个分数进行排序。

(二)命令

1.增加元素

向有序集合中加入一个元素和该元素的分数,如果该元素已经存在则会用新的分数替换原有的分数。返回值是新加入到集合中的元素个数,不包含之前已经存在的元素。
语法:ZADD key score member [score member …]
在这里插入图片描述

2.获取元素的分数

语法:ZSCORE key member
在这里插入图片描述

3.删除元素

移除有序集key中的一个或多个成员,不存在的成员将被忽略。
当key存在但不是有序集类型时,返回一个错误。

语法:ZREM key member [member …]
在这里插入图片描述

4.获得排名在某个范围的元素列表
获得排名在某个范围的元素列表
按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素(包含两端的元素)

语法:ZRANGE key start stop [WITHSCORES]
127.0.0.1:6379> zrange scoreboard 0 2

  1. “zhangsan”
  2. “wangwu”
  3. "lisi“

按照元素分数从大到小的顺序返回索引从start到stop之间的所有元素(包含两端的元素)

语法:ZREVRANGE key start stop [WITHSCORES]
127.0.0.1:6379> zrevrange scoreboard 0 2

  1. " lisi "
  2. “wangwu”
  3. " zhangsan “

如果需要获得元素的分数的可以在命令尾部加上WITHSCORES参数
127.0.0.1:6379> zrange scoreboard 0 1 WITHSCORES

  1. “zhangsan”
  2. “80”
  3. “wangwu”
  4. “94”

5.获取元素的排名
从小到大
语法:ZRANK key member
127.0.0.1:6379> ZRANK scoreboard lisi
(integer) 0

从大到小
语法:ZREVRANK key member
127.0.0.1:6379> ZREVRANK scoreboard zhangsan
(integer) 1

(三)其它命令(自学)
1.获得指定分数范围的元素
语法:ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
127.0.0.1:6379> ZRANGEBYSCORE scoreboard 90 97 WITHSCORES

  1. “wangwu”
  2. “94”
  3. “lisi”
  4. “97”
    127.0.0.1:6379> ZRANGEBYSCORE scoreboard 70 100 limit 1 2
  5. “wangwu”
  6. “lisi”

2.增加某个元素的分数
返回值是更改后的分数

语法:ZINCRBY key increment member
127.0.0.1:6379> ZINCRBY scoreboard 4 lisi
"101“

3.获得集合中元素的数量
语法:ZCARD key
127.0.0.1:6379> ZCARD scoreboard
(integer) 3

4.获得指定分数范围内的元素个数
语法:ZCOUNT key min max
127.0.0.1:6379> ZCOUNT scoreboard 80 90
(integer) 1

5.按照排名范围删除元素
语法:ZREMRANGEBYRANK key start stop
127.0.0.1:6379> ZREMRANGEBYRANK scoreboard 0 1
(integer) 2
127.0.0.1:6379> ZRANGE scoreboard 0 -1

  1. “lisi”
    6.按照分数范围删除元素
    语法:ZREMRANGEBYSCORE key min max
    127.0.0.1:6379> zadd scoreboard 84 zhangsan
    (integer) 1
    127.0.0.1:6379> ZREMRANGEBYSCORE scoreboard 80 100
    (integer) 1

(四)应用
1.商品销售排行榜
需求:根据商品销售量对商品进行排行显示
思路:定义商品销售排行榜(sorted set集合),Key为items:sellsort,分数为商品销售量。

写入商品销售量:
商品编号1001的销量是9,商品编号1002的销量是10
192.168.101.3:7007> ZADD items:sellsort 9 1001 10 1002

商品编号1001的销量加1
192.168.101.3:7001> ZINCRBY items:sellsort 1 1001

商品销量前10名:
192.168.101.3:7001> ZRANGE items:sellsort 0 9 withscores

十一、Keys命令
(一)常用命令

1.keys
返回满足给定pattern 的所有key
redis 127.0.0.1:6379> keys mylist*

  1. “mylist”
  2. “mylist5”
  3. “mylist6”
  4. “mylist7”
  5. “mylist8”

2.exists
确认一个key 是否存在
示例:从结果来看,数据库中不存在HongWan 这个key,但是age 这个key 是存在的
redis 127.0.0.1:6379> exists HongWan
(integer) 0
redis 127.0.0.1:6379> exists age
(integer) 1
redis 127.0.0.1:6379>

3.del
删除一个key
redis 127.0.0.1:6379> del age
(integer) 1
redis 127.0.0.1:6379> exists age
(integer) 0

4.rename
重命名key
示例:age 成功的被我们改名为age_new 了
redis 127.0.0.1:6379[1]> keys *

  1. “age”
    redis 127.0.0.1:6379[1]> rename age age_new
    OK
    redis 127.0.0.1:6379[1]> keys *
  2. “age_new”
    redis 127.0.0.1:6379[1]>

5.type
返回值的类型
示例:这个方法可以非常简单的判断出值的类型
redis 127.0.0.1:6379> type addr
string
redis 127.0.0.1:6379> type myzset2
zset
redis 127.0.0.1:6379> type mylist
list
redis 127.0.0.1:6379>

6.设置key的生存时间
Redis在实际使用过程中更多的用作缓存,然而缓存的数据一般都是需要设置生存时间的,即:到期后数据销毁。

EXPIRE key seconds 设置key的生存时间(单位:秒)key在多少秒后会自动删除
TTL key 查看key剩余的生存时间
PERSIST key 清除生存时间 -1
PEXPIRE key milliseconds 生存时间设置单位为:毫秒

-1:清除生存时间,redis一直存在该key
-2:到期,redis没有该key
正整数:剩余的生存时间

例子:
192.168.101.3:7002> set test 1 设置test的值为1
OK
192.168.101.3:7002> get test 获取test的值
“1”
192.168.101.3:7002> EXPIRE test 5 设置test的生存时间为5秒
(integer) 1
192.168.101.3:7002> TTL test 查看test的生于生成时间还有1秒删除
(integer) 1
192.168.101.3:7002> TTL test
(integer) -2
192.168.101.3:7002> get test 获取test的值,已经删除
(nil)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值