目录
5.1.4 清空当前数据库所有key
6.1.0 字符串中的数字增长,减少 就是 【i++】和【i--】
6.1.1 字符串中的数字指定一次增长多少,指定一次减少多少
8.2.2 获取连个集合中的所有元素,并将相同元素合并成一个(并集)
1. 了解3V和3高
大数据时代的3v: 主要描述问题的
1. 海量 Volume 海量的数据需要存储
2. 多样 Variety 存储的东西不同(聊天信息,视频信息,位置信息)
3. 实时 Velocity 直播的消息需要实时
大数据时代的3高:主要是对程序的要求
1. 高并发
2. 高拓展
3. 高性能
2.什么是redis
redis是远程字典服务,Redis 是一个开源的,使用 C 语言编写的,基于内存的键值对数据库,可以用作非关系型(NoSQL)的数据结构存储系统,缓存和消息中间件
数据库的本质:一个是读取数据,一个是写入数据,而redis就是解决读取数据的弊端
网站80%都是在读取数据,每次访问都要查询数据库的话就十分麻烦,如果访问量较大,那么查询数据库的速度会变的非常慢,这么多个请求就是高并发,这时候就需要缓存来解决高并发
为什么要使用redis:
redis理解成缓存,当我们第一次访问的时候,先查询数据库,在将查询的数据放入缓存中,下次访问的时候就不需要在从数据库查询数据,而是直接从缓存中获取数据,这样解决了数据库的负担
使用redis的好处:
Redis 是一个内存数据库,速度非常快,适合作为缓存来缓解数据库的压力。具体来说,使用 Redis 作为缓存的过程如下:
第一次访问:
- 用户请求数据。
- 应用程序查询数据库,获取数据。
- 将获取的数据存储在 Redis 缓存中。
- 将数据返回给用户。
后续访问:
- 用户再次请求相同的数据。
- 应用程序首先检查 Redis 缓存中是否有该数据。
- 如果缓存中有数据,直接从缓存中获取并返回给用户。
- 如果缓存中没有数据,再查询数据库,将查询到的数据存储在缓存中,以备下次使用。
通过这种方式,Redis 缓存可以显著减少对数据库的直接查询,提升网站的整体性能和响应速度。
3. redis可以做什么
1. 内存存储数据,持久化数据:
内存是中是断电即失,所以持久化很重要(rdb,aof机制)
2. 效率高,可以用于告诉缓存
3. 可以发布订阅系统
4. 地图信息分析
5. 计时器,计数器(浏览量)
4. Windows安装
下载地址:
https://github.com/tporadowski/redis/releases
redis中文文档:
3.1
下载安装包,并解压
3.2
打开解压后的文件夹,并启动redis服务
启动成功界面:
3.3
使用redis客户端连接reids,redis服务一定是要开启的
5. 使用redis客户端操作redis
redis默认有16个数据库,不同的数据库存放不同的数据
5.1 redis基本命令
5.1.1 切换数据库
命令: select 数字
1.切换到第几个数据库
2.我们默认使用的是第0个数据库(0到15个数据库)
5.1.2 查看当前数据库的大小
命令: dbsize
1.查看当前数据库的使用的大小
2.如果我往数据库增加一个key,这个时候大小就为1,如果增加多个key则为你有几个字段大小就是几
3.数据库的大小是和key的多少来决定的
设置两个key,在查看数据库的大小
5.1.3 查看当前数据库所有的key
命令: keys *
1.查看当前数据库所有的key
5.1.4 清空当前数据库所有key
命令: flushdb
1.清空当前数据库所有key
5.1.5 清空所有数据库所有key
命令: flushall
1.清空所有(0到第15个)数据库所有的key
5.1.6 判断key是否存在当前数据库
命令: exists key名
1.如果key存在当前的数据库则返回1,如果key不存在当前的数据库则返回0
5.1.7 移动key到指定数据库
命令: move key名 第几个数据库
1.移动当前数据库存在的key,移动指定的数据库中,移动成功返回1
5.1.8 设置key的过期时间
命令: expire key名 过期秒数
1. 设置当前数据库存在的key的过期时间,过期之后返回-2
查看key还有几秒过期
命令: ttl key名
1. 查看key过期的时间,过期会返回-2秒
5.1.9 查看key的类型
命令: type key名
1. 查看key对应的类型
5.2.0 指定key追加值
命令: append key名 追加的值
1.在指定的key值中继续追加上值
5.2.1 删除指定的key
命令: del key名
1. 删除指定的key
5.2.2 获取字符串key的长度
命令: strlen key名
1.获取你设置key值字符串的长度
记住一些常用的命令就ok,如果需要其他命令去官网找
6. 五大数据类型
6.1 String(字符串)
6.1.0 字符串中的数字增长,减少 就是 【i++】和【i--】
命令: incr key名
1.相当于循环中的i++操作,自身加1,每次执行此命令都加1,注意设置的key值必须是整数类型
命令: decr key名1. 跟上面相反,这个是循环的 i-- 操作,自身减1,每次执行命令都减1
i++ :
i -- :
6.1.1 字符串中的数字指定一次增长多少,指定一次减少多少
命令: incrby key名 增长多少的数字
1. 指定本身增长多少
命令: decrby key名 减少多少的数字
1. 指定本身减少多少
6.1.2 截取字符串某个范围之间的值
命令: getrange kye名 截取开始的下标 截取结束的下标
1.可以获取字符串的范围值,下标从0开始
2.getrange key名 0 -1,如果结束的下标为-1那么就直接拿到所有的字符串
这里写错了,下标是从0开始,h对应的下标是0
6.1.3 将某一个范围的值替换成新值
命令: setrange key名 从那里开始替换的下标 替换的值
1.将一个字符串某一个范围替换成指定值
6.1.4 设置key值的同时设置过期时间
命令:
setex key名称 过期时间 key值
例:
setet name1 30 zhangsan (设置key名为name1,name1的值为zhangsan,30秒过期)
1.设置的值有失效时间
6.1.5 判断如果key值不存在则设置对应值
命令:
setnx key名称 key值
例 :
setnx name2 lisi (当key名为name2不存在的时候设置对应的值为lisi)
1.当key名不存在的时候才可以设置对应的值
6.1.6 一次性设置多个key
命令:
mset key1名 key1值 key2名 key2值 key3名 key3值........
例:
mset name1 zhangsan name2 lisi name3 wangwu name4 zhaoliu
(设置了4个key,name1对应的值为zhangsan,name2对应的值为lisi,name3对应的值为wangwu,name4对应的值为zhaoliu,一次性设置了多个key,还可以继续设置多个key)
6.1.7 一次性获取对一个key值
命令:
mget key1名 key2名 key3名 key4名..........
例:
mget name1 name2 name3 name4 (获取值为zhangsan,lisi,wangwu,zhaoliu)
1.上面一次性可以设置多个值,这里对应可以一次性获取多个值
6.1.8 一次性设置多个key,当key不存在才设置
命令:
msetnx key1名 key1值 key2名 key2值 key3名 key3值........
例:
msetnx name1 zhangsan name2 lisi
(当name1,name2不存在的时候对应的值才会设置)
1. 这里保证key不存在的时候才能设置对应的值
2. 要保证所有的key都不存在,那么设置的值才会成功
3. 这是一个原子性的操作,要么一起成功,要么一起失败!
6.1.9 先获取值,在设置值
命令:
getset key名 key值
例:
getset name zhangsan (如果name值不存在,则返回nil,在设置值)(如果name值存在,则获取原来的值,并设置新的值)
1. 先获取原来的值,如果不存在则返回nil,如果存在则返回原来的值,最后设置值
7.1 List(列表)
所有的list命令都是以 【 l 】 开头的
7.1.0 向集合插入值(左插入)
命令:
lpush 集合名称 集合值...
例:
[1] lpush list1 zhangsan [2] lpush list1 lisi 使用两条命令将值插入集合
也可以使用一条命令插入多个值 lpush list1 zhangsan lisi .....
1. 向list1集合中插入了2个值(zhangsan,lisi)
2.在集合中存入的值的顺序是 (lisi,zhangsan),先插入的值在集合的最右边,后插入的值在集合的最左边
3. 使用 lrange 集合名(也就是key名) 0 -1 查看所有值
7.1.1 向集合中插入值(右插入)
命令:
rpush 集合名称 集合值...
例:
【1】rpush list1 zhangsan [2] rpush list1 lisi 使用两天命令将值插入结合
也可以使用一条命令插入多个值rpush list1 zhangsan lisi ....
1. 向list1集合中插入了2个值(zhangsan,lisi)
2. 在集合的顺序是(zhangsan,lisi),先插入的值在集合的最左边,后插入的值在集合的最右边
3. 使用 lrange 集合名(也就是key名) 0 -1 查看所有值
7.1. 2 移除集合中最左边的值
命令:
lpop 集合名(也就是key名)
例:
有一个list1集合中有3个值(zhangsan,lisi,wangwu)
lpop list1 (将list1最左边的值zhangsan移除了)
1. 移除list集合中第一个元素也就是最左边的值
7.1.3 移除集合中最右边的值
命令:
rpop 集合名(也就是key名)
例:
有一个list1集合中有3个值(zhangsan,lisi,wangwu)
rpop list1 (将list1最右边的值wangwu移除了)
1. 移除list集合中最后一个元素也就是最右边的值
7.1.4 通过下标获取集合中某一个值
命令:
lindex 集合名(也就是key名) 下标
例:
有一个list1集合中有3个值(zhangsan,lisi,wangwu)
lindex list1 0 对应的值为 zhangsna
lindex list1 1 对应的值为 lisi
lindex list1 2 对应的值为 wangwu
下标都是从0 开始的
7.1.4 查看集合的长度
命令:
llen 集合名(也就是key名)
例:
有一个list1集合中有3个值(zhangsan,lisi,wangwu)
llen list1 返回值为3
集合中有多少个值,那么长度就是多大
7.1.5 移除集合中指定值
命令:
lrem 集合名(也就是key名) 移除的个数 具体值
例:
有一个list1集合中有3个值(zhangsan,lisi,zhangsan),集合中可以存在相同值
lrem list1 2 zhangsan 最后集合中只剩lisi
集合中运行存在相同值,移除指定值的时候,可以指定移除具体哪个值,如果存在多个相同值,可以指定移除几个相同值
7.1.6 保留集合中指定范围的值,移除范围外的值
命令:
ltrim 集合名(也就是key名) 保留开始的下标 保留结束的下标
有一个list1集合中有4个值(zhangsan,lisi,wangwu,zhaoliu)
ltrim list1 1 2 集合中只剩下下标为1和2的lisi,wangwu
只保留指定下标内的值,移除没有指定下标外的值
7.1.7 将当前集合中最后一个值移动到新的集合中
命令:
rpoplpush 集合名(也就是key名) 新集合名(也就是key名)
例:
有一个list集合中有3个值(zhangsan,lisi,wangwu)
rpoplpush list list1 将list集合最后一个值wangwu移动到list1集合中
将原有的集合中最后一个元素移动到新的集合中,原来的集合中则不保留移除的元素
7.1.8 在集合中指定下标替换值
命令:
lset 集合名(也就是key名) 第几个下标 具体值
例:
有一个list集合中有3个值(zhangsan,lisi,wangwu),集合中可以存在相同值
lset list1 0 zhaoliu 将下标为0的zhangsan替换成了zhaoliu
使用该命令的前要保证集合存在(或者下标存在)存在,否则设置不成功
7.1.9 将某个具体值插入到集合中某个值的前面或者后面
命令:
linsert 集合名(也就是key名) 前面还是后面(before或者aftter) 插入位置的值 插入的具体值
例:
有一个list集合中有3个值(zhangsan,lisi,wangwu)
linsert list before lisi zhaoliu 在指定lisi前面插入zhaoliu值
linsert list after lisi wangba 在指定lisi后面插入wangba值
将某个具体的value插入到列表中某个元素的前面或者后面
8.1 Set(集合)
set中的值是不能重复的,set集合是无序不重复集合
8.1.1 向set集合中插入值
命令:
sadd 集合名(也就是key名) 集合值...
例:
sadd slist zhangsan
sadd slist lisi
sadd slist wangwu
也可以批量操作(sadd slist zhangsan lisi zhangwu)
插入值不能存在相同值
8.1.2 查看当前set集合中所有值
命令:
smembers set集合名(也就是key名)
例:
有一个slist集合中有3个值(zhangsan,lisi,wangwu)
smembers slist 返回集合中所有值
8.1.3 判断值是否存在set集合中
命令:
sismember 集合名(也就是key名) 需要判断的值
例:
有一个slist集合中有3个值(zhangsan,lisi,wangwu)
sismember slist zhangsan 返回1,表示zhangsan存在set集合中
如果值存在返回1,不存在返回0
8.1.4 获取set集合中元素的个数
命令:
scard 集合名(也就是key名)
例:
有一个slist集合中有3个值(zhangsan,lisi,wangwu)
scard slist 返回3,slist集合中有3个元素
集合中有多少个值,个数就是几
8.1.5 移除集合中某一个元素
命令:
srem 集合名(也就是key名) 移除的具体值
例:
有一个slist集合中有3个值(zhangsan,lisi,wangwu)
srem slist zhangsan 移除了zhangsan这个值
也可以一次性移除多个值(srem slist zhangsan lisi 移除了zhangsan和lisi这两个值)
8.1.6 随机获取set集合中某个元素
命令:
srandmember 集合名(也就是key名) 随机获取的个数
例:
有一个slist集合中有3个值(zhangsan,lisi,wangwu)
srandmember slist 随机获取slist集合中某一个元素,默认不写个数为1个
srandmember slist 2 随机获取slist集合中2个元素
8.1.7 随机删除集合的元素
命令:
spop 集合名(也就是key名) 移除几个元素
例:
有一个slist集合中有3个值(zhangsan,lisi,wangwu)
spop slist 移除slist中随机的一个值,默认不写移除个数则为1个
spop slist 2 移除slist中随机的2个值
8.1.9 将一个指定的值移动到另外一个集合中
命令:
smove 原来的集合 新的集合 要移动的指定值
例:
有一个slist集合中有3个值(zhangsan,lisi,wangwu)
smove slist slist1 wangwu 将slist集合中的wangwu移动到slist1中
移动之后原来的集合slist中的wangwu将不在 slist中
8.2.0 获取一个集合在另一个集合中不存在的值(差集)
命令:
sdiff 集合1名(也就是key名) 集合2名(也就是key名)
例:
有两个集合,list1集合有(a,b,c)三个元素,list2集合中有(c,d,e)三个元素
sdiff list1 list2 以list1为参照,判断list1中的元素是在list2中没有的,返回在list2没有的list1元素(a,b),这个叫差集
获取集合中的元素在另一个集合中没有的元素
8.2.1 获取两个集合中相同的元素 (交集)
命令:
sinter 集合1名(也就是key名) 集合2名(也就是key名)
例:
有两个集合,list1集合有(a,b,c)三个元素,list2集合中有(c,d,e)三个元素
sinter list1 list2 返回相同元素c
获取集合中的相同的元素
8.2.2 获取连个集合中的所有元素,并将相同元素合并成一个(并集)
命令:
sunion 集合1名(也就是key名) 集合2名(也就是key名)
例:
有两个集合,list1集合有(a,b,c)三个元素,list2集合中有(c,d,e)三个元素
sunion list1 list2 返回的结果是a,b,c,d,e,将相同值c合并了
将集合中相同值合并成一个值
------------------------------------------------待更新------------------------------------------------------------------------