Redis基础准备 5大结构常用API汇总

勿以浮沙筑高台


Redis基础准备

安装Redis

下载地址Github:

https://github.com/tporadowski/redis/releases 5.0

百度云:https://pan.baidu.com/s/1AlrZwsMaGqRJavako13bqQ

密码:85er

直接双击安装即可,安装完成后没有密码,直接通过端口6379访问就OK

Redis Desktop Manager可视化工具

下载地址:https://pan.baidu.com/s/1-MCHNe8DKFwk4A7wO-C_NQ

密码:8dbw

直接下载好,点击左下角connect to Redis Server ,输入Host地址和port端口链接。

Redis基础知识

  1. Redis是基于内存的运行数据库,所以肯定会发生数据丢失,断电。
  2. Redis所有数据存储都是key-value1存储
  3. Redis默认有16个库,在conf中databases 16标签可以配置库
    在这里插入图片描述
    4.Redis是非关系性数据库,因此是无法像SQL那样进行访问
    5.Redis提供了多种数据结构来访问key-value,它们分别是:String,List,Hash,Zset,Set

Redis基础操作

Redis的启动

  1. 启动Redis服务: 首次需要启动cmd命令界面执行命令进行运行,打开cmd 使用cd 切换到redis目录,输入redis-server.exe redis.windows.conf运行redis。

  2. 启动客户端: 启动cmd命令界面。输入redis-cli.exe 弹出127.0.0.1:6379> 表示启动成功

Redis的基本操作命令

1.切换redis数据库 SELECT index

		127.0.0.1:6379>  SELECT 1  #index 代码库号。
		OK

2.设置节点 set keyname context

		127.0.0.1:6379[1]> set   keyname  context
		OK

3.查询所有数据节点 keys *

        127.0.0.1:6379[1]> keys *
		1) "keyname"
		2) "name"

4.判断节点是否存在,返回1代表存在,0代表失败

		127.0.0.1:6379[1]> exists name
		(integer) 1

5.把key往指定库中移动

		127.0.0.1:6379[2]> move name 1   #移动name节点到1库
		(integer) 1
		127.0.0.1:6379[2]> select 1      #操作1库
		OK
		127.0.0.1:6379[1]> keys name   #查询name节点
		1) "name"

6.获得节点内容

		127.0.0.1:6379[1]> get name
		"132"

7.重置节点内容

		27.0.0.1:6379[1]> set name context    #如果有空格需要用""标注
		OK
		127.0.0.1:6379[1]> get name    
		"context"

7.设置key的过期时间,单位是秒

127.0.0.1:6379[1]> expire name 3   #3是描述
(integer) 1
127.0.0.1:6379[1]> get name
(nil)

8.查看当前key的剩余过期时间

127.0.0.1:6379> ttl name    # 查看当前key的剩余过期时间
(integer) 7
127.0.0.1:6379> ttl name     
(integer) -2                          #返回-2表示节点已经不存在

9.清空数据库

127.0.0.1:6379> flushdb     # 请空当前数据库
“OK”
127.0.0.1:6379> flushall      # 请空所有数据库
“OK”

String数据结构(字符串)

1.设置值

127.0.0.1:6379> set key1 v1 #设置值
OK
127.0.0.1:6379> get key1
"v1"

2.最加值

127.0.0.1:6379[1]> append fuchasheng context
(integer) 7
127.0.0.1:6379[1]> get fuchasheng
"context"

3.获取字符串长度

127.0.0.1:6379> strlen fuchasheng   # 获取字符串长度
(integer) 7

4.自增

127.0.0.1:6379[1]> set name 1
OK
127.0.0.1:6379[1]> incr name
(integer) 2

5.自减

127.0.0.1:6379[1]> decr name
(integer) 1

6.设置增长数

127.0.0.1:6379[1]> incrby name 3
 (integer) 4

7.设置减数

127.0.0.1:6379[1]> decrby name 2  
(integer) 2

8.设置特殊符号

