redis


sql历史

1.单机Mysql的年代
2.Memcached(缓存)+Mysql+垂直拆分
3.分库分表+水平拆分+Mysql集群

Nosql与Sql

关系型数据库:表格,行,列。
非关系型数据库,键值对存储,文档存储,列存储,图形数据库存储,没有固定的查询语言,满足最终一致性。
在这里插入图片描述

redis(Remote Dictionary Server)—远程字典服务

redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
官方测试:读的速度110000次/s,写的速度是81000次/s

特型:
1.多样的数据类型。
2.持久化
3.集群
4.事务

windows版本的安装

1.下载安装包:https://github.com/dmajkic/redis/releases
2.下载完毕得到压缩包,后解压
3.点击redis-server,点击redis-cli即可操作

redis的安装及配置

1.下载linux安装包
https://redis.io/
后下载即可在这里插入图片描述
2.解压后一般放在/opt目录下
opt目录主要存放可选的程序。想删掉程序的时候,你就可 以直接删除它,而不影响系统其他任何设置。安装到/opt目录下的程序,它所有的数据、库文件等等都是放在同个目录下面。

3.进入解压后的文件,可以看到redis的配置文件

4.基本环境安装

yum install gcc

make

make install//确认是否安装

redis的默认安装路径:usr/local/bin

5.将redis配置文件redis.conf拷贝到usr/local/bin的目录下,以后只需要用此配置文件就看启动,确保原生配置安全。

6.redis默认不是后台启动,修改配置文件,进入redis.conf,改这个为yes

在这里插入图片描述
7.启动redis服务
在/usr/local/bin目录下输入linux命令

redis-server 文件名/redis.conf
redis-cli -p 6379
ping

如打印出pong则连接成功,可继续继续操作。/

查询redis进程信息。

ps -ef|grep redis

关闭redis连接
在这里插入图片描述
测试性能

redis-benchmark是一个压力测试工具
命令参数如下
在这里插入图片描述
如:

lis-benchmark -h localhost -p 6379 -c 100 -n 100000

Redis基础知识

多线程(cpu上下文会切换)不一定比单线程效率高
对redis来说,redis是单线程的,但是速度极快,redis是将数据全部放在内存中的,所以用单线程去操作效率就是最高的,对内存系统来说,如果没有上下文切换效率就是最高的,多次读写都是在一个cpu上。

redis一共16个数据库,默认存在第0个里面,
select 指切换数据库,
dbsize指查看现存数据大小,
set name xia,存入数据,
get name 读数据,
key *查看所有数据,
flushdb清空当前库,
flushall清空所有数据库,
exists name判断name是否存在,
move name 1指从当前库移除,
expire name 10设置name过期时间为10s,
ttl name值查看当前剩余时间,
type name查看name的类型。

string 类

append name hello,在name后追加hallo字符串(如果当前name不存在,就相当于set name)。
strlen name获取字符串长度。
incr i,相当于i++,
decr i,相当于i–;
incrby i 10,一次增加10,
decrby i 10,一次减少10。
getrange name 0 3(闭区间)截取name中0到3的字符串。
getrange name 0 -1和get name含义相同。
setrange name 1 xx,修改如neme为hello,则为hxxlo。
setex key2 30 hello,设置30s过期。
setnx如果值已经存在则设置会失败。
mset k1 hello k2 hello2 k3 hello3批量设置。
msetnx,其中如果有一个失败则全失败,一起成功,一起失败。
在这里插入图片描述
在这里插入图片描述
getset先get再set。

list类

里面的值可以重复
所有的list命令都是l开头的
lpush从左边放值,
rpush从右边放值,
lrange list 0 -1。也可以通过区间获取具体值。
lpop左边移除rpop右边移除。
lindex list 0获取list的第一个值,通过下标获取值
llen list查看list中多少元素。
lrem list 1 one 从左到右移除一个值为one的元素。
ltrim list 0 1只保留0,1两个元素。
rpoplpush list list1移list表中最后一个元素到list1中去。
lset list 0 item将列表中指定下标的值替换成另外一个值,要求值开始必须存在。
linsert list before two one在two前插入one,还有after在其后插入。

