Redis 笔记(三)-Redis 基本知识及五大数据类型
2021-07-31 本文已影响0人
yjtuuige
一、
redis
基本知识
-
redis
默认有16个
数据库,config get databases
查看数据库数量
127.0.0.1:6379> config get databases # 查看数据库数量
1) "databases"
2) "16"
- 默认使用的是第
0个
16 个数据库为:DB 0
~DB 15
,默认使用DB 0
- 可以使用
select
进行切换数据库
select n
切换到DB n
,dbsize
可以查看当前数据库的大小,与key
数量相关。
127.0.0.1:6379> select 1 # 切换到数据 1
OK
127.0.0.1:6379[1]> dbsize # 查看数据库大小
(integer) 0
127.0.0.1:6379[1]> keys * # 查看数据库中所有的 key
- 清除当前的数据库
flushdb
127.0.0.1:6379> flushdb # 清除当前的数据库
- 清除所有的数据库
flushall
127.0.0.1:6379> flushall # 清除所有的数据库
-
Redis
是单线程的,Redis
是基于内存操作的
所以Redis
的性能瓶颈不是CPU
,而是机器内存和网络带宽。 -
Redis
为什么单线程还这么快?QPS
达到10W+
误区1:高性能的服务器一定是多线程的?
误区2:多线程(CPU
上下文会切换!)一定比单线程效率高! -
核心:
Redis
是将所有的数据放在内存中的,所以说使用单线程去操作效率就是最高的,多线程(CPU
上下文会切换:耗时的操作!),对于内存系统来说,如果没有上下文切换效率就是最高的,多次读写都是在一个CPU
上的,在内存存储数据情况下,单线程就是最佳的方案。
二、五大数据类型
-
Redis
是一个开源(BSD
许可)的,内存中的数据结构存储系统,它可以用作数据库
、缓存
和消息中间件 MQ
。 - 它支持多种类型的数据结构,如:
1、字符串(strings
)
2、散列(hashes
)
3、列表(lists
)
4、集合(sets
)
5、有序集合(sorted sets
)
与范围查询,bitmaps
,hyperloglogs
和 地理空间(geospatial
) 索引半径查询。 -
Redis
内置了 复制(replication
),LUA
脚本(Lua scripting
),LRU
驱动事件(LRU eviction
),事务(transactions
) 和不同级别的 磁盘持久化(persistence
), 并通过Redis
哨兵(Sentinel
)和自动 分区(Cluster
)提供高可用性(high availability
)。
Redis-key
- 在
redis
中无论什么数据类型,在数据库中都是以key-value
形式保存,通过进行对Redis-key
的操作,来完成对数据库中数据的操作。
常用命令:
-
exists [key]
:判断key是否存在 -
del [key]
:删除键值对 -
move [key] [db]
:将键值对移动到指定数据库 -
expire [key] [seconds]
:设置过期时间 -
ttl [key]
:(time to live
) 查看当前key
剩余时间 -2 代表已经过期 -
type [key]
:查看key
的类型
type
数据返回类型:
-
none
(key
不存在) string
(字符串)list
(列表)set
(集合)zset
(有序集)hash
(哈希表)
三、测试
127.0.0.1:6379> keys * # 查看当前数据库所有key
(empty list or set)
(empty array)
127.0.0.1:6379> set name yj # set key
OK
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> set age 1
OK
127.0.0.1:6379> keys *
1) "age"
2) "name"
127.0.0.1:6379> exists name # 判断键是否存在
(integer) 1 # 存在
127.0.0.1:6379> exists name1
(integer) 0 # 不存在
127.0.0.1:6379> move name 1 # 将 name 移动到数据库1 中
(integer) 1
127.0.0.1:6379> keys *
1) "age"
127.0.0.1:6379> set name yj
OK
127.0.0.1:6379> keys *
1) "age"
2) "name"
127.0.0.1:6379> get name
"yj"
127.0.0.1:6379> expire name 10 # 设置键值对的过期时间
(integer) 1
127.0.0.1:6379> ttl name # 查看当前 key 的剩余时间
(integer) -2 # -2 已经过期
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> keys *
1) "age"
127.0.0.1:6379> move age # 将 age 移动到数据库1 中
(integer) 1
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
1) "age"
2) "name"
127.0.0.1:6379[1]> select 0 # 切换到数据库 0中
OK
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> select 1 # 切换到数据库 1中
OK
127.0.0.1:6379[1]> keys *
1) "age"
2) "name"
127.0.0.1:6379[1]> del name # 删除键值对
(integer) 1 # 删除个数
127.0.0.1:6379[1]> keys *
1) "age"
127.0.0.1:6379[1]> del age
(integer) 1
127.0.0.1:6379[1]> keys *
(empty array)
127.0.0.1:6379> type name 查看value的数据类型
string
- 查看更多命令:官方地址