127.0.0.1:6379[1]> set fu "hello,world"
OK
127.0.0.1:6379[1]> get fu
"hello,world"

9.截取字符串

127.0.0.1:6379[1]> getrange fu 0 3  #包含了0和3,意思包含2端截取
"hell"

10.获取全部字符串

127.0.0.1:6379> getrange fu  0 -1 # 获取全部的字符串,和 get key一样
"hello,world!"

11.替换

127.0.0.1:6379[1]> setrange fu 1 xx  #从第二位开始,也可以看做从0开始
(integer) 11
127.0.0.1:6379[1]> get fu
"hxxlo,world"

12.setex设置过期时间

127.0.0.1:6379> setex key3 30 "hello" # 设置 30 秒后过期
OK

13.当不存在的时候创建节点,分布式节点使用

 setnx mykey "redis"       # mykey 不存在时设置成功
(integer) 1           # 返回0时代表节点已经存在

14.同时设置多个节点

127.0.0.1:6379[1]>  mset k1 v1 k2 v2 k3 v3    #key是节点,v是context
OK
127.0.0.1:6379[1]> keys *
1) "keyname"
2) "k1"
3) "fuchasheng"
4) "fu"
5) "k3"
6) "k2"
7) "name"

15.同时获取多个节点值

127.0.0.1:6379[1]> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"

16.原子操作设置节点

127.0.0.1:6379[1]> msetnx k5 v5 k4 v4   #原子操作一个失败所有失败。
(integer) 1
127.0.0.1:6379[1]> mget k4 k5
1) "v4"
2) "v5"

17.设置对象

127.0.0.1:6379[1]> mset user:1:name zhangsan user:1:age 2     #这里的User:1代码1号实例对象
OK

18.拿取对象

127.0.0.1:6379[1]>  mget user:1:name user:1:age
1) "zhangsan"
2) "2"

19.拿取原先的值再设置新值

127.0.0.1:6379[1]> getset k5 mongodb
"v5"
127.0.0.1:6379[1]> get k5
"mongodb"

总结:String 的使用场景:value 除了是字符串以外还可以是数字

计数器
统计多单位的数量
粉丝数
对象缓存存储

List数据结构(列表)

在 Redis 中可以把 list 用作栈、队列、阻塞队列。
list 命令多数以 l 开头。

1.先进后出队列,栈

127.0.0.1:6379[1]>  lpush list one two three  # 将一个值或者多个值,插入到列表的头部(左) 表	现为栈
(integer) 3
127.0.0.1:6379> lrange list 0 -1 # 查看全部元素
1) "three"
2) "two"
3) "one"

2.通过区间获取值

127.0.0.1:6379> lrange list 0 1 # 通过区间获取值
1) "three"
2) "two"

3.将值从右侧插入

127.0.0.1:6379[1]> rpush list right
(integer) 4
127.0.0.1:6379[1]>  lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"

4.移除左侧第一个元素

127.0.0.1:6379[1]> lpop list
"three"

5.移除右侧第一个元素

127.0.0.1:6379[1]>  rpop list
"right"	

6.通过索引查询所有

127.0.0.1:6379[1]> lrange list 0 -1    #通过索引查询所有
1) "two"
2) "one"
127.0.0.1:6379[1]> lindex list 1       #通过索引查询单个
"one"

6.通过内容移除节点

127.0.0.1:6379[1]> lrem list 1 two   #移除内容为two的节点,如果有多个相同内容的会一同移除掉
(integer) 1
127.0.0.1:6379[1]> lrange list 0 -1
1) "one"

7.截取start和end之间的内容

127.0.0.1:6379[1]>  lpush list hjk2 hjk3 hjk4 hjk5
(integer) 6
127.0.0.1:6379[1]> lrange list 0 -1
1) "hjk5"
2) "hjk4"
3) "hjk3"
4) "hjk2"
5) "hjk"
6) "one"
127.0.0.1:6379[1]>  ltrim list 1 2
OK
127.0.0.1:6379[1]> lrange list 0 -1
1) "hjk4"
2) "hjk3"

