Redis入门以及五大基本数据类型概述

Redis入门

概述

Redis是什么

Redis(Remote Dictionary Server),远程字典服务

是一个免费、开源的C语言编写的、支持网络、基于内存的可持久化的日志型Key—Value数据库

是当下最热门的NoSQL技术,也称为结构化数据库

Redis能干嘛

1.内存存储,持久化,内存中是断电丢失的,所以持久化是很重要的(RDB,AOF)

2.效率高,用于高速缓存

3.发布订阅系统

4.地图信息分析

5.计数器等(浏览量)

特性

1.支持多种数据类型

2.集群

3.事务

4.支持多种语言接口

5.持久化

基础知识

redis默认有16个数据库,默认的是第0个数据库

select n选择第n个数据库(0-15)

dbsize查看当前数据库大小

keys * 查看所有key

flushdb 清空当前数据库

flushall 清空全部数据库

Redis是单线程的

Redis是很快的,Redis是基于内存操作,CPU不是Redis的性能瓶颈,Redis的瓶颈是机器的内存和网络的带宽,既然可以使用单线程实现,就使用单线程

Redis为什么单线程还这么快

Redis是C语言写的,官网提供的数据为每秒10万+的QPS,完全不比Memecache差

误区1:高性能的服务器都是多线程的

误区2:多线程(CPU上下文会切换)一定比单线程效率高

CPU速度>内存>硬盘

核心 :redis是将所有数据全部放在内存中的,所以单线程操作效率就是最高的,对于内存系统来说,如果没有上下文切换,效率就是最高的!多次读写都是在一个CPU上,在内存情况下,这个就是最佳方案

Redis 五大基本数据类型

Redis-Key

set key value 设置对应的键值

get key 得到key对应的value

exists key 查询是否存在key

move key db 移动对应的key到第db个数据库

expire key time 设置key 的自动过期时间 time秒

ttl key 查询key的剩余存活时间

type key 查看当前key的类型

Redis中文网有详尽的命令

String 字符串类型

append key value 在key的字符串后追加value字符串,如果key不存在,则新建一个key

strlen key 获取key对应value字符串的长度

incr key key对应value+1

decr key key对应value-1

incrby key increment key对应value增长increment步长

decrby key decrement key对应value减少decrement步长

getrange key start end 截取字符串[start end]

setrange key offset value 将偏移量为offset处的值替换为value

setex (set with expire 设置过期时间)

setnx (set if not exist)如果不存在再设置,存在则创建失败

mset 批量设置k-v,空格分隔即可

mget 批量获取

msetnx 如果不存在则创建(原子操作,一个失败则所有都失败)

进阶

set/mset user : 1 {name:zhangsan ,age:3} 设置一个user:1对象,值为Json字符串来保存一个对象

getset 先get再set,返回旧值,设置新值

String类型的使用场景:value可以是字符串也可以是数字

​ 1.计数器

​ 2.统计多单位的数量 uid:851457617:follow 0

​ 3.粉丝数

​ 4.对象缓存存储

List类型

在redis里,List可以用成栈和队列、阻塞队列

lpush 将一个或多个值插入到列表的头部

lrange 从头部范围取值

rpush 将一个或多个值插入到列表的尾部

lpop 移除列表头部元素

rpop 移除列表尾部元素

lindex 通过下标获取list中的值

llen 返回列表的长度

lrem 移除指定的一个或多个key

ltrim 通过下标截取指定的长度

rpoplpush source des 移除列表的最后一个元素,并加入新的列表

lset 将列表中指定下标的值替换为另外的值

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

小结

​ list实际上是个链表,before after left right都可以插入值

​ 如果key不存在,创建新的链表

​ key存在,新增内容

​ 如果移除所有元素,则链表不存在

​ 在两端操作效率最高,中间元素相对来说效率会低一点

消息排队!消息队列 Lpush Rpop

! 栈 Lpush Lpop

Set类型

set中的key是不重复、无序的

sadd 向集合中添加元素

smembers 查看所有元素

sismember 判断是否是集合的元素

scard 获取set集合中的元素个数

srem 移除对应元素

srandmember 随机抽出指定个数的元素 默认1

spop 随机删除指定个数的元素 默认1

smove 将一个指定的值,从一个集合移动到另一个set

案例

​ 微博、B站的共同关注(交集)

数字集合类:

差集 :sdiff

交集 :sinter 共同好友可以如此实现

并集 :sunion

Hash

Map集合,key-Map集合,本质和String类没有太大区别

hset 添加一个具体的key-value

hget 获取对应集合对应字段的字

hmset 批量设置key-value

hmget 批量获取字段值

hgetall 获取全部的数据

hdel 删除hash指定key字段

hlen 获取集合中键值对的个数

hexists 判断hash中是否存在指定字段

hkeys 获取所有key

hvals 获取所有的value

hincrby 指定增量

hsetnx 如果不存在 则可以设置,存在则不设置

案例

hash变更的数据 user name age.用户信息的保存等,更适合对象的存储,String更适合字符串存储

Zset(有序集合)

在set基础上增加了一个值

zadd 添加一个或多个值

zrangebyscore 按照score进行排序 递增

zrevrangebyscore 按照score进行排序 递减

zrem 移除对应元素

zcard 查询元素数量

zcount 查询对应区间的元素数量

其余API通过redis官网查询

案例 : set排序,班级成绩排序,工资表排序

​ 权重消息,排行榜

posted @ 2020-06-17 16:16  dwwzone  阅读(190)  评论(0编辑  收藏  举报