数据库Redis(一)
Redis数据库的特点:
Redis数据库属于nosql数据库的一种,其存储于内存中(非硬盘),修改较为方便。
而Redis数据库的存储方式是使用{key:value}方式存储,类似python基础中的字典类型,和python中字典格式相比,其基础格式定义基本雷同:python中字典key值为不重复的不可变内容,value为任意对象(字符串、列表、集合、字典);Redis中key为固定的不重复字符串格式,value为任意对象(字符串、hash值、列表、集合、有序集合)。
乌班图中如何使用Redis呢?
进入虚拟机后:
redis-cli 进入Redis数据库
exit 退出Redis数据库
sudo service redis start/stop/restart 启动/关闭/重启 乌班图 中的Redis数据库功能
select n Redis中默认有16个数据库,n为数据库编号0~15,无法新建数据库,默认选择 n=0
如何在Redis数据库中进行增删改查:
1、value为字符串类型时:
创建一个key为str_a,value为hello的数据对象:set key value :中文理解,设置key值,value值
set str_a hello
在上述例子中hello后面加一个_world:append key value :中文理解,在key对应的value后面追加当前value值
append str_a _world
查询str_a这个key对应的值:get key :中文理解,获取key对应数据(想到了python字典方法,根据key获取value)
get str_a 输出结果:"hello_world"
删除srt_a这个key的相关数据:del key:中文理解,删除key对应数据
del str_a 输出结果:(integer) 1
2、value为hash类型时:
什么是hash类型:即key:value对应类型,称hash类型,在此处可以简单用一个例子来理解 {key:{field:value}}
因为key太多了,防止理解偏差,所以hash类型中的key我们称作 field ----> 域
创建:hset key field value :中文理解下:采用 hash格式 设置 key值 field值 value值
hset hash_a a 1
我们都知道,字典内的键值对可以有很多,那么我们这个hash值内可以有多个值么,可以一次添加多个值么?答案是肯定可以啊,,,我们这种猪脑子都能想到的,写代码底层的人员肯定也会啊。
hmset hash_a b 2 c 3 d 4
增加:也用set,方法和上面一毛一样
改:同上+1
查看:查看的角度有点多,首先我们要知道去查什么!
查看指定的域的值:hget key field
hget hash_a a 输出结果:"1"
查看所有的域和值:hgetall key
hgetall hash_a 输出结果:太长了,自己敲去
查看所有的域:hkeys key:field本质上也是键值对的key,到这个指定的key里面,把里面一层的key都找出来
hkeys hash_a
查看所有的值:hvals key
hvals hash_a
3、当value值为列表时:
创建/增加数据:lpush/rpush key value : 中文理解:左边/右边增加 key中value的值,关键词lpush/rpush后面第一个单词为key,后面所有打包为列表作为value的值
rpush list_a 1 2 3 4 5 6
查看:lrange key start stop : l 代表 list 查看key对应值的索引,从start开始,到stop结束(包含头尾)
lrange list_a 0 3 输出结果是:1,2,3,4
如何查看对应索引取值呢?
lindex list 2 输出结果:3
修改:lset key index value: 中文理解: 列表格式设置key对应值的索引号值改为value值
lset list_a 3 333
然后去查看,会发现4变成了333
删除:rpop/lpop key :中文理解:左/右边开始删除一个数据(????python里面列表的pop删除方法????)
rpop list_a
这样,最后的6就没了
4、当value值为集合时:
创建/添加数据:sadd key member : 因为集合本身缩写是set,所以这里设置不能再用set了,干脆改成了add ---> + ,value因为无序性且不重复的特点,用member表示
sadd s_a 1 1 2 3 4 5 6
这里只存在了6个值,因为1,1,2,3,4,5,6 在这里面会以{1,2,3,4,5,6,}形式存在,而集合内元素不可以重复,两个1,只保留一个
查看: smembers key
smembers key
删除:spop key : 删除一个值,因为无序,所以....我也不知道他会删哪个,随缘吧
spop s_a
如果我不要随机删除呢,我就要把上述数据中的5删掉!
使用指定删除方法:srem key member (可以输入多个值,一起删除)
srem s_a 5
5、当value值为有序集合时:
什么是有序集合?就是有顺序的集合!有顺序是什么概念,有 索 引 【一个元素不能重复的列表!???】这其中有一个增加概念,分组,即某些元素被编成一组,编组与其他特性概念不冲突,无影响(即不影响顺序,无关索引)
创建/增加:zadd key score member [score2 member2...] : z代表有序集合zset zset格式创建/增加key值中 分组为score的value值(可以写好几个),有点绕,看代码
zadd zs_a 1 a 2 11 2 9 1 b
其中的1 2 为分组,a 11 9 b才是值,在这其中,a b 为1组,11 9 为2组,之所以为了这样,可能是为了方便删除?
查看:zrange key start stop : 有点眼熟?上面列表那块的查看方式?没毛病,毕竟我这里也是有顺序的【zset:其实我就是个有部分集合特征的列表 [/滑稽] 】
zrange zs_a 0 1
如果我要看1组内容呢?
分组查看:zrangebyscore key min max
zrangeby score zs_a 0 1
注意,后面要跟两个数字,偏偏这俩数字还包含头尾,,,,,单独查中间一组,我还需要进一步研究.....
删除:zrem key member
zrem zs_a b
一次删一个太慢,我要删一片儿:
1)上面那个方法,你后面多写几个值,可以一起删除;
2)根据索引删,切片形式删除:zremrangebyrank key min max
zremrangebyrank zs_a 0 1
3)除了索引,我们还有个分组:zremrangebyscore key min max
zremrangebyscore zs_a 0 1
至此,五种value表现形式下的增删改查基本全了,但除此之外,我们还有一套操作,针对你创建的数据整体,如果我们将上述内容比作表格,我们之前的操作就是在表格中对数据进行增删改查,那么,我们如何对表格本身进行增删改查呢?(如何对整体的key进行操作?)
补充点,全局方法:
查看所有数据的key值:
keys *
删除键值对:del key
del zs_a
查看key是否存在:exists key
exists list_a
修改key 的值:rename key new_key
rename str_a stra
设置有效时间,时间到了会自动删除,单位秒:expire key seconds
expire s_a 100
查看有效时间剩余:ttl key
ttl s_a
取消有效时间限制:prisist key
pristst s_a