8.移除列表的最后一个元素,将他移动到新的列表中。

127.0.0.1:6379[1]>  lpush list hjk1 hjk2 hjk3 hjk4 hjk5   #新建list列表
(integer) 5
127.0.0.1:6379[1]> lrange list 0 -1     #查看
1) "hjk5"
2) "hjk4"
3) "hjk3"
4) "hjk2"
5) "hjk1"
127.0.0.1:6379[1]>  rpoplpush list myotherlist   #移除列表的最后一个元素,将他移动到新的列表中。
"hjk1"
127.0.0.1:6379[1]> lrange list 0 -1    #查看list 
1) "hjk5"
2) "hjk4"
3) "hjk3"
4) "hjk2"
127.0.0.1:6379[1]> lrange myotherlist 0 -1       #查看myotherlist 
1) "hjk1"

9.更新当前下标的值

127.0.0.1:6379[1]>  lset list 0 item
OK
127.0.0.1:6379[1]> lrange list 0 -1
1) "item"
2) "hjk4"
3) "hjk3"
4) "hjk2"

10.将某个具体的value插入到列表中某个元素的前面或者后面

127.0.0.1:6379[1]> linsert list before "item" hello    #插入item之前
(integer) 5
127.0.0.1:6379[1]> linsert list after "item" ohhhh     #插入item之后
(integer) 6
127.0.0.1:6379[1]> lrange list 0 -1
1) "hello"
2) "item"
3) "ohhhh"
4) "hjk4"
5) "hjk3"
6) "hjk2"

总结

list 实际上是一个链表,前后都可以插入
如果移除了所有的值,空链表,也代表不存在
在两边插入或者改动值,效率最高。

Set 数据结构(集合)

redis中的Set和List集合类似,集合中的value元素不可重复。集合之间可以取交集,并集,差集等。

1.向Set集合中添加元素

127.0.0.1:6379[1]>  sadd myset "hello"
(integer) 1

2.查看Set集合中的元素

127.0.0.1:6379[1]>  smembers myset
1) "hello"

3.判断某一个值是不是在set中

127.0.0.1:6379[1]> sismember myset hello # 判断某一个值是不是在set中
(integer) 1

4.获取集合中的个数

127.0.0.1:6379[1]> scard myset # 获取集合中的个数
(integer) 2

5.移除元素

127.0.0.1:6379[1]> srem myset hello   # 移除元素
(integer) 1

6.随机抽取一个元素

127.0.0.1:6379[1]> srandmember myset  #随机抽取一个元素
"hello"

7.随机抽取指定个数的元素

127.0.0.1:6379[1]> srandmember myset 2
1) "hello2"
2) "hello1"

6.随机删除一个元素

127.0.0.1:6379[1]> spop myset
"hello4"
127.0.0.1:6379[1]>  smembers myset
1) "hello3"
2) "hello1"
3) "hello"
4) "hello2"
127.0.0.1:6379[1]> spop myset  5     #随机删除一个元素
"hello4"

7.将特定的值移动到指定Set集合,如果没有这个集合就会创建新集合

127.0.0.1:6379[1]> smove myset myset2 "hello"   
(integer) 1
127.0.0.1:6379[1]> smove myset myset2 "hello2"
(integer) 1
127.0.0.1:6379[1]>  smembers myset2
1) "hello2"
2) "hello"

8.交并差集

127.0.0.1:6379> smembers key1
1) "b"
2) "a"
3) "c"
127.0.0.1:6379> smembers key2
1) "e"
2) "d"
3) "c"
127.0.0.1:6379> sdiff key1 key2 # 差集
1) "b"
2) "a"
127.0.0.1:6379> sinter key1 key2         # 交集
1) "c"
127.0.0.1:6379> sunion key1 key2 # 并集
1) "e"
2) "a"
3) "c"
4) "d"
5) "b"

总结

