数据库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 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  

相关推荐