redis 入门到熟练使用,一篇文章就够了

Redis

基本操作和了解

Redis 默认端口6379 mysql 3306 orcal1521 active 2161

Redis可用作 数据库、缓存、消息中间件。

Tar -zxvf 解压文件

Linux:修改redis-conf 配置文件daemonize为 yes后启动redis后进行后台启动

Windows:安装redis服务redis-server--service-install redis.windows-service.conf --loglevel verbose

启动/停止redis服务 :redis-server --service-start/stop

启动指定的配置文件redis-server --service-start redis.windows-service.conf

Redis-esrver  对应目录的redis.conf 启动对应配置文件的redis服务

Redis-cli -h 对应IP -p  对应端口 连接客户端

Auth password 验证密码

Config get requirepass获取客户端密码

Config set requirepass password 设置客户端密码

Ps -ef|grep redis 查看redis的进程是否开启

Ps -ef|grep 服务名|grep -v grep 查看服务是否启动

Losf -i:端口号 查看服务是否启动

Shutdown->exit 退出redis服务

基本命令:

Redis 不区分大小写命令

Keys *查看所有的key

Select 1 切换数据库,默认有16个数据库,默认使用第0个

DBSIZE 查看当前数据库大小

Flushdb 清空当前数据库

Flushall 清空所有数据库

Exists key 查看某个key是否存在,存在返回1,不存在返回0

Redis 是单线程的!

Redis是基于内存操作的,CPU不是redis的性能瓶颈,redis的性能瓶颈是根据机器的内存和网络的带宽。

为什么redis单线程还这么快? QPS =100000+

Redis是将所有的数据放到内存中的,所以说只用单线程去操作效率就是最高的,用多线程的话,CPU上下文会切换,比较耗时,对于内存系统来说,如果没有上下文切换效率就是最高的,多次读写都是在一个CPU上的,在内存情况下,这个就是最佳方案。

基本数据类型:

Exists key 查看某个key是否存在,存在返回1,不存在返回0

Move key 1 移除某个key到某个数据库,当另一个数据库存在相同的key,移除失败

Exprie key 时间(s)  给key设置过期时间

TTL key 查看key还有多久的存活时间,key存在但是没有设置过期时间返回-1,key不存在返回-2

Type key 查看key的数据类型

String

Set key val

Get key

Exixts key

Append key val 对该key进行数据的追加,返回key的长度,key不存在就相当于set key

Strlen key 获取key的长度

Incr key 让key加1,返回当前值

Incrby key 步长 让key增加步长

Decr 让key减1

Decrby key 步长 让key减步长

Getrange key start end 截取字符串,end =-1时,查看全部的字符串

Setrange key index val 替换指定位置的字符串

Setex key 过期时间 val 设置值和过期时间

Setnx key val 如果不存在,创建成功,如果存在,创建失败返回0

Mset k1 v1 k2 v2 ... 批量设置值

Mget k1 k2 批量获取值

Msetnx k1 v1 k2 v2 设置多个值,原子性操作

Mset user:1:name xuehao user:1age 18

Mget user:1:name uer:1:age

Getset key val 如果存在值。获取原来的值,并设置新的值,如果不存在,则返回null ,并设置新的值

String 类似的使用场景:

1 计数器

2 统计数量

3 对象缓存存储

List

在redis中,我们可以把list当作一个栈,队列,阻塞队列。

所有的list命令都是L开头。

Lpush list val 向队列里面塞值,一个或多个  头插法

Lpushx list val 如果list存在,插入值,不存在忽略

Rpush list val 向队列里面塞值,一个或者多个,尾插法

Rpushx list val 如果list存在,插入值,不存在忽略

Lrange list 0 -1 获取队列的所有值

Lrange list  5 6 获取list中某个指定的值。

Lpop 移除并获取list的第一个值

Rpop 移除并获取list的最后一个值

LIndex list index 获取list的第几个值

Llen list 获取list 的长度

 lrem mylist 0 "value"    从mylist中删除全部等值value的元素   0为全部,-1为从尾部开始,删除一个,1为头部开始,删除一个。

lset mylist index "del"
lrem mylist 0 "del"  命令里没有根据index删除元素的命令,如果想要删除指定index的值

Lrem list start end 截取指定长度的list 并赋值给当前key

Rpoplpush 移除最后一个元素,并移动到一个新的list中

Lset list index val 更新某个指定下标的值,如果不存在list,会报错,长度不够,也会报错

Exists list 判断一个列表是否存在

Linsert list before/after “具体字符” val 向list中某个字符的前后插入值

使用场景:

消息队列(lpush,rpop),可以当作栈(lpush,lpop)

Set

Sadd key val  向set中添加元素

Smembers setKey查看set的所有值

Sismember setKey val 判断val是否包含在set中