本质就是String一样的的,通过hash计算内存地址
key不能相同 常用于取重场景,比如计算邀请码生成了多少,多人参加的计算。

ZSet 数据结构(排序集合)

1.添加数据,其中,123呆在则数据在位置score

127.0.0.1:6379[1]> zadd myzset 3 one  2 two 1 three
(integer) 3
127.0.0.1:6379[1]>  zrange myzset 0 -1   #查看数据
1) "three"
2) "two"
3) "one"

2.通过设置的score从小到大排序,注意这里的three和one的score我换了,所以效果是反的

127.0.0.1:6379[1]> zrangebyscore myzset -inf +inf
1) "three"
2) "two"
3) "one"

3.通过设置的score从大到小排序,注意这里的three和one的score我换了,所以效果是反的

127.0.0.1:6379[1]> zrevrange myzset 0 -1
1) "one"
2) "two"
3) "three"

4.带score输出

127.0.0.1:6379[1]> zrangebyscore myzset -inf +inf withscores
1) "three"
2) "1"
3) "two"
4) "2"
5) "one"
6) "3"

5.score小于等于2的value

127.0.0.1:6379[1]> zrangebyscore myzset -inf 2 withscores
1) "three"
2) "1"
3) "two"
4) "2"

6.# 移除特定元素

127.0.0.1:6379[1]> zrem myzset two
(integer) 1
127.0.0.1:6379[1]> zrevrange myzset 0 -1
1) "one"
2) "three"

7.获取有序集合的个数

127.0.0.1:6379[1]>  zrangebyscore myzset -inf +inf withscores
1) "three"
2) "1"
3) "one"
4) "3"
5) "two"
6) "5"
127.0.0.1:6379[1]> zcard myzset
(integer) 3

7.获取指定score区间的个数

127.0.0.1:6379[1]>  zcount myzset 1 3
(integer) 2

Hash数据结构(哈希)

也是 key - value 形式的,但是value 是一个map。
想到于value又是一个key - value

1.创建和查看

127.0.0.1:6379[1]> hset myhash field xxx    #myhash为第一个key   field为字段
(integer) 1
127.0.0.1:6379[1]>  hget myhash field    #获取field字段的值
"xxx"
127.0.0.1:6379> hmset myhash field1 hello field2 world       # set 多个 key-value
OK
127.0.0.1:6379> hmget myhash field field1 field2     # 获取多个字段值
1) "xxx"
2) "hello"
3) "world"

2.获取全部的数据

127.0.0.1:6379> hgetall myhash
1) "field"        #failed
2) "xxx"         #failed-value
3) "field1"     #failed
4) "hello"      #failed-value
5) "field2"     #failed
6) "world"     #failed-value

3.删除指定的key

127.0.0.1:6379> hdel myhash field1 # 删除指定的key,对应的value也就没有了
(integer) 1

4.获取长度

127.0.0.1:6379> hlen myhash
(integer) 2

5.判断指定key是否存在

127.0.0.1:6379> hexists myhash field1
(integer) 0

6.获取所有的key

127.0.0.1:6379> hkeys myhash 
1) "field"
2) "field2"

7.获取所有的value

127.0.0.1:6379> hvals myhash 
1) "xxx"
2) "world"

8.如果不存在则新建节点,存在则不新建

127.0.0.1:6379> hsetnx myhash field4 hello  
(integer) 1

9.如果failed-value是数字,新增和删减

127.0.0.1:6379> hincrby myhash field3 1 # 指定增量
(integer) 6
127.0.0.1:6379> hincrby myhash field3 -1
(integer) 5

总结

String :一个key对应一个value
List:链表,一个key对应多个value,先进后出,栈模型
Set:map模型,一个key对应多个value,但是value不具有排序且不能重复,但是可以取交并差
Zset:带有score排序的map模型,一个key对应多个value,但是value不具有排序且不能重复不可以取交并差,但是能排序。
Hash:key-failed-value,一个key对应多个failed,每个failed对应一个数据存储,

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值