Redis学习总结

在1月17日-1月27日,本人花了11天学习redis这章内容,超过自己定的期限一周,期间遇到了很多bug,导致进度多次长时间停滞,大多最终都靠自己解决了。我将模拟回答几个问题,之后再分层次的详细讲述自己在学习中领悟的自己的理解,如果有错误,欢迎指正

1.什么是redis?

答:简单的说,redis是一用c语言开发的一个开源高性能键值对的内存数据库,可以用来做数据库,缓存,消息中间件等场景,是一种Nosql的数据库

2.redis与mysql的区别?

答:2.1.redis是使用Nosql的数据库,而mysql是关系型数据库,它们的数据结构时不同的:Nosql通常以键值对的形式呈现,而sql使用表来组织数据

2.2性能:redis快一些

2.3使用场景:redis一般使用在缓存,消息队列,实时统计,而mysql通常用于复杂的查询和事务处理。

3.redis的优点

答:优秀的性能,数据是存储在内存中而不是磁盘中,所以读写速度快,而且Redis自带原子性,在事务中命令有一条有错,全部都不会执行,而且有高可拓展性,最后,作为存在内存中的数据,它能完成数据的持久化,也就是aof和rdb

接下来,我将分层次的叙述我的redis学习路线:

1.linux下载安装,redis下载安装,单机哨兵集群模原理掌握

1.1linux下载安装

1.1.1首先我是通过官网下载的vmware下载。看狂神通过360安装没有采用这个方式

1.1.2然后安装centos,我是通过清华镜像网站安装的,网址如下:清华大学开源软件镜像站 | Tsinghua Open Source Mirror

1.1.3VMware使用方式:点击屏幕进入虚拟机,crtl+alt鼠标退出虚拟机

1.2.Redis安装

1.2.1Redis官网下载安装包

1.2.2使用xshell连接linux,打开虚拟机,使用xftp把安装包传过去

1.2.3下载过程不作赘述,下载完成后创建 kconfig 目录来存放配置文件,修改配置文件demonize 改为yes,如果是no的话,它会输出所有输出和日志信息,但是关闭终端,Redis将退出

1.3单击哨兵集群模式

1.3.1单机模式:在单机模式下,Redis只在单个节点上运行,处理所有的读写请求和数据存储。

1.3.2哨兵模式:它通过引入一组Redis Sentinel进程来监控和管理Redis集群中的主节点和从节点,以实现自动故障恢复和故障转移。

1.3.3集群模式:redis-cluster它允许将多个Redis节点组成一个分布式集群,以便在处理大规模数据和并发负载时提供更好的性能和可用性。

其中哨兵集群的简单实现在我上篇文章有详细说明:1/27日学习笔记-CSDN博客

2.掌握五中常用数据类型:String,List,Set,Zset,Hash

通用:

set name qinjiang#设置name

 DBSIZE#查看长度

keys *#查看所有

select 3#跳转数据库

flushdb#删除所有

 type age#查看数据类型

 EXPIRE age 10#设置key的过期时间

2.1String

incr view#增加

 INCRBY view 10#自增步长

GETRANGE key1 0 3 #截取字符串【0,3】

 GETRANGE key1 0 -1#获取全部的字符串和get key一样的

 SETRANGE key1 1 xx#替换指定位置的字符串

setex key3 30 "hello"#设置key3的值为hello,30秒后过期

setnx mykey "redis"#如果mykey不存在,创建mykey'

setnx mykey "MongoDB"#如果mykey存在,创建失败

 msetnx k1 v1 k4 v4#msetnx是一个原子性的操作,要么一起成功,要么一起失败

Getset #先get再set

127.0.0.1:6379> getset db redis#如果不存在值则返回nil

(nil)

127.0.0.1:6379> get db

"redis"

127.0.0.1:6379> getset db mongoDB#如果存在值,获取原来的值并设置新的值

"redis"

127.0.0.1:6379> get db

"mongoDB"

2.2List

 LPUSH list one #将一个值或者多个值,插入到列表头部(左)

 Rpush list right #将一个值或多个值,插入到列表尾部

Lpop list#移除list的第一个元素

 Rpop list#移除list的最后一个元素

 Llen list #返回列表的长度

Rpoplpush #移除列表的最后一个元素,将它移动到新的列表中

127.0.0.1:6379> rpush mylist "hello"

(integer) 1

127.0.0.1:6379> rpush mylist "hello1"

(integer) 2

127.0.0.1:6379> rpush mylist "hello2"

(integer) 3

127.0.0.1:6379> rpoplpush mylist myotherlist

"hello2"

127.0.0.1:6379> lrange mylist 0 -1

1) "hello"

2) "hello1"

##########################################

Lset 将列表中指定下标的值替换成为另外一个值,更新操作

127.0.0.1:6379> EXISTS list

(integer) 0

127.0.0.1:6379> lset list 0 item#如果不存在列表会报错

(error) ERR no such key

127.0.0.1:6379> lpush list value1#如果存在,更新当前下标的值

(integer) 1

127.0.0.1:6379> lrange list 0 0

1) "value1"

127.0.0.1:6379> lset list 0 item

OK

##############################################

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

127.0.0.1:6379> Rpush mylist "hello"

(integer) 1

127.0.0.1:6379> Rpush mylist "world"

(integer) 2

127.0.0.1:6379> Linsert mylist before "world" "other"

(integer) 3

127.0.0.1:6379> Lrange mylist 0 -1

1) "hello"

2) "other"

3) "world"

127.0.0.1:6379> Linsert mylist after world new

(integer) 4

