-
Redis 是开源的,免费的,高性能的 非关系型形数据库。
-
数据存储在内存,以key-value形式存储,类似于字典 {name: ‘jack’ }
-
可以设置过期时间,过期自动删除,也可以做持久化。
关系型数据库: MySQL
MySQL的缺陷: 1. 读取的时候相对较快, 但是写入数据是比较慢的, 读取速度是1w/s. 写入速度: 1000/s。 2. 读写时容易混淆,会读取出脏数据,需要对Mysql读写做限制. 3. 需要定义严格的表结构,插入数据需要满足完整性约束。 4. 数据存储在磁盘,相对于内存数据库,读写速度慢
Redis的优点:
-
性能极高 – Redis读的速度是11w次/s,写的速度是8.1w次/s ,都是基于内存的,读写速度比较快。
-
丰富的数据类型 – Redis支持 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型 *** 作。
-
原子性 – Redis的所有 *** 作都是原子性的,要么成功执行,要么失败不执行。支持简单的事务,即原子性,通过MULTI和EXEC指令包起来。如下所有的 *** 作全部执行或者全部不执行
-
丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
-
基于内存型数据库, 主机断电时数据全部丢失。
-
key同时过期会造成Redis数据库的“雪崩”,容易把整个服务搞垮。
redis常用的数据结构有哪些?
字符串、列表、集合、有序集合、哈希
单线程的redis为什么这么快?
1 纯内存 *** 作
Redis将数据储存在内存里面,读写数据的时候都不会受到硬盘I/O速度的限制,所以速度快
2 单线程 *** 作
单线程可以避免不必要线程间的切换和资源抢占
redis的内存淘汰策略有哪些?
1 noeviction(默认策略):当内存满时,写入 *** 作会报错,无法存储新数据。
2 allkeys-lru:当内存满时,移除最近最少使用的key
3 allkeys-random:当内存满时,在键空间中,随机移除某个key 4)volatile-lru,从设置了过期的key中删除最近最少使用的key 5)volatile-random,从设置了过期的key中随机删除key 6)volatile-ttl, 从设置了过期的key中根据剩余过期时间删除。
为什么redis需要把所有的数据放到内存中?
Redis为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘,进行持久化。 如果不将数据放到内存中,磁盘的I/O速度会严重影响Redis的性能。 在内存越来越便宜的今天,Redis将会越来越受欢迎,耗点内存没什么
redis查看所有的key
keys *
查看key的数据类型
type key1
查看key是否存在
exists key1
删除一个key
del key1
重命名
rename key key111
清空数据库
flushdb/flushall
添加一个key
set key1 ""
设置key-value
(1)set name jack
(2)mset name jack age 19 addr China
(3)append key val #追加
获取key的值
get name
mget name age hobby
十秒后过期
set name jack ex 10
不存在时 设置key
set name jack nx
获取字符串值的长度
strlen name
获取字符串的分片
set name jack
getrange name 0 1
设置字符串的片取值
set name beikehan
setrange name 1 oo
数值加1 减1
set age 23
incr age 加1
decr age 减1
数值加5 减5
incrby age 5 加5
decrby age 5 减5
incrbyfloat age 1.3 转为字符串
incrbyfloat age -1.2
十秒后过期
set name jack ex 10
查看还有多久过期
ttl name
返回-2 key不存在
返回-1 key没有过期时间
永不过期
persist name
lpush numbers 1 2 3
头插法
rpush numbers 8 9 0
尾插法
lset numbers 5 10
更新列表
lpop numbers
头删法
rpop numbers
尾删法
blpop mylist 10
brpop mylist 10
堵塞删除
lrem numbers 0 2
删除指定的值 返回删除的个数
lrem numbers -2 1
从表尾部开始删除两个值为1的元素
lrem numbers 2 1
从表头开始删除两个值为1的元素
ltrim numbers 2 5
# 仅保留下标为2 5 的元素 删除其他元素
lrange numbers 0 -1
删除指定区域间的元素
lrem history:173 0 1
移除用户173历史记录 所有为1的商品
lpush history:173 1
将id为1的商品存到173的历史记录里
ltrim history:173 0 4
保存173前五条数据
lrange history:173 0 -1
查询列表中的所有元素
hset user:“名” name jack
设置单个 hset key field value
hget user:“名” name
查询指定字段
hgetall user:“名”
查询所有的值
sadd workers tom lucy jack
# 向集合增加一个或多个成员 插入集合
srem workers tom
# 删除集合
scard workers
# 查询集合 返回的事集合中成员数
smembers workers
# 查询集合 返回的事集合中所有成员
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)