Redis第一弹(1-13集)

本文详细介绍Redis的基础操作、常用命令及应用场景,包括启动配置、压力测试、数据类型操作等,并对比分析了Redis与其他数据库的区别。


(跟着视频课敲一遍代码后总结)

视频课

【狂神说Java】Redis最新超详细版教程通俗易懂_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili

官网

Redis
redis中文官方网站
不会的命令,在中文官网点击命令,进去查。
在这里插入图片描述

redis

解压目录:/opt/redis-6.2.1
拷贝的配置文件位置:/usr/local/bin/kconfig/redis.conf
dump.rdb文件位置:/usr/local/bin
数据目录:数据库的写入会在这个目录。rdb、aof文件也会写在这个目录。可以通过在redis-cli中用config get dir来获得其绝对路径。

redis启动和关闭

# 【shell】启动redis服务
[root@wu1 ~]# /usr/local/bin/redis-server /usr/local/bin/kconfig/redis.conf
[root@wu1 ~]# ps -ef | grep redis	# 这个是狂神说的redis-server启动时
root     11725     1  0 11:26 ?        00:00:00 /usr/local/bin/redis-server 127.0.0.1:6379
root     11778 10486  0 11:26 pts/1    00:00:00 grep --color=auto redis

[root@wu1 ~]# ps -ef | grep redis	# 这个是牛客网的redis-server启动时
redis    15445     1  0 11:59 ?        00:00:00 /usr/bin/redis-server 127.0.0.1:6379
root     15478 15131  0 11:59 pts/3    00:00:00 grep --color=auto redis



# redis客户端连接===> 观察地址的变化,如果连接ok,是直接连上的,redis默认端口号 6379 
[root@192 bin]# redis-cli -p 6379 
127.0.0.1:6379> ping 
PONG 
127.0.0.1:6379> set k1 helloworld 
OK
127.0.0.1:6379> get k1 
"helloworld"

#【shell】ps显示系统当前进程信息 
[root@192 myredis]# ps -ef|grep redis

# 【redis】关闭连接 
127.0.0.1:6379> shutdown 
not connected> exit
[root@wu1 ~]#

#杀死进程
[root@wu1 ~]# ps -ef|grep redis
root     12040 11737  0 12:24 pts/1    00:00:00 redis-cli -p 6379
root     22676 22013  0 15:17 pts/2    00:00:00 grep --color=auto redis
[root@wu1 ~]# kill -9 12040
[root@wu1 ~]# ps -ef|grep redis
root     23180 22013  0 15:26 pts/2    00:00:00 grep --color=auto redis

redis压力测试工具-----Redis-benchmark

# 测试一:100个并发连接,100000个请求,检测host为localhost 端口为6379的redis服务器性能
[root@wu1 ~]# cd /usr/local/bin
[root@wu1 bin]# redis-benchmark -h localhost -p 6379 -c 100 -n 100000

redis有16个库,redis基本命令(dbsize、keys、select、flushdb、flushall)

# 查看 redis.conf ,里面有默认的配置:databases 16。即16个数据库。用0-15访问
# 不同库可以存不同数据

# Dbsize查看当前数据库的key的数量
127.0.0.1:6379> dbsize
(integer) 3

# 查看当前库中所有的key
127.0.0.1:6379> keys *
1) "key:__rand_int__"
2) "name"
3) "counter:__rand_int__"

# Select命令切换数据库
127.0.0.1:6379> select 3
OK
127.0.0.1:6379[3]> 

# Flushdb:清空当前库
127.0.0.1:6379[3]> flushdb
OK
# Flushall:清空全部的库
127.0.0.1:6379[3]> flushall
OK

redis基本命令(exists、move、expire、ttl、type)

# exists key 的名字,判断某个key是否存在 
127.0.0.1:6379> EXISTS name 
(integer) 1 	#1,存在
127.0.0.1:6379> EXISTS name1 
(integer) 0 	#0,不存在

# move key db ---> 当前库就没有了,被移除了 
127.0.0.1:6379> move name 1 	# name和1中间有空格
(integer) 1	#移除成功

# expire key 秒钟:为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除。
# ttl key 查看还有多少秒过期,-1 表示永不过期,-2 表示已过期 
127.0.0.1:6379> set name kuang
OK
127.0.0.1:6379> expire name 10
(integer) 1
127.0.0.1:6379> ttl name
(integer) 6
127.0.0.1:6379> ttl name
(integer) 1
127.0.0.1:6379> ttl name
(integer) -2

# type key 查看你的key是什么类型
127.0.0.1:6379> set name kuang 
OK
127.0.0.1:6379> type name
string

字符串String

# set、get、append、strlen、del

