Redis学习(中阶)

Posted 程序彤

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis学习(中阶)相关的知识,希望对你有一定的参考价值。

nosql作用

1.减少cpu、磁盘io压力,通过从内存中读取数据。

2.作为缓存数据库,减少io读操作。

Redis数据结构应用场景

list:最新的10条稿件

zset:排行榜top10

set:去除大量数据中的重复数据

string:

hash:

zset:排行榜

expire:手机验证码过期

docker部署redis

docker start redis

docker exec -it redis bash

默认端口号6379 Merz

Redis和memcache区别

1.Redis采用单线程+多路IO复用,而memcache采用多线程+锁

Redis命令

string

expire key2 10:设置参数10s后过期

setnx key 20 value:在设置时就设置过期时间

exists key2:存在为1,不存在为0

del key2:删除指定key

unlink key2:先奏后斩型删除

select:切换数据库

dbsize:查看当前数据库有多少个key

flushdb:清空当前库

flushall:通杀全部库

setnx:当set不存在时,才能设置成功。

list

lpush:从左边push值

rpush:从右边push值

lrange key 0 4:遍历

lpop:从左取出list中的值

rpop:从右取出list中的值

set

sadd key9 v1 v2 v3:无序存

smembers key9:取出无序

scard key9:元素个数3

srem key9 v2 v3:删除v2、v3

spop:随机pop

smove:多个set间的操作

hash

hset user01:1001 id 1命令单个存

hmset user02:1001 id 1 name wangrui age 21

hget user01:1001 id:取

hexists user01:1001 id:判断是否1存在,0不存在

hkeys user01:1001:显示全部key

hvals user01:1001:显示全部value

hsetnx user01:1001 age 30 返回0代表不能添加,因为已存在

zset

zadd top1 100 java 200 c 300 python:有序添加

zrange top1 0 -1 withscores:有序遍历

zrangebyscore top1 100 200:遍历分数在100-200的值,若加分数后缀withscores

zrevrangebyscore top1 500 100 withscores:倒序遍历

zincrby/zrem/zcount/zrank

Redis特性

1.redis由于是单线程操作,故是原子操作,不会被线程调度机制打断。

Redis数据结构

string字符串

1.底层数据结构为 简单动态可修改字符串SDS,同ArrayList采用预分配冗余空间来减少内存分配

2.扩容机制:当字符串长度小于1M时,扩容加倍现有的空间。当字符串长度大于1M时,扩容一次只会扩容1M空间。字符串最大长度为512MB。

list列表

1.底层数据结构为quickList(双向链表+ziplist),查询效率较低。

set无序集合

1.string类型的无序集合,底层是v为null的哈希表。增删改查0(1)快。

zset有序集合

1.有序集合,且key不可重复,底层两个数据结构,hash表+跳表(给value排序),

跳跃表:分层,第3层找不到到第二层到第一层。

Hash表

1.key(string)-value(object),适合存储对象,类似hashmap。数据结构,少ziplist+多hash表

新类型1:Bitmaps

对字符串的进行操作, 1个字节8bit位,abc由三个字节组成,分别对应的ASCII码分别是97/98/99,对应的二进制为01100001/01100010和01100011。

新类型2:HyperLogLog

统计网站PageView访问量,可使用incr/incrby实现。但统计uv呢?使用hyperloglog用来做基数计算,基数就是不重复的元素个数。pfadd/pfcount/pfmerge,自动去重处理。

新类型3:Geospatial

经纬度存储运算

geoadd china:city 121.47 31.23 shanghai

geopos china:city shanghai

Redis配置文件

目前的我处于就业阶段,在此想留下一些自己的小思考,小感悟:有的人觉得月入8k就知足,有的人一个月能拿1w块,有的人月入15k觉得存不下钱,有的人凭借自己的努力本科毕业月入20k+,每个人的追求似乎都有所不同,如果你想创业却只能白手起家,如果你也和大多数人一样只是平民出身,如果你不能靠脸吃饭,如果你并非非同常人,如果你想过上你想要的生活,那就只能凭借知识去改变。这里的“想要的生活”,恐怕每个人所想又不太一样。说白了,现在的我,时常很羡慕,时常很知足,又时而很不甘,明白学海无涯,学无止境,追求自己想要的生活也无止境,只要不要让自己原地停留,一直向前走,能多走也不少走就够了叭、

Redis发布和订阅

消息的通信方式

先第一个会话窗口订阅频道,subscribe channel1,然后在另一个会话窗口publish channel1 hello,redis。此时,第一个会话窗口将会收到消息。

Jedis-maven

Jedis基本命令测试

1.maven引入依赖

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.6.3</version>
</dependency>

2.测试jedis-api

Jedis模拟验证码

Redis事务

特性(无acid)

1.单独的隔离性,所有命令序列化按顺序执行,不会被其他客户端发来的命令请求所打断。

2.没有隔离级别,队列中的命令没有exec之前都不会实际被执行,因为事务提交exec前任何命令都不会提前执行。

3.不保证原子性,事务如果有一条命令失败,其余命令仍有可能执行成功。

执行事务命令

命令multi(组队阶段)开始匹配,接下来所有人会进入QUEUED,继而exec(执行阶段)接受。

只要队列中出现一次error,最终exec都将失败,如下:

但如果进入队列潜在不报错的失败,最终exec只会那一个命令失败,如下:

Redis事务乐观锁和悲观锁

定义与场景

悲观锁:每次都上锁。释放锁-上锁-释放锁的一个反复循环的过程

乐观锁场景:抢票(多人抢(读),一人支付(写)。每次都不会上锁,但是在更新的时候会判断再次期间别人有没有去更新这个数据(使用版本号),可提高吞吐量。

redis命令

在执行multi之前,先执行watch k1 v1,可以监视key。如果事务在执行之前这个key被其他命令其他事务所改动,那个这个事务将会被打断终止。unwatch取消事务监视。

以上是关于Redis学习(中阶)的主要内容,如果未能解决你的问题,请参考以下文章

人工智能 AI技术学习路线图 初阶+中阶+高阶

DevOps技术学习路线图 初阶+中阶+高阶

服务器 java后端技术学习路线图 初阶+中阶+高阶

安全技术学习路线图 初阶+中阶+高阶

Web前端技术学习路线图 初阶+中阶+高阶

云原生技术学习路线图 初阶+中阶+高阶