入门redis必知的基础知识

    xiaoxiao2025-08-30  39

    网上有很多的教程,但是大多数都零零散散。入门redis的同学看起来很困难,所以这里总结了一些基础知识。

     

    1.redis是什么?

      Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

    对的redis就是一个存键值对的数据库,它不仅支持简单的key-value类型的数据,同时还提供listsetzsethash等数据结构的存储。【我习惯于存简单的key-value(value都是写成需要数据结构的对象)】。

     

    2.redis使用场景

      1.取最新N个数据的操作

      2.排行榜应用,TOP N 操作

      3.需要精确设定过期时间的应用

      4.计数器应用

      由于INCR等指令本身就具有原子操作的特性,所以我们完全可以利用redisINCRINCRBYDECRDECRBY等指令来实现原子计数的 效果,假如,在某种场景下有3

    客户端同时读取了mynum的值(值为2),然后对其同时进行了加1的操作,那么,最后mynum的值一定是5。不少网站 都利用redis的这个特性来实现业务上的统计计数需求。

      5.Uniq操作,获取某段时间所有数据排重值

      6.实时系统,反垃圾系统

      7.Pub/Sub构建实时消息系统

      8.构建队列系统

      9.缓存

    最多的是用做缓存。他的操作所读是mysql10倍不止。SET操作每秒钟 110000 ,GET操作每秒钟 81000 次。

     

    3.redis数据结构

    上边已经说了redis是一种高级的key:value存储系统,其中value支持五种数据类型:

    1.字符串(strings 2.字符串列表(lists 3.字符串集合(sets 4.有序字符串集合(sorted sets 5.哈希(hashes

    3.1.key

    1.key不要太长,尽量不要超过1024字节,这不仅消耗内存,而且会降低查找的效率; 2.key也不要太短,太短的话,key的可读性会降低; 3.在一个项目中,key最好使用统一的命名模式,例如power_loginname

    3.2.字符串(strings

    strings类型是一个很基础的数据类型,也是任何存储系统都必备的数据类型.

    操作如下:

    set myredis 'kmonkeywyl'get myredis

    注:在遇到非字符串类型比如intredis会默认转为string.

    3.3.字符串列表(lists

      redis中的lists在底层实现上并不是数组,而是链表.所以插入数据快,但定位性能操作较差。

    lists的常用操作包括lpushrpushlpushlrange

    操作如下:

     

    //新建一个list叫做mylist,并在列表头部插入元素"1"

    lpush mylist "1"

    //mylist右侧插入元素"2"

    rpush mylist "2"

    //mylist左侧插入元素"0"

    lpush mylist "0"

    //列出mylist中从编号0到编号1的元素

    lrange mylist 0 1

    //列出mylist中从编号0到倒数第一个元素

    lrange mylist 0 -1

     

      注:上边应用场景128都用到lists就会很方便,具体应用场景(消息队列,分页,博客评论)

    3.3.字符串集合(sets

    集合对于我们来说应该不陌生,就是我们初中学的那个集合,针对于集合有几个概念不知道你还熟悉不?取交集、取并集、取差,不熟悉的自己去熟悉去吧。

    操作如下:

     

    //向集合myset中加入新元素"wyl"

    sadd myset "wyl"

    (integer) 1

    sadd myset "kmonkey"

    (integer) 1

    //列出集合myset中的所有元素

    smembers myset

    1) "wyl"

    2) "kmonkey"

    //判断元素1是否在集合myset中,返回1表示存在

    sismember myset "wyl"

    (integer) 1

    //判断元素是否在集合myset中,返回0表示不存在

    sismember myset "wangyanling"

    (integer) 0

    //新建一个新的集合yourset

    sadd yourset "1"

    (integer) 1

    sadd yourset "2"

    (integer) 1

    smembers yourset

    1) "1"

    2) "2"

    //对两个集合求并集

    sunion myset yourset

    1) "1"

    2) "wyl"

    3) "2"

    4) "kmonkey"

    3.4.有序字符串集合(sorted sets

    和上边的无须集合唯一的差别是有序的每个元素都有一个序号score,主要是便于排序

    操作如下:

     

    zadd myzset 1 baidu.com

    (integer) 1

    //myzset中新增一个元素360.com,赋予它的序号是3

    zadd myzset 3 360.com

    (integer) 1

    //myzset中新增一个元素google.com,赋予它的序号是2

     zadd myzset 2 google.com

    (integer) 1

    //列出myzset的所有元素,同时列出其序号,可以看出myzset已经是有序的了。

    zrange myzset 0 -1 with scores

    1) "baidu.com"

    2) "1"

    3) "google.com"

    4) "2"

    5) "360.com"

    6) "3"

    //只列出myzset的元素

     zrange myzset 0 -1

    1) "baidu.com"

    2) "google.com"

    3) "360.com"

    3.5.哈希(hashes

    这就和结构数据库类似了。我是不喜欢在redis中使用hashes的。

    操作如下

     

    //建立哈希,并赋值

    HMSET user:001 username wylpassword 111 age 34

    OK

    //列出哈希的内容

    127.0.0.1:6379> HGETALL user:001

    1) "username"

    2) "wyl"

    3) "password"

    4) "111"

    5) "age"

    6) "34"

    //更改哈希中的某一个值

    HSET user:001 password 12345

    (integer) 0

    //再次列出哈希的内容

    127.0.0.1:6379> HGETALL user:001

    1) "username"

    2) "wyl"

    3) "password"

    4) "12345"

    5) "age"

    6) "34"

     

     

    原文来自:博客园/kmonkey

    转载请注明原文地址: https://ju.6miu.com/read-1302119.html
    最新回复(0)