# 追加字符串。如果对不存在的 key 进行 APPEND ,等同于 SET key1 "hello
127.0.0.1:6379> set key1 v1
OK
127.0.0.1:6379> append key1 "hello"
(integer) 7 	# 字符长度
127.0.0.1:6379> get key1
"v1hello"
# 获取字符串的长度
127.0.0.1:6379> strlen key1
(integer) 7 	
127.0.0.1:6379> del key1 # 删除key 
(integer) 1
###########################################################
#incr、dect、incrby、decrby 。
#incr、dect可以用于网页的浏览量+1/-1
127.0.0.1:6379> set views 0
OK
127.0.0.1:6379> get views 
"0"
127.0.0.1:6379> incr views	#自增1
(integer) 1
127.0.0.1:6379> decr views	#自减1
(integer) 0
127.0.0.1:6379> decr views
(integer) -1	#可以减为负数
127.0.0.1:6379> incrby views 10	#+10
(integer) 9
127.0.0.1:6379> decrby views 5	#-10
(integer) 4
#####################################################
# getrange 截取部分字符串。
# setrange 替换
127.0.0.1:6379> set key1 hello
OK
127.0.0.1:6379> getrange key1 0 3	#截取部分字符串,下标从0开始。[0,3]
"hell"
127.0.0.1:6379> getrange key1 0 -1	#得到整个字符串,和"get key"是一样的
"hello"
127.0.0.1:6379> setrange key1 2 xx	#
(integer) 5
127.0.0.1:6379> get key1
"hexxo"

####################################################################
# setex(set with expire)键秒值 # 设置过期时间
# setnx(set if not exist)# 不存在再设置。设置成功返回1,失败返回0。在分布式锁中会常使用。
127.0.0.1:6379> setex key3 30 "hello"	#设置key3的值为“hello”,30秒后过期
OK
127.0.0.1:6379> ttl key3
(integer) 25
127.0.0.1:6379> setnx mykey "redis"	#如果mykey不存在,就创建mykey,返回1
(integer) 1
127.0.0.1:6379> keys *
1) "mykey"
2) "key3"
127.0.0.1:6379> setnx mykey "MongoDB"	#如果mykey存在,就不覆盖,返回0。如果set,即使mykey存在,也会覆盖掉。
(integer) 0
127.0.0.1:6379> get mykey
"redis"
127.0.0.1:6379> ttl key3
(integer) -2

###################################################################
# mset Mset 命令用于同时设置一个或多个 key-value 对。 
# mget Mget 命令返回所有(一个或多个)给定 key 的值。 
# 如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。 
# msetnx 当所有 key 都成功设置,返回 1 。 
# 如果所有给定 key 都设置失败(至少有一个 key 已经存在),那么返回 0 。原子操作
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3	# 同时设置多个值
OK
127.0.0.1:6379> keys *
1) "k2"
2) "k1"
3) "k3"
127.0.0.1:6379> mget k1 k2 k5	# 同时获取多个值
1) "v1"
2) "v2"
3) (nil)
127.0.0.1:6379> msetnx k1 vv k4 v4	# 如果不存在就创建,是一个原子性操作
(integer) 0
127.0.0.1:6379> get k4
(nil)
127.0.0.1:6379> get k1
"v1"

###############################################################
# 存储对象
127.0.0.1:6379> mset user:1:name zhangsan user:1:age 2
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "zhangsan"
2) "2"

###############################################################
# getset(先get再set)
127.0.0.1:6379> getset db mongodb # 没有旧值,返回 nil 
(nil) 
127.0.0.1:6379> get db 
"mongodb" 
127.0.0.1:6379> getset db redis # 返回旧值 mongodb 
"mongodb" 
127.0.0.1:6379> get db 
"redis"

expire name 10给key设置过期时间,可以用于单点登录、热点数据。
单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

其他

一、
redis是单线程。

二、
二进制安全:它只关心二进制化的字符串,不关心字符串的具体格式,里面有啥字符,只会严格的按照二进制的数据存取,不会以某种特殊格式解析字符串。

三、
在这里插入图片描述
命令会有提示,不用担心不记得参数。

四、
redis命令不区分大小写。

127.0.0.1:6379> SET key2 value2
OK

五、
写value时,写字符串的地方加不加双引号都无所谓,因为它会自动识别。

127.0.0.1:6379> set key value
OK
127.0.0.1:6379> set key1 "value1"
OK

六、
list列表
lrem key count element。移除列表key的从左到右数count个element元素。

再其他

分布式和集群

1、分布式:不同的多台服务器上面部署不同的服务模块(工程),他们之间通过Rpc通信和调用,对外提供服务和组内协作。
2、集群:不同的多台服务器上面部署相同的服务模块,通过分布式调度软件进行统一的调度,对外提供服务和访问。

分布式与集群的区别是什么? - 知乎

开源协议

摘自:各种开源协议介绍 | 菜鸟教程
一、
BSD开源协议
BSD开源协议是一个给于使用者很大自由的协议。可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。
BSD代码鼓励代码共享,但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售,因此是对商业集成很友好的协议。
很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。
二、
GPL (GNU General Public License) :GNU通用公共许可协议。
Linux 采用了 GPL。
GPL协议和BSD, Apache Licence等鼓励代码重用的许可很不一样。GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。这也就是为什么我们能用免费的各种linux,包括商业公司的linux和linux上各种各样的由个人,组织,以及商业软件公司开发的免费软件了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值