一、docker环境中安装redis
首先先查询
docker search redis
这里可以看到查到了很多版本
接着进行拉取,我们选择stars最多的那个,通常就是官方版本
docker pull redis
拉取成功
然后就可以在镜像里面查看了
docker image ls
然后我们就创建一个含redis的集装箱,使用run语句,这里就要用个简单的语句即可
docker run -it --name redis_6379 -p 6379:6379 -d redis
创建成功
然后我们进入redis
redis -cli
接着再输入ping。如果返回pong那么就说明redis可以成功运行了
ping
然后我们可以使用redis自带的压力测试,第一个测试是不带管子的,第二个测试带管子,可以看到效率提高了四十倍有余
这里是我一开始指令输入错了,但是没关系,ctrl+c退出即可继续输入
一切就绪后,进入redis即可开始使用
二、redis数据类型
字符串String
set命令
set key value
set+key名儿+key的值
这里可以看出给一个string类型的fruit设两次值,第二次的会自动覆盖第一次
get命令
mget命令
mget key1 key2 ...
strlen命令
strlen key
这个指令可以看字符串的长度
incr key指令
让数字增,注意这里的数字只能是Integer整型
然后就是新建数字时候可以不加双引号会自动识别
decr指令
同理,让Integer型的value值减一
setnx 指令
这个指令比较关键,生效原理可以这样理解,setnx的key若之前未定义,则会成功把value赋给key,若key已经有值了,就无法去修改key的值(在上文的set指令中我们已经知道redis中的添加指令也可作修改指令使用)
那么,基于此特性,我们就可以进行一些应用,试想如下场景:
倘若一个人在执行一个decr指令操作的过程中(但是操作还未完成),另一个人也进来执行此操作,那么就会出现数据冲突等问题,如何解决这个问题呢?一个常用的办法就是,第一个人在执行操作时加一个标记,其他人想要进行此操作时先查看是否有人正在执行,如果仍有人执行那么就等会儿再来操作,而setnx就可以帮助我们实现这个办法:
流程大概是有100本书:第一个人来买书,并且设定好set的锁子标记,然后买完后删掉此标记即可,别人就可以进来买了,这里有用到expire指令,这个相当于定时炸弹,顶了十秒钟,到点儿后会炸掉这个key和value,不过用在这里其实有点儿早,因为目前还不清楚用什么方法可以在wn_lock 这个key被清除的同时把执行操作的人强制踢出去。
列表list
lpush指令/rpush指令
通俗来讲lpush 是往整个列表左边添加,rpush是往整个列表右边添加
lpop key
通俗来说就是删掉列表最左边的元素并打印出来删掉的元素
rpop key
同理,不过删的是右边并显示
lrange key start end
1、右边越界了也没关系
2、左边从零开始,想要元素2就输入元素1
3、从左往右排
lrem 指令
lrem key count value
这个指令详细说说
count有三种情况 先说=0:表示将count后面跟的value值全删了(因为列表中的元素可以重复)
<0 比如说-2,那就是最多删两个(如果列表本身就一个2那就删一个,多余两个2就删掉2个),删除的顺序从右往左
大于0 比如说2,从左往右删
集合set
sadd命令
哪怕输入的重复了最终集合也不重复,而且还会自动排序
scard key
查询语句返回的是数量
smembres key
查询语句返回所有成员
sismember key value
查集合中是否含有某个成员
有1无0
spop key
随机删掉了成员,可以发现随机没有那么随机,左右不确定,但是像剥洋葱从外往里一点点删 开始的我是这个结论
但是多操作几个后就发现确实是随机删除
删多个的话就是随机删了
有序集合 sorted set
可以理解为和普通set的区别就是给value多了个分数score
分数在左value在右,然后查表时它也有包容性 zrangebyscore stus 0 100也能查出想要的结果
哈希表 hash
这个以后会常用