127.0.0.1:6379> Lrange mylist 0 -1

1) "hello"

2) "other"

3) "world"

4) "new"

2.3Set

Set中的值不能重复的!

#########################################

127.0.0.1:6379> sadd myset "hello" #

(integer) 1

127.0.0.1:6379> sadd myset "kuangshen"

(integer) 1

127.0.0.1:6379> sadd myset "lovekuangshen"

(integer) 1

127.0.0.1:6379> SMEMBERS myset #查看指定set的所有值

1) "lovekuangshen"

2) "kuangshen"

3) "hello"

127.0.0.1:6379> SISMEMBER myset hello #判断一个值是不是在set集合中

(integer) 1

127.0.0.1:6379> SISMEMBER myset world

(integer) 0

########################################

127.0.0.1:6379> scard myset #获取set集合中的内容的元素个数

(integer) 3

127.0.0.1:6379> srem myset hello#移除set集合中的指定元素

(integer) 1

127.0.0.1:6379> scard myset

(integer) 2

127.0.0.1:6379> smembers myset

1) "lovekuangshen"

2) "kuangshen"

##########################################

127.0.0.1:6379> srandmember myset#随机抽选出一个元素

"lovekuangshen"

127.0.0.1:6379> srandmember myset

"lovekuangshen"

127.0.0.1:6379> srandmember myset

"lovekuangshen"

127.0.0.1:6379> srandmember myset

"kuangshen"

127.0.0.1:6379> srandmember myset 2 #随机抽选出指定数量的元素

1) "lovekuangshen"

2) "kuangshen"

###################################

随机删除key

127.0.0.1:6379> spop myset #随机删除元素

"lovekuangshen"

######################################

smove

127.0.0.1:6379> smove myset myset2 kaugnshen#讲一个指定的值移动到另外一个set集合

(integer) 1

127.0.0.1:6379> smembers myset2

1) "kaugnshen"

##################################################

127.0.0.1:6379> sinter keyl key2 #差集

1) "a"

2) "b"

127.0.0.1:6379> sdiff keyl key2 #交集

1) "e"

2) "d"

3) "c"

127.0.0.1:6379> sunion keyl key2 #并集

1) "a"

2) "b"

3) "c"

4) "e"

5) "r"

6) "d"

2.4Zset

在set的基础上,增加一个值,set k1 v1 zset k1 score1 v1

127.0.0.1:6379> zadd myset 1 one

(integer) 1

127.0.0.1:6379> zadd myset 2 two 3 three

(integer) 2

127.0.0.1:6379> ZRANGE myset 0 -1

1) "one"

2) "two"

3) "three"

127.0.0.1:6379>

#############################################

排序如何实现

127.0.0.1:6379> zadd salary 2500 xiaohong

(integer) 1

127.0.0.1:6379> zadd salary 5000 zhangsan

(integer) 1

127.0.0.1:6379> zadd salary 200 kuangshen

(integer) 1

127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf#从小到大显示

1) "kuangshen"

2) "xiaohong"

3) "zhangsan"

127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf withscores#带着分数显示全部

1) "kuangshen"

2) "200"

3) "xiaohong"

4) "2500"

5) "zhangsan"

6) "5000"

127.0.0.1:6379> zrange salary 0 -1

1) "kuangshen"

2) "xiaohong"

3) "zhangsan"

127.0.0.1:6379> zrem salary xiaohong #移除有序集合的指定元素

(integer) 1

127.0.0.1:6379>

127.0.0.1:6379> zcard salary #获取有序集合中的个数

(integer) 2

127.0.0.1:6379> ZREVRANGE salary 0 -1

1) "zhangsan"

2) "kuangshen"

127.0.0.1:6379> zadd myset 2  world 3 kangshen

(integer) 2

127.0.0.1:6379> zcout myset 1 3#获取指定区间的成员数量

(integer) 3

127.0.0.1:6379> zcount myset 1 2

(integer) 2

2.5Hash

Set myhash

127.0.0.1:6379> hset myhash field1 kaugnshen #set 一个具体key-value

(integer) 1

127.0.0.1:6379> hget myhash field1

"kaugnshen"

127.0.0.1:6379> hmset myhash field1 hello field2 world #set 多个key-value

OK

127.0.0.1:6379> hmget myhash field1 field2 #获取多个字段值

1) "hello"

2) "world"

127.0.0.1:6379> hgetall myhash #获取全部的数据

1) "field1"

2) "hello"

3) "field2"

4) "world"

127.0.0.1:6379> gdel myhash field1 #删除hash指定key字段!对应的value值也就消失了!

(error) ERR unknown command 'gdel', with args beginning with: 'myhash' 'field1'

127.0.0.1:6379> hdel myhash field1

(integer) 1

127.0.0.1:6379> hlen myhash #获取hash表的字段数量

(integer) 1

127.0.0.1:6379> hexists myhash field1 #获取hash表中指定字段是否存在

(integer) 0

127.0.0.1:6379> hkeys myhash #只获取所有field

1) "field2"

127.0.0.1:6379> hvals myhash#只获得所有value

1) "world"

127.0.0.1:6379>

###############################################

Incr decr

127.0.0.1:6379> hset myhash field3 5

(integer) 1

127.0.0.1:6379> hincrby myhash field3 1 #指定增量

(integer) 6

127.0.0.1:6379> hincrby myhash field3 -1

(integer) 5

127.0.0.1:6379> hsetnx myhash field4 hello#如果不存在则可以设置

(integer) 1

127.0.0.1:6379> hsetnx myhash field4 world#如果存在则不能设置

(integer) 0

明天继续更新

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值