关于redis的学习(一)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

一、redis能做什么?

1、内存存储、持久化、内存中是断电即失的、所以持久化很重要,持久化方法(rdb,aof)
2、效率高,可以用于高速缓存
3、发布订阅系统
4、地图信息分析
5、计数器、计时器(浏览量)

二、redis 安装

tar-zxvf redis-6.2.1.tar.gz
cd redis-6.2.1
yum install gcc-c++ tcl
gcc -v
make
make install
cd /usr/local/bin
mkdir cofig
cp /opt/redis-6.2.6/redis.conf config
cd config/
vi redis.conf
![修改为yes](https://img-blog.csdnimg.cn/4d8b7337b6f049048d7281c57500770e.png#pic_center)
启动
cd
cd /usr/local/bin/
redis-server config/redis.conf 
redis-cli -p 6379

三、redis使用

1.命令

默认有16个数据库
dbsize//查看当前数据库
select 3//选择数据库
keys *//查看数据库所有的key
flushdb //清除当前数据库
flushall //清空全部数据库内容
set name(key) hj(value)//设置key的值
exists name(key) //判断key是否存在
expire name(key) 10(time) //设置key的过期时间
ttl name(key) //查询key的剩余存在时间,单位是秒
move name(key) 1(数据库编号) //将key移动到指定的数据库
get name(key) //获得key的值
type name(key) //查看key的类型

2.redis 单线程为什么这么快?

redis是基于内存的,cpu不是redis的性能瓶颈,redis的瓶颈是机器的内存和网络的带宽。redis是用c写的,不比key-value的Memecache差
Redis为什么单线程还这么快?
误区一:高性能的服务器一定是多线程
误区二:多线程一定比单线程效率高
核心:redis将所有的数据都放在内存中,所以说使用单线程去操作效率就是最高的,多线程(cpu上下文切换:耗时操作),对于内存系统来说,如果没有上下文切换效率就是最高的。多次读写都在一个cpu上,在内存情况下单线程就是最佳的方案。

3.redis的类型

string(字符串)

append key1(key) "hello'(value) //向key中追加value,如果当前key不存在就相当于新建一个key
strlen key1(key)  //key中值的长度
incr views(key) //让值加一
decr views(key) //让值减一
incrby views(key) 10(步长) //让值加10
decrby views(key) 10(步长) //让值减10
getrange key1(key) 0(start) 3(end) //截取key的值,[0,3]闭区间
setrange key1(key) 0(位置) xx(value) //替换key指定位置开始的值
setex key2(key) 30(time) "hello"(value) //设置key的值和过期时间
setnx key3(key) "123"(value) //如果不存在key才设置value(在分布式锁中常常被使用)
mset k1(key) v1(value) k2(key) v2(value) k3(key) v3(value)//批量设置key的值
mget k1(key) k2(key) k3(key) //批量获取key的值
msetnx  //原子性操作
-----------------------------
设置对象
set user:1{name:zhangsan,age:3} //设置一个user:1对象,值为json字符串来保存一个对象
mset user:1:name zhangsan user:1:age 2//这里的key是一个巧妙地设计 user:{id}:{filed}
mget user:1:name user:1:age //获取key的值
getset db(key) r(value) //如果key不存在,返回nil
getset db(key) p(value) //如果存在值,获取原来的值,并设置新的值

string类型的使用场景:value除了是字符串还可以是数字
1.计数器
2.统计单位的数量
3.粉丝数
4.对象缓存存储

List

在redis中list可以做栈,队列,阻塞队列

lpush list(key) one(value)//向队列头部中添加一个值或多个值
lrange list(key) 0(start) -1(end)//获取队列的所有值
rpush list(key) t(value)//向队列尾部中添加一个值
lpop list(key) //将队列头部的第一个值移除
rpop list(key) //将队列尾部的最后一个值移除
lindex list(key) 1(index)//通过下标获取值从头部开始计数
llen list(key) //返回列表的长度
lrem list(key) 1(个数) one(value)//移除list集合中指定的值,精确匹配
ltrim list(key) 1(start) 2(end) //通过下标截取指定的长度,这个list已经被改变了,截断了只剩下截断元素
rpoplpush list(key) otherlist(newkey)//将key中的最后一个值移动到newkey中
lset list(key) 0(index) item(value) //key指定位置赋值,如果key不存在则报错
linsert list(key) before word(value1) s(value2)// 在value1之前插入value2
linsert list(key) after word(value1) s(value2)// 在value1之后插入value2

list实际上是一个链表,left,right都可以插入值
如果key不存在,则新建链表
如果key存在,新增内容
如果移除所有的值,空链表,也代表不存在
如果在两边插入或者改动值,效率最高,中间元素,相对来说效率比较低
消息队列,消息排队,栈

set

sadd set(key) hello(value) //向key中添加值
smembers set(key) //查看set中的所有值
smembers set(key) hello(value) //获取指定key中的值
scard set(key) //获取key中所有值的个数
srem set(key) hello(value) //移除key中指定的值
srandmember myset(key) //随机抽选一个元素
srandmember myset(key) 2(数字) //随机选取2个值
spop set(key) //随机删除key中的值
smove set(key1) set1(key2) hello(value) //将key1中的value移动到key2中
sdiff set1(key1) set2(key2) //查看key1中与key2的不同的值
sinter set1(key1) set2(key2) // 查看key1与key2中相同的值
sunion set1(key1) set2(key2) //key1与key2中的并集

hash

hset s(容器) a(key) b(value)//设置key的值
hget s(容器) a(key) //获取key的值
hgetall hash(容器) //获取所有的k-v
hmset s(容器) a(key1) b(value1) c(key2) d(value2)//设置多个值
hdel s(容器) a(key)//删除指定的key
hlen s(容器)// 获取容器中所有的值
hexists s(容器) a(key) //判断a是否存在
hkeys s(容器)//获取所有的key
hvals s(容器)//获取所有的value

hash变更数据

Zset(有序集合)

在set的基础上加了一个排序

zadd myset(key) 1(位置) one(value)//添加一个值
zrangebyscope salary(key) -inf(min) +inf(max) //从小到大排序

hyperloglog(数据结构)

网站的访问量
暂用内存固定(12k)

pfadd m(key) a(value1) b(value2)
pfcount m(key)//统计key中值的数量
pfmerge m(key1) n(key2) q(key3)//将key3和key2合并并将合并结果存入key1

bitmap(位存储)

打卡,只有两个状态的,统计用户信息

例子统计一周打卡信息
setbit sign(key) 0 1
setbit sign(key) 1 1
setbit sign(key) 2 0
setbit sign(key) 3 1
setbit sign(key) 4 0
setbit sign(key) 5 1
setbit sign(key) 6 0
getbit sign(key) 3//获取周四的打卡情况
bitcount sign(key)//获取一周打卡的天数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值