Redis基本了解

2021-10-19  本文已影响0人  CodeYang

Redis

原视频链接:https://www.bilibili.com/video/BV1S54y1R7SB

redis 默认有16个数据库,可从redis.conf 查看,默认使用第0个

databases 16
基本命令

Redis命令:https://redis.io/commands

select 3        # 切换到第三个数据库
dbsize          # 当前库数据库大小
keys *          # 查看当前库所有的 key 
flushdb         # 清空当前库
flushall        # 清空全部数据库
exists name     # 判断name 是否存在
move name 1     # 将name 从当前库移动到 库1
expire name 10  # 设置name 10秒过期
ttl name        # 查看name的剩余时间
type name       # 查看当前key 的类型

redis 是单线程的 !

redis 是基于内存操作,CPU 不是Redis性能瓶颈,Redis的瓶颈是根据机器的内存和网络的带宽,既然可以使用单线程实现,就使用了单线程。

Redis 是C语言写的,官方提供的数据为 100000+ 的QPS(每秒查询率)

为什么CPU 不是Redis性能瓶颈?

原文博客:https://blog.csdn.net/PERCENTILE__/article/details/108392930

  1. redis在内存里,省下来cpu从硬盘里取数据拿到内存的时间。

  2. redis是单线程,省下来cpu切换线程恢复线程的时间。

  3. redis是单线程的,所以服务器是单核还是多核cpu对他没什么影响,因为他的多次读写都是在一个cpu上的。

  4. cpu不可能对他一点影响没有,但是相比别的数据库,redis受cpu的限制太少了。

Redis为什么单线程还这么快?

Redis 将所有的数据放在了内存中的。

多路复用

五大数据类型

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings)散列(hashes)列表(lists)集合(sets)有序集合(sorted sets) 与范围查询, bitmapshyperloglogs地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication)LUA脚本(Lua scripting)LRU驱动事件(LRU eviction)事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

String(字符串)

value 除了是我们的字符串还可以是我们的数字

set key1 v1         #设置值
get key1            #获取值
getset key1 aa      #先获取值再设置值
append key1 "hello" #追加字符【当前key不存在,新建】
strlen key1         #获取key长度

############### 步长 ######################
incr   a            #加1操作
decr   a            #减1操作
incrby a 10         #加10操作
decrby a 10         #减10操作

################ 字符串范围 #####################
getrange key1 0 3   #截取字符串[0,3]
getrange key1 0 -1  #获取所有字符串
setrange key1 1 XX  #替换指定位置开始的字符串

################# ####################
#setex (set with expire)    #设置过期时间
setex key1 30 "hello"       #设置key1的值为hello,过期时间是3秒
#setnx (set if not exist)   #不存在设置
setnx key2 "redis"          #设置成功
setnx key2 "mongodb"        #设置失败,因为已经存在该 key2

#################### 多个值操作 #################
mset k1 v1 k2 v2 k3 v3      #一次设置多个值
mget k1 v1 k2 v2 k3 v3      #一次获取多个值
msetnx k1 v1 k2 v2 k3 v3    #metnx 是一个原子性的操作,要么全部成功,要么全部失败

#################### 对象 #################
set user:1 {name:zhangsanm,age=10}   #设置一个user:1 对象,值为 json 字符串来保存一个对象
mset user:2:name lisi user:2:age 20
mget user:2:name user:2:age

List(列表)

可作为栈、队列使用

lpush list a b      #从左侧放入
rpush list z        #从右侧放入
lrange list 0 -1    #获取列表中的值
lrange list 0 1     #通过区间列表中的值
llen list           #获取长度

##lpop、rpop
lpop   list         #从左侧移除一个元素
rpop   list         #从右侧移除一个元素

##lindex
lindex list 1       #通过下标获取list 的某一个值 

##lrem
lrem list 1 one     #移除一个list中的one值
lrem list 0  a      #移除list中所有的a

##ltrim 截取
ltrim list 2 4      #截取值 [2,4],list 被修改

##rpoplpush
rpoplpush list mylist   #从list右侧获取一个值,移动到mylist

##lset  将列表中指定下标的值替换为另外一个值,更新操作
lset mylist 0 itm       #将mylist中下标为0的值,替换为itm,0不存在会报错

##linsert 
linsert mylist before "world" "other"  #将值插入到"world" 之前
linsert mylist after  "world" "other2" #将值插入到"world" 之后
Set(集合)
sadd key1 "hello" "world"   # set集合中添加元素
smember key1                # 查看set中的值
sismember key1 hello        # 判断set集合中是否存在该值
scard key1                  # 获取元素个数
srem key hello              # 移除set中的元素

##随机获取
srandmember key1            # 随机获取set中的一个元素
srandmember key1 2          # 随机获取set中的两个元素

##随机删除
spop key1                   # 随机删除一个元素

##将一个值移动到另外一个集合
smove key1 key2 2           # 将元素 2 从key1集合中移动到key2集合中

##交集、差集、并集  
sdiff  key1 key2            # 差集
sinter key1 key2            # 交集
sunion key1 key2            # 并集

Hash(哈希)

key - map

hset k1 a 1                 # 设置 key-value
hget k1 a                   # 获取hash中a的值
hmset k1 a 1 b 2 c 3        # 设置多个 key-value
hmget k1 a b c              # 获取多个值
hgetall k1                  # 获取全部数据,包括 key-value
hdel k1 a                   # 删除hash中指定的值
hlen k1                     # 获取hash长度(元素数量)
hexists k1 a                # 判断hash是否存在指定字段

##只获得所有的key,value
hkeys k1                    # 获取hash所有的key
hvals k1                    # 获取hash所有的value

# 数字类型增减操作
hincrby k1 b 3              # hash中 b的值加3
hincrby k1 b -2             # hash中 b的值减2

# hsetnx
hsetnx k1 b world           #如果b存在则设置失败,反之设置成功
Zset(有序集合)

在set 基础上,增加了排序。

zadd k1 1 one 2 two 3 three         # 设置1号位置为one,2号位置为two...
zrange k1 0 -1                      # 获取所有元素
zrangebyscore k1 -inf +inf          # 获取-∞, +∞ 之间的数,正序输出
zrangebyscore k1 -inf 2             # 获取小于 2的元素
zrevrange     k1 0 -1               # 获取所有元素,倒序输出
zcard  k1                           # 获取元素个数
zcount k1   1 3                     # 获取指定区间内个数 [1,3]
上一篇下一篇

猜你喜欢

热点阅读