Redis学习笔记(一)

一、从启动到基本操作

1.redis服务器启动(指定配置文件):redis-server 配置文件地址

redis客户端启动:redis-cli -a 密码 --raw(-a即授权,后面redis设置的密码,--raw可以解决redis中文乱码的问题)


2.key操作
1)set 键 值(设立键值对)
2)get 键(根据键查找值)
3)keys *(查看当前redis数据库中的所有key)
4)del 键(根据键删除键值对)
5)flushdb(删除当前redis数据库中所有的键值对)
6)flushall(删除redis所有数据库的所有键值对)
7)expire key 秒(设置键值对过期时间)
8)dbsize(查看当前redis数据库的key的数量)
9)select 数据库序列号(切换redis数据库)
10)move 键 数据库序列号(将当前redis数据库中的键所对应的键值对迁移到数据库序列号对应的redis数据库中)
11)type 键(查看键对应的值是什么类型)
12)exists 键(查看键对应的键值对是否存在)
13)ttl 键(查看键对应的键值对还有多久过期,-1为永不过期,-2为已经过期了)


注:
1)ttl即time to live
2)ps -ef|grep redis|grep -v grep
解析:ps -ef即查询所有进程(-ef)并显示其状态(ps),“|”为管道符,将前面命令的输出作为后面命令的输入。grep redis即从前面命令的输出中过滤包含 "redis" 字符串的行(即查找正在运行的 Redis 进程),grep -v grep即从前面命令的输出中排除包含 "grep" 字符串的行,以防止把自身的 grep 进程也显示出来
3)lsof -i:6379 是一个用于查询在本地监听在 6379 端口的进程的命令,它会返回所有在本地监听 6379 端口的进程的详细信息,包括进程 ID(PID)、进程名、用户、协议、本地地址和远程地址等。
解析:lsof即用于显示已打开的文件和网络连接列表的命令,“-i“即用于指定查询网络连接信息,”:6379“用于指定查询特定端口号(这里是 6379)的网络连接信息

 

二、String类型相关介绍与操作

1.help @类型(查看对应类型的命令手册)

 

2.string类型相关操作
1)set k2 v2 exat unix时间戳(秒级):k2的存活时间为设置的unix时间戳减去当前unix时间戳时间的差值
2)set k2 v2 pxat unix时间戳(毫秒级):类比同上
3)若设置了一个键值对的过期时间,我们在这个键值对的过期时间内对该键值对的值等进行修改,则该键值对的过期时间会被默认覆盖为永不过期。若想避免这种情况,我们必须在设置该键值对的值时使用如下命令:(假设存在k1 v1键值对,过期时间60s)
set k1 HelloWorld keepttl
注:keeptll即保留设置前指定键的生存时间
4)mget|mset|msetnx:mget即批量获取多个键的值,mset即批量设置多个键值对,msetnx即批量设置多个键值对(不存在则设置)
用例:mget k1 k2...|mset k1 v1 k2 v2...|msetnx k1 v1 k2 v2...
注:批量处理有事务处理的性质,要么都成功,要么都失败
5)getrange|setrange:获取指定区间范围内的值(类似于substring)
用例:(假设存在k1值为"HelloWorld")getrange k1 0 -1(即取得字符串的全部值),setrange k1 1 xxy即从k1的字符串的第二位开始用xxy字符串进行替换,此时k1的值为"HxxyoWorld"
6)数值增减:(注意,一定要是数字才可以进行加减,假设k1值为100)incr k1 则k1的值变为101 ,decr 则k1的值变成99.incr k1 3则k1值变成103,同理decr k1 3则k1值变成99.
7)strlen k1:则获取键为k1的值的字符串长度,append k1 xxx则为追加xxx字符串在k1键对应的值(字符串值)之后
8)setex k1 10 v1即设置键k1 10s后过期,v1为k1的值(分布式锁)
9)假设有三个微服务向同一个资源发送请求,他们都要经过redis,这时候就涉及了并发问题我们需要设置锁。setnx lock(键) uuid(值)即设置一个锁,谁先在redis设置此命令成功,谁就拥有了对资源的锁(分布式锁)
10)getset k1 v1即先取得k1的值再设置k1的值为v1

 

三、list类型相关介绍与操作

