【redis基本知识:五大数据类型,三种特殊数据类型】

基础知识

1.redis 默认有16个数据库
在这里插入图片描述
2.默认使用的是第0个,可以使用select进行切换数据库!
在这里插入图片描述

127.0.0.1:6379> select 3 # 切换数据库
OK
127.0.0.1:6379[3]> DBSIZE # 查看DB大小
(integer) 0

set、get
在这里插入图片描述
查看所有的key:
在这里插入图片描述
清空当前数据库:

在这里插入图片描述
FLUSHALL 清空全部的数据
思考为啥redis端口号是6379,粉丝效应。。。(了解)

Redis 是单线程的,

明白Redis是很快的,官方表示, Redis是基于内存操作, CPU不是Redis性能瓶颈, Redis的瓶颈是根据机器的内存和网络带宽,既然可以使用单线程来实现,就使用单线程了!所以就使用了单线程!

Redis是C语言写的,它方提供的数据为100000+的QPS ,完全不比同样是使用key-vale的Memecache差!

Redis为什么单线程还这么快?
1、误区1 :高性能的服务器一定是多线程的?
2、误区2:多线程(CPU上下文会切换! )一定比单线程效率高!

先去对CPU>内存>硬盘的速度要有所了解!

核心: redis是将所有的数据全部放在内存中的,所以说使用单线程去操作效率就是最高的,多线程( CPU上下文会切换:耗时的操作! !! ) ,对于内存系统来说,如果没有上下文切换效率就是最高的!多次读写都是在一个CPU上的,在内存情况下,这个就是最佳的方案!"

五大数据类型:
Redis-Key
String
List
Set
Hash
Zset
三种特殊数据类型:
geospatial
hyperloglog
bitmaps
在这里插入图片描述
全段翻译:
Redis是一个开源(BSD许可)的,内存中的数搞结构存储系统,它可以用作数据库、缓存和消息中间件,它支持多种类型的数据结构,如字符串( strings ) ,散列( hashes ) ,列表( lists ) ,集合(sets ) ,有序集合( sorted sets )与范围查询bitmaps , hyperloglogs和地理空间( geospatial )索引半径查询。Redis内置了复制( replication ) , LUA脚本( Luascripting ) , LRU驱动事件( LRU eviction ) ,事务( transactions )和不同级别的磁盘持久化( persistence ) ,并通过Redis哨兵( Sentinel )和自动分区( Cluster )提供高可用性( high availability ).

基本命令:
在这里插入图片描述

127.0.0.1:6379> flushall
OK
127.0.0.1:6379> set name 1
OK
127.0.0.1:6379> move name 1 #将name移动到数据库1
(integer) 1
127.0.0.1:6379> set name lxw
OK
127.0.0.1:6379> move name 1
(integer) 0
127.0.0.1:6379> move name 2 #将name移动到数据库2
(integer) 1
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> select 2
OK
127.0.0.1:6379[2]> keys *
1) "name"
127.0.0.1:6379[2]> select 2
OK
127.0.0.1:6379[2]> select 1
OK
127.0.0.1:6379[1]> keys *
1) "name"
127.0.0.1:6379[1]> get name
"1"
127.0.0.1:6379[1]> select 2
OK
127.0.0.1:6379[2]> get name
"lxw"
127.0.0.1:6379> type name # 查看当前一个Key的类型
string
127.0.0.1:6379> type age
string

String (字符串类型)

set key1 v1 # 设置值
get key1 # 获得值
keys * # 获取所有的key
exists key1
append key1 "hello"
get key1
strlen key1
append key1 ",lixingwang"
strlen key1 
set views 0 # 初始浏览量为0
get views # 自增1
incr views
incr views
decr views # 自减1
decr views
get views
incrby views 10 # 可以设置步长,指定增长量
incrby views 10
decrby views 10
decrby views 10
###########################################################
#字符串范围 range
set key1 "hello,lixingwang!"
get key1
getrange key1 0 3 # 截取字符串
getrange key1 0 -1 # 获取全部的字符串 和 get key 是一样的
###########################################################
#替换
set key2 abcdefg
get key2
setrange key2 1 xx
get key2
###########################################################
# setex(set with expire) # 设置过期时间
# setnx(set if not exist) # 不存在再设置
setex key3 30 "hello" # 设置key3 的值为 hello ,30秒后过期
get key3
setnx mykey "redis"
keys *
ttl key3
setnx mykey "MongoDB" # 如果mykey 存在,创建失败
get mykey
##########################################################
keys *
mset k1 v1 k2 v2 k3 v3
keys *
mget k1 k2 k3 # 同时获取多个值
msetnx k1 v1 k4 v4 # msetnx 是一个原子性的操作,要么一起成功,要么一起失败
get k4

# 对象
set user:1{name:zhangsan,age:3} # 设置一个user:1 对象 值为json字符串,来保存一个对象

# 这里的key是个巧妙的设计:user:{id}:{filed},如此设置在redis中是完全OK的。
mset user:1:name zhangsan user:1:age 2
mget user:1:name user:1:age

###########################################################
# getset # 先get 然后再set
getset db redis # 如果不存在值,则返回nil
get db 
getset mongodb # 如果存在值,获取原来的,并设置新的值
get db

数据结构是相同的。
String类似的使用场景:value除了是我们的字符还可以是我们的数字!
》计数器
》统计多单位的数量
》粉丝数
》对象缓存储存!

List(列表)

基本的数据类型
在redis里面,我们可以把list 玩成:栈、队列、阻塞队列!

lpush list one # 将一个值或多个值,插入到表的头部(左)
lpush list two
lpush list three
lrange list 0 -1 # 获取list 中的值
lrange list 0 1 # 通过空间获取具体的值
rpush list right # 将一个值或多个值,插入到表的尾部(右)
lrange list 0 -1

lpop list # 移除列表的第一个元素
rpop list # 移除列表的最后一个元素
lrange list 0 -1
lindex list 1 # 通过下标获得list中的某一个值
lindex list 0

flushdb
lpush list one
lpush list two
lpush list three
llen list # 返回列表的长度
############################################################
# 移除指定的值
lpush list three
lrem list 1 one # 移除list 集合中指定个数的value,精确匹配
lrange list 0 -1
lrem list 1 three
lrange list 0 -1
lpush list three
lrem list 2 three
lrange list 0 -1

#############################################################
trim 修剪:list 截断
Rpush mylist hello1
Rpush mylist hello2
Rpush mylist hello3
ltrim mylist 1 2 # 通过下标截取指定的长度,这个list 已经被改变了,截断了只剩下截取的元素
lrange mylist 0 -1

flushdb
rpush mylist "hello1"
rpush mylist "hello2"
rpush mylist "hello3"
rpoplpush mylist myotherlist # 移除列表的最后一个元素,将他移动到新的列表中。
lrange mylist 0 -1 # 查看原来的列表
lrange myotherlist 0 -1 # 查看目标列表中,确实存在该值
###########################################################
exists list
lset list 0 item
lpush list value1
lrange list 0 0
lset list 0 item
lrange list 0 0
lrange list 1 other

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
小结
他实际上是一个链表
在这里插入图片描述

set(集合)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Hash(哈希)

map集合,key-Map集合! 这时候这个值是一个map集合
set myhash filed kuangshenshuojava!!
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
hash变更的数据 user name age,尤其是用户信息之类的,经常变动的信息
在这里插入图片描述

Zset(有序集合)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
移除rem中的元素
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
案例思路:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

数据结构???
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
测试:
在这里插入图片描述
查看某一天是否打卡

在这里插入图片描述
统计操作,统计打卡的天数
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宇智波.望

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值