Scard key 查看set中包含元素的个数

Srem key val 移除set中的某个元素

Srandmember key 随机获取set中的一个元素

Spop key 随机移除set中的一个元素并返回

Smove set1 set2 val 将set1 中的val移动到set2中

Sdiff set1 set2 取set1存在 ,在set2不存在的所有元素

Sinter set1 set2 取两个集合的交集

Sunion set1 set2 取两个集合的并集

使用场景:

使用set的交集可用作共同好友,共同关注

Zset(有序集合)

Zadd key score val 添加一个值

Zadd key score 1 val scord val2 添加多个值

Zrange key 0 -1 查看所有元素

Zrangebyscore key -inf +inf 按照score排序,负无穷到正无穷

Zrevrange key 0 -1 从大到小进行排序

Zrem key val 移除一个元素

Zcard key 查看集合的大小

Zcount key start end 判断一个区间内有几个值

使用场景:

1 成绩排序,

2 普通消息 1 加权消息2

3 排行榜

Hash(哈希)

Hset key field val 创建一个hashKeY

Hget key field  获取hash的某个属性

Hmset key field val field val

Hmget key field field2

Hgetall key 查看key所有的val

Hgetdel key field 删除key的某个field

Hlen key 查看key中有几个键值对

Hexists key field  判断hashkey的某个field是否存在

Hkeys key 获取该key所有的field

Hvals key 获取该key所有的val

Hincrby key field 步长 给hashkey的某个field增加步长

Hdecrby key field 步长 给hashkey的某个field减少步长

Hsetnx key field val 不存在则创建 存在则创建失败

Geospatial(地理空间)

可以根据经纬度推算两地之间的距离,方圆附近的人

有效的经度在-180  +180之间

有效的纬度在-85   +85之间

两极不可添加

Geoadd key 经度 炜度 城市 添加一个城市的地理位置到key中

Geodist key 城市一 城市二 单位 获取两个城市的距离

Geohash 返回11个字符的geohashc字符串,将二维的经纬度转换成一位的字符串,如果两个字符串越接近,距离越近

Geopos key 城市 获取一个城市的经度和纬度

Georadius key 经度 维度 半径 单位 withdist(距离)/withcoord(经纬度)count num 以给定的精度和纬度为中心,找到某一个半径内的值

Georadiusbymember key 城市 半径 单位 找出位于指定元素周围的其他元素

Geo底层的实现原理就是zset,可以用zset命令来操作geo

Bitmap

位存储 0 0 0 1 1 1

统计打卡天数 用户状态   

只有两个状态的都可以使用bitmaps

Setbit key  num  0/1

Getbit key num

Bitcount key

Hyperloglogs

基数统计,可以用来统计网页的UV(用户量)

Pfadd key element 添加元素到集合中

Pfcount key 查看集合大小

Pfmerge key1 key2 key3 将2和3的数据放入到1中

事务

redis 事务本质:一组命令的集合!一个事务中的所有命令都会被序列化,在事务执行过程中,会按照顺序执行!一次性,顺序性,排他性,执行这些命令。

Redis 事务没有隔离级别的概念!

所有命令在事务中,并没有直接被执行!只有发起执行命令的时候才会执行。 Exec

Redis单条命令是保存原子性的,但是事务不保证原子性。

redis事务:

1 开启事务 multi

2 命令入队

3 执行事务 exec

Discard 放弃事务

编译型异常,命令语句有问题,事务中的所有命令都不执行。

运行时异常,如果事务队列中存在语法性,,那么执行命令的时候,其他命令是可以执行的,错误命令抛出异常。

监控(Watch)

悲观锁:

很悲观,什么时候都会出问题,无论做什么都加锁。

乐观锁:

很乐观,认为什么时候都不会出问题,所以不会上锁,只有在更新数据的时候去判断一下,再次期间是否有人修改这个数据。

获取version

更新的时候比较version

Watch key  unwatch key

多线程修改值,使用watch当作redis的乐观锁操作。

Jedis

Jedis 是官方推荐的java连接开发工具。使用java操作redis的中间件。

持久化

RDB AOF 自行觉悟。

Aof 优缺点:

每次修改都会同步,文件的完整性会更好。

每秒同步一次,可能会丢失疫苗的数据。

从不同不,效率最高,这个时候操作系统自己同步数据。

缺点:相当于数据文件来说,aof的文件远远大于rdb,修复的数据也比rdb慢。

Aof的运行效率也比rdb效率慢,因为aof是io操作。

RDB优缺点:

比较适合做大数据量的恢复;

对数据完整性要求不高

缺点:需要一定的时间间隔进行操作,如果redis意外挂了,那最后一次的数据就没了。

Fork一条进程的时候会占用一定的内存空间。

  • 3
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值