1.list类型单key多values,值可重复,底层是一个双端链表的结构


2.1)lpush|rpush|:用例 lpush|rpush list1 1 2 3 4 5,遍历方式(从list左端开始遍历:lrange list1 0(start) -1(stop)(遍历整个list1),lrange list 0 2即遍历list中第0到第2号位置的数据并显示
注:没有从右端开始遍历list的方法
2)lpop|rpop:从list左端或者右端弹出一个元素,用例:lpop list1
3)lindex list1 0即取得list1中的第一个元素的值(顺序为从左到右)
4)llen list1 即获取list1中元素的个数
5)假设list1中的元素为"1 1 1 2 2 3 4 5",lrem list1 2 1即删除list1中2个1,此时list1中1这个元素只会剩下一个
注:删除对应元素的时是从左到右查找进行删除的
6)假设list1中的元素为"1 1 1 2 2 3 4 5",ltrim list1 0 3即截取list1中下标0到3的子list集合并赋值给list1
7)rpoplpush list1 list2即list1的最右端弹出一个元素并从list2的左端压进
8)lset list1 1 element即将list1中下标为1(从左到右)的元素设置成我们设置的element元素
9)linsert list before|after 已有值v1 插入的值v2:即在list1中,在 v1 之前|之后 插入值v2,其中v1值在list1中已存在
注:list可认为从左到右,也可以认为从上到下。其中,左对应上,右对应下。只是观察的方向不同而已,我个人的观察list的方式喜欢将它平放进行观察而不是竖起来,即从左到右

 

四、哈希类型相关介绍与操作

1.哈希类型结构是复合结构即 键:值,其中值又是一个键值对


2.1)hset user01 id 01 name sekiro age 21可以用面向对象思想理解,这相当于一个对象。user01即对象的名字,id、name、age即对象的属性,他们的属性也被赋予了相应的值01、sekiro、21
2)hget user01 id即取得user01中id键对应的值,以上述user01为例,id对应的值为01
3)hmget user01 id name age即批量取得user01中id、name、age对应的值
4)hgetall user01即哈希类型的遍历,将user01中所有键值对进行遍历(键与值都会遍历出来)
5)hdel user01 id即将user01中键对应为id的键值对删掉
6)hlen user01即获取user01中键值对的个数
7)hexists user01 id即查询user01中是否存在键为id的键值对
8)hkeys|hvals user01即单独罗列出user01中的键集合或值集合
9)hincrby user01 age 1即每次执行这个命令,user01的age键对应的值加1(对整数值加)
10)若user01中含有键值对score 90.5,则hincrbyfloat user01 score 0.5即每次执行这个命令,对应的score键的值加0.5(对小数值加)
11)hsetnx user01 habit music即若user01中不存在键值对habit music则对其添加,否则不添加

 

五、集合类型相关介绍与操作

1.set类型单key多values,值不可重复


2.1)sadd set01 1 1 1 2 2 2 3 4 5即设置集合set01向里面添加有重复的元素,设置后set01会自动去重
2)smembers set01 即遍历集合set01
3)sismember set01 x即判断x元素是否在set01集合中
4)srem set01 element即删除set01集合中值为element的元素
5)scard set01即统计集合set01中的元素
6)srandmember set01 2即随机从set01集合中取出2个元素展现给我们(展现后不操作展示的数据,即不更新展示的数据)
7)spop set01 2即随机弹出去2个set01集合中的元素(展现后操作了展示的数据)
8)smove set01 set02 value即把集合set01中存在的value值(或称元素)搬到集合set02中
注:set无序
9)del set01即删除集合set01


3.集合运算(交集、并集等)
1)差集:例A - B为属于A集合中但不属于B集合中的元素,sdiff set01 set02即属于set01集合中但不属于set02集合中的元素
注:也可以说A集合减去A、B集合的交集
2)并集:sunion set01 set02即将set01集合和set02集合合并并去重
3)交集:sinter set01 set02即集合set01、set02的公共部分
4)sintercard 2 set01 set02即指定2个集合set01、set02,求他们的交集,然后去重交集,最后计算去重后交集中含有元素的个数返回
注:基数即去重以后的数字个数

posted @ 2023-08-01 18:00  苏沐问  阅读(33)  评论(0)    收藏  举报