set类

set中的值不能重复。
sadd myset hello往myset中添加hello元素。
smembers myset查看myset中所有值。
sismember myset hello判断hello是不是myset里面的元素。
scard myset获取myset中的元素个数。
srem myset hello移除myset中指定的元素。
srandmember myset获取myset中随机一个元素值。
spop myset随机删除(弹出)一个元素。
smove myset myset1 hello移动myset中指定元素到myset1中。
sdiff myset myset1找两集合中不同的元素(只显示第一个集合中有第二个集合中没有的值)。
sinter myset myset1查找共同的元素。
sunion myset myset1查找两集合中所有的元素(不重复)。

hash(key-value类型)(相当于key-

hset myhash name xia存值。
hget myhash name取值。
hmset myhash name value1 name1 value2同时设置多个值。
hmget myhash name name同时提取多个值。
hgetall myhash获取myhash中全部的数据。
hdel myhash name删除myhash中的指定值。
hlen myhash查看当前myhash中字段数量。
hexists myhash name1判断myhash中是否存在name1。
hkeys myhash只获取myhash中所有key。
hvals myhash只获取myhash中所有value。
hincrby myhash name 1自增1(hdecrby,hincr等不可实现)。
hsetnx myhash name value如果不存在则可设置。

zset(有序集合)

zadd salary 2000 one 1000 two给定一个序号(序号可以重复)方便操作。
zrangebyscore salary -inf +inf从负无穷到正无穷按照salary排序,只能从小到大。
zrem salary one移除元素。
zrange salary 0 -1查找所有元素。
zcard salary获取元素个数。
zcount salary 100 1000获取指定区间的成员数量。

geospatial(可以zset操作)

添加地理位置(两级无法添加)。

geadd china:city  114.05 22.52 shanghai

获取当前定位(经度和纬度)

geopos china:city shanghai

查询两个位置之间的距离(默认单位是米,可以自己设置,单位有m(米),km(千米),mi(英里),ft(英尺)。

geodist china:city shenghai xian km

以给定的经纬度为中心,找出某一半径内的元素。

georadius china:city 110 30 1000 km

找出指定元素周围的其他元素。

georadiusbymember china:city xian 1000 km

返回11个字符的geohash字符串,字符串越相似代表距离越接近。

geohash china:city xian

Hyperloglog(基数统计)(允许容错时使用)

基数(不重复的元素),hyperloglog当数字过多时可以接受误差。
在这里插入图片描述
放入元素

pfadd mykey a b c d e f g h i j

统计数目

pfcount mykey

合并mykey,mykey1为mykey3

pfmerge mykey3 mykey mykey1

Bitmap(位存储)

只有两个状态的时候使用

设置第三天时状态为1,第四天时状态为0

setbit sign 3 1
setbit sign 4 0

查看第三天状态

getbit sign 3

统计状态为1的总天数

bitcount sign

事务

redis是单线程的,redis瓶颈是根据机器的内存和网络带宽。
事务本质:一组命令的集合
redis单条命令保证原子性(要么同时成功,要么同时失败)的,但是事务不保证原子性。具有一次性,顺序性,排他性。
redis事务没有隔离级别的概念,只有发起执行命令的时候才会执行。

redis的事务:
1.开启事务(multi)
2.命令入队(…)
3.执行事务(exec)(执行完后事务就结束)
4.放弃事务(discard)(一旦放弃,事务都不会被执行)
在这里插入图片描述
编译型异常(代码有问题,命令有错),事务中所有命令不会执行。
在这里插入图片描述

运行时异常(如1/0),其他命令可以执行,错误命令抛出异常。
在这里插入图片描述

监控(事物执行成功,监控自动取消)

1.悲观锁:很悲观,认为什么时候都会出问题,无论做什么都会加锁。(效率很低)
2.乐观锁:很乐观,认为什么时候都不会出问题,所以不会上锁。更新数据的时候去判断一下在此期间是否有人修改过这个数据(用version版本号表示)。
3.
在这里插入图片描述
事务执行失败,先解锁,unwatch解锁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值