redis是一个高性能的key-value数据库,它是完全开源免费的,而且redis是一个NOSQL类型数据库,是为了解决高并发、高扩展,大数据存储等一系列的问题而产生的数据库解决方案,是一个非关系型的数据库。但是,它也是不能替代关系型数据库,只能作为特定环境下的扩充。
Redis默认有16个数据库
默认使用的是第0个数据库
端口号 默认6379
可以使用select 数字来切换数据库
DBSIZE 查看DB大小
keys * 查看数据库所有的key
flushdb 清空当前数据库
FLUSHALL 清空所有数据库
set name 1111
get name
111
Redis是单线程的 且速度非常快 基于内存操作 CPU不是Redis的性能瓶颈
Redis的性能瓶颈是根据机器的内存和网络带宽决定的
Redis为什么是单线程速度还是这么快?
Redis是c语言编写的 100000+的QPS 不比同样是key - value的Memecache差
Redis是把所有的数据放在内存中,所以用单线程去操作效率是最高的,多线程(CPU上下文切换 会有耗时) 对于内存系统来说 如果没有上下文切换最快。
Redis-key
启动服务 redis-serve kconfig/redis-config
测试连接
EXISTS name 判断键key是否存在
move name 1 移除当前的key
设置过期时间 EXPIRE name 10 设置key的过期时间 10秒钟自动过期 tt1 name 查看key的剩余时间
clear清理界面
type name 查看key的类型
Redis主要有5种数据类型,包括String,List,Set,Zset,Hash,满足大部分的使用要求
数据类型可以存储的值操作应用场景STRING字符串、整数或者浮点数对整个字符串或者字符串的其中一部分执行操作对整数和浮点数执行自增或者自减操作做简单的键值对缓存LIST列表从两端压入或者弹出元素对单个或者多个元素进行修剪,只保留一个范围内的元素存储一些列表型的数据结构,类似粉丝列表、文章的评论列表之类的数据SET无序集合添加、获取、移除单个元素检查一个元素是否存在于集合中计算交集、并集、差集从集合里面随机获取元素交集、并集、差集的操作,比如交集,可以把两个人的粉丝列表整一个交集HASH包含键值对的无序散列表添加、获取、移除单个键值对获取所有键值对检查某个键是否存在结构化的数据,比如一个对象ZSET有序集合添加、获取、删除元素根据分值范围或者成员来获取元素计算一个键的排名去重但可以排序,如获取排名前几名的用户内部结构使用SDS保存 类似与java中的ArrayList
常用场景:缓存功能 计数器 共享用户Session
APPEND key1 “11” 给key1追加字符串(如果没有这个key 就相当于set key)
key * 获得所以的key
EXISTS key1 判断某一个key是否存在
截取字符串STRLEN key 获取字符串长度
实现i++操作
set views 0
incr views +1操作
decr views -1操作
INCRBY views 10 +10操作
DECRBY views 10 -10操作
常用场景:粉丝列表 文章评论
可以从两端取出或压入数据 可以实现 队列 栈
LPUSH list one 将一个值或者多个值 放入列表的头部 从左边放进去
LPUSH list two
LPUSH list three
LRANGE list 0 -1 获取list全部的值
LRANGE list 0 1 获取0到1的值 获得的是 three two
RPUSH 将一个值或者多个值 放入列表的尾部 从右边放进去
移除左边第一个值 Lpop list 移除右边第一个值 Rpop list
lindex list 1获取下标为1的值
Llen list 返回列表的长度
移除特定的值
Lrem list 1 one 移除list列表其中的一个one 精准配备
自动去重 直接基于 Set 将系统里需要去重的数据扔进去,自动就给去重了
sadd myset “hello” 添加一个set无序集合 添加一个hello值
SMEMBERS myset 查看指定set的所有的值
ISMEMBER myset world 判断一个值是不是在set集合中
scard myset 查看set里面的元素个数
srem myset hello 移除hello元素
SRANDMEMBER myset 随机得到一个set里面的元素 可以在后面加数字获得的是随机的数字
spop myset 随机移除元素
包含键值对的无序散列表 本质和String没有太大区别 区别就是value变成了value)
key map
hset myhash field name新建一个hash 存放一个key vaule的值
hset myhash field name field1 name2 新增两个key value
hget myhash field 取得值
hget myhash field field2 取得2个键的值
hgetall myhash 查看所有的值
hdel myhash filed1 删除hash指定的key字段 对应的value也删除了
hgetall myhash 获得全部的值
hlen myhash 查看hash长度
HEXISTS myhash field1 判断hash中指定字段是否存在
只获得key hkeys myhash
只获取value hvals myhash
在set的基础上 增加了一个值
zadd myset 1 one
zadd myset 2 two 3 three 添加数据 前面的数字为序号
ZRANGE myset 0 -1 获取全部的值
ZRANGEBYSCORE salary -inf +inf按成绩排序 从最小到最大
ZRANGEBYSCORE salary -inf +inf withscores 按成绩排序 从最小到最大 同时输出成绩
ZRANGEBYSCORE salary -inf 2500 withscores 显示小于2500员工的升序排序
移除元素
zrange salary 0 -1 打印全部
zrem salart 小红 移除小红
geospatial 地理位置
Hyperloglog基数统计
Bitmap位图场景详解