< 什么是Redis>
(1) 支持数据的持久化,可以将数据保存在磁盘中,重启之后可以再次加载到内存中使用
(2) 支持多种数据类型,除了KV类型的数据,还支持list、set、hash等数据结构
(3) 支持master-slave模式的数据备份
C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。---所以他就是数据库
<哪个公司在使用Redis>
Blizzard:暴雪娱乐公司是一家著名游戏制作和发行公司 ,暴雪公司推出过多款经典系列作品,其中包括《魔兽争霸》系列、《星际争霸》系列、《暗黑破坏神》系列、《魔兽世界》、《炉石传说》、《风暴英雄》以及《守望先锋》。
digg:中文名掘客 digg是网络最新名词,中文翻译为“掘客”,或者“顶格”,鼻祖是美国digg公司
stack overflow:可以说是一本书,程序员应该读的一本书,
当你拋出一个技术问题时,最终是否能得到有用的回答,往往取决于你所提问和追问的方式。 —— Eric S. Raymond
切入正题
使用Redis
本来应该是安装,但是由于准备欠缺,搁置还需下次分解
这是第一天的阅读与理解,还需发现欠缺与不足
Redis采用单线程机制进行工作
Redis默认拥有16个数据库,数据库编号从0开始,默认使用0号数据库
使用select 数据库编号 可以切换使用的数据库//大多数据库都是select选择数据库
dbsize 命令查看当前数据库key的数量
keys * 命令查看当前数据库所有的key
flushdb 命令清空当前数据库
flushall 命令清空所有数据库
Redis中所有数据库使用同一个密码,默认没有密码,Redis认为安全层面应该由Linux来保证
Redis中所有索引都是从0开始
Redis默认端口是6379
Redis 数据结构简介
Redis 是一种高级的key-value存储系统,其中value支持五种数据类型:
- Strings 字符串
- lists 字符串列表
- sets 字符串集合
- sorted sets有序字符串
- hashes 哈希
(解释一下key-value :key-value是一种理念,在这里是一种键值对存储数据的一种数据库,类似java中的map .可以将整个数据库理解为map,每个键都可以对应的键值,查询速度快、存放数据量大、支持高并发,非常适合通过主键进行查询,但不能进行复杂的条件查询。)
*写的时候全凭搜索资料并看视频,未实操
Redis 中key的操作命令
127.0.0.1:6379> ping #查看当前连接,成功返回pong
127.0.0.1:6379> clear #顾名思义 清除
127.0.0.1:6379> keys *#查看当前所有的key
127.0.0.1:6379>FLUSHALL # 清空所有key值
127.0.0.1:6379> set name dingdada #添加一个key值为'name ',value值 为'dingdada'
127.0.0.1:6379> get name #查询key为'name'的value值
127.0.0.1:6379> EXISTS name #判断当前key是否存在
127.0.0.1:6379> move name #移除当前库的'name '的数据
127.0.0.1:6379> EXIRE name 15# exire 设置key值为name的过期时间为15秒 单位seconds
(1)String
自增自减
127.0.0.1:6379> set num 0#插入一条初始值为0的数据
127.0.0.1:6379> get num # 值为0
127.0.0.1:6379> incr num #increase 自增数据返回结果集相当于i++ 则num返回 1
127.0.0.1:6379> decrease num # i--
127.0.0.1:6379> INCRBY num 10 # 后面跟上by 指定为num 的数据值自增参数为'10' 以十位基础自增
# 1 11 21 31
127.0.0.1:6379> DECRBY num 10 # 和INCRBY反义以十位基础自减
截取替换
127.0.0.1:6379> set key1 "hello,world!"
127.0.0.1:6379> get key1 "hello,world"
127.0.0.1:6379> GETRANGE key1 0 4# 范围(range)0到4 类似于subtring 都是从下标0开始 "hello" 不会改变原始数据,
127.0.0.1:6379> SETRANGE key1 5 8888 #替换 这里有一点绕 也是从下标开始替换 第五位开始替换 后面的8888是你替换的值而不是你范围的意识 则"hello8888ld"
设置过期时间,不存在设置操作
##setex setnx
127.0.0.1:6379> setex name 15 dingdada #和EXpire区别在于已存在和创建时自己创建过期时间
# 这里创建过期时间为15 当返回时间为-2时 ,当前数据已经不存在
127.0.0.1:6379> setnx name2 dingdada2 #如果key值为name2 若当前name2中没有数据则新增数据,
#返回1证明成功,若当前数据存在则返回0,这里和set的区别在于当前数据会不会替换,所以设set会替换当前值
添加获取对象(getset)
#基础还是在于字符串
127.0.0.1:6379> mset student :1:name # student 相当于类 1 相当于 id name 相当于属性
#和java比较他不需要太关注key值 只要找到类
127.0.0.1:6379> mset student:1:name dingdada student:1:age 22#新增一个key值为
#student:1:name value为"dingdada","22"
127.0.0.1:6379> key *
"student:1:name"
"student:1:age"
127.0.0.1:6379> mget student:1:age student:1:name # "22" ,"dingdada"
127.0.0.1:6379> getset name1 dingdada #先get再set先获取key值 如果没有set进去
# 这里一定是返回get 因为开始没有的 则返回(nil) 但是这里set已经获取所以下一次get是有值得
127.0.0.1:6379> getset name1 dingdada1 #先获取key 如果有 set(替换进去)最新的进去
#因为第一次getset 之后 是已经set值进去了,所有返回"dingdada"
127.0.0.1:6379> getset name1 #返回值是最近一次 所有值为"dingdada1"
*这里提一下这个(nil),应该都是猜出来是null