基础知识

1.redis 默认有16个数据库

redis默认多久生成一次RDB redis默认启动多少个数据库_redis默认多久生成一次RDB


2.默认使用的是第0个,可以使用select进行切换数据库!

redis默认多久生成一次RDB redis默认启动多少个数据库_redis默认多久生成一次RDB_02

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

set、get

redis默认多久生成一次RDB redis默认启动多少个数据库_redis默认多久生成一次RDB_03


查看所有的key:

redis默认多久生成一次RDB redis默认启动多少个数据库_Redis_04


清空当前数据库:

redis默认多久生成一次RDB redis默认启动多少个数据库_缓存_05


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默认多久生成一次RDB redis默认启动多少个数据库_Redis_06


全段翻译:

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 ).基本命令:

redis默认多久生成一次RDB redis默认启动多少个数据库_Redis_07

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

redis默认多久生成一次RDB redis默认启动多少个数据库_数据库_08


redis默认多久生成一次RDB redis默认启动多少个数据库_redis默认多久生成一次RDB_09


redis默认多久生成一次RDB redis默认启动多少个数据库_缓存_10


小结

他实际上是一个链表

redis默认多久生成一次RDB redis默认启动多少个数据库_Redis_11

set(集合)

redis默认多久生成一次RDB redis默认启动多少个数据库_缓存_12


redis默认多久生成一次RDB redis默认启动多少个数据库_redis默认多久生成一次RDB_13


redis默认多久生成一次RDB redis默认启动多少个数据库_数据库_14


redis默认多久生成一次RDB redis默认启动多少个数据库_数据库_15


redis默认多久生成一次RDB redis默认启动多少个数据库_缓存_16


redis默认多久生成一次RDB redis默认启动多少个数据库_缓存_17

Hash(哈希)

map集合,key-Map集合! 这时候这个值是一个map集合

set myhash filed kuangshenshuojava!!

redis默认多久生成一次RDB redis默认启动多少个数据库_数据库_18

redis默认多久生成一次RDB redis默认启动多少个数据库_redis默认多久生成一次RDB_19


redis默认多久生成一次RDB redis默认启动多少个数据库_数据库_20


redis默认多久生成一次RDB redis默认启动多少个数据库_数据库_21


redis默认多久生成一次RDB redis默认启动多少个数据库_数据库_22


hash变更的数据 user name age,尤其是用户信息之类的,经常变动的信息

redis默认多久生成一次RDB redis默认启动多少个数据库_数据库_23

Zset(有序集合)

redis默认多久生成一次RDB redis默认启动多少个数据库_Redis_24


redis默认多久生成一次RDB redis默认启动多少个数据库_Redis_25


redis默认多久生成一次RDB redis默认启动多少个数据库_redis默认多久生成一次RDB_26

redis默认多久生成一次RDB redis默认启动多少个数据库_Redis_27


redis默认多久生成一次RDB redis默认启动多少个数据库_redis_28


移除rem中的元素

redis默认多久生成一次RDB redis默认启动多少个数据库_Redis_29


redis默认多久生成一次RDB redis默认启动多少个数据库_redis_30


redis默认多久生成一次RDB redis默认启动多少个数据库_redis默认多久生成一次RDB_31


案例思路:

redis默认多久生成一次RDB redis默认启动多少个数据库_Redis_32


redis默认多久生成一次RDB redis默认启动多少个数据库_缓存_33


redis默认多久生成一次RDB redis默认启动多少个数据库_Redis_34


redis默认多久生成一次RDB redis默认启动多少个数据库_缓存_35


redis默认多久生成一次RDB redis默认启动多少个数据库_Redis_36


redis默认多久生成一次RDB redis默认启动多少个数据库_redis_37


redis默认多久生成一次RDB redis默认启动多少个数据库_Redis_38


redis默认多久生成一次RDB redis默认启动多少个数据库_redis_39


redis默认多久生成一次RDB redis默认启动多少个数据库_redis默认多久生成一次RDB_40


redis默认多久生成一次RDB redis默认启动多少个数据库_缓存_41


redis默认多久生成一次RDB redis默认启动多少个数据库_redis默认多久生成一次RDB_42


redis默认多久生成一次RDB redis默认启动多少个数据库_数据库_43


redis默认多久生成一次RDB redis默认启动多少个数据库_Redis_44


redis默认多久生成一次RDB redis默认启动多少个数据库_缓存_45


redis默认多久生成一次RDB redis默认启动多少个数据库_缓存_46


redis默认多久生成一次RDB redis默认启动多少个数据库_Redis_47


redis默认多久生成一次RDB redis默认启动多少个数据库_redis_48


redis默认多久生成一次RDB redis默认启动多少个数据库_redis_49

redis默认多久生成一次RDB redis默认启动多少个数据库_缓存_50


redis默认多久生成一次RDB redis默认启动多少个数据库_redis默认多久生成一次RDB_51

redis默认多久生成一次RDB redis默认启动多少个数据库_redis默认多久生成一次RDB_52


redis默认多久生成一次RDB redis默认启动多少个数据库_redis_53


测试:

redis默认多久生成一次RDB redis默认启动多少个数据库_缓存_54


查看某一天是否打卡

redis默认多久生成一次RDB redis默认启动多少个数据库_redis默认多久生成一次RDB_55


统计操作,统计打卡的天数

redis默认多久生成一次RDB redis默认启动多少个数据库_数据库_56