Redis数据库简介及基本操作

一:简介

redis 数据库是一个基于内存存储的数据库,所以,redis数据库的访问速度极快,因此,redis数据库可以做缓存系统,redis数据库一般用于做分布式的集群,可以提高网站的响应速度,redis数据库的数据库存储是用key-value形式存储的

二:redis数据库优点

  1. redis数据库开源免费
  2. redis数据库支持多种数据结构,比如:字符串,列表,哈希表,集合(有序集合和无序集合)
  3. 支持原子操作,支持事务
  4. 支持发布和订阅
  5. 支持数据过期功能
  6. 对数据有高可用性和可扩展性

三:redis和memcache的区别

  1. redis和memcache都是基于内存存储的数据库。
  2. redis数据库可以用来存储数据,memcache用来做缓存
  3. 对于redis数据库来说,存储的数据库结构有多种,但是对于mencache数据库来说,存储的内容只能是字符串类型
  4. memcached数据库和redis数据库相比,延迟要低一点

四:redis数据库操作

redis数据库默认有16个数据库[0~15],默认进入的是0库

select 数据库名:切换数据库

keys *:查看所有的键

expire 键 秒数:设置过期时间

persist 键:移除过期时间

del 键:指定键进行删除。返回值代表删除的个数。

flushdb:清空当前数据库中的所有内容

flushall:清空所有数据库的所有内容

(一):字符串的操作
  1. set key value:设置一个键值对,返回ok代表设置成功。如果对同一个key设置不同值,相当于修改

    127.0.0.1:6379> select 1
    OK
    127.0.0.1:6379[1]> keys *
    (empty array)
    127.0.0.1:6379[1]> set name zhangsan
    OK
    127.0.0.1:6379[1]> keys *
    1) "name"
    
  2. get key:获取对应键的值

    127.0.0.1:6379[1]> get name
    "zhangsan"
    127.0.0.1:6379[1]> set name lisi
    OK
    127.0.0.1:6379[1]> get name
    "lisi"
    
  3. setnx key value:设置一个键值对,如果键存在,不会覆盖,不存在则设置

    127.0.0.1:6379[1]> setnx name zhangsan
    (integer) 0
    127.0.0.1:6379[1]> get name
    "lisi"
    127.0.0.1:6379[1]> setnx age 20
    (integer) 1
    127.0.0.1:6379[1]> keys *
    1) "age"
    2) "name"
    127.0.0.1:6379[1]> get age
    "20"
    127.0.0.1:6379[1]> 
    
  4. setex key 秒数 value:设置一个指定有效期的键值对

    127.0.0.1:6379[1]> setex age 10 18
    OK
    127.0.0.1:6379[1]> get age     # 10秒前输入
    "18"
    127.0.0.1:6379[1]> get age     # 10秒后输入
    (nil)
    127.0.0.1:6379[1]> 
    
  5. setrange key 偏移量(索引) value:替换,从偏移量的位置开始替换,返回值是替换后的字符串的长度

    127.0.0.1:6379[1]> setrange name 1 hh
    (integer) 4
    127.0.0.1:6379[1]> get name
    "lhhi"
    127.0.0.1:6379[1]> setrange name 2 helllo
    (integer) 8
    127.0.0.1:6379[1]> get name
    "lhhelllo"
    
  6. mset key1 value1 key2 value2 …:批量设置键值对

    127.0.0.1:6379[1]> mset gender man hobby skate
    OK
    127.0.0.1:6379[1]> keys *
    1) "hobby"
    2) "gender"
    3) "name"
    
  7. mget key1 key2 …:批量获取

    127.0.0.1:6379[1]> mget hobby gender name
    1) "skate"
    2) "man"
    3) "lhhelllo"
    
  8. msetnx key1 value1 key2 value2 …:批量设置键值对,如果有键存在不会进行设置,不存在则创建。

    127.0.0.1:6379[1]> msetnx height 56 name zhangsan
    (integer) 0
    127.0.0.1:6379[1]> keys *
    1) "hobby"
    2) "name"
    3) "gender"
    127.0.0.1:6379[1]> msetnx height 56 weight 178
    (integer) 1
    127.0.0.1:6379[1]> keys *
    1) "hobby"
    2) "gender"
    3) "name"
    4) "height"
    5) "weight"
    
  9. getset key new_value:获取key的原值,设置新值,返回值是原值

    127.0.0.1:6379[1]> getset name zhangsan
    "lhhelllo"
    127.0.0.1:6379[1]> get name
    "zhangsan"
    
  10. getrange key start end:获取指定范围的内容,范围为左闭右闭

    127.0.0.1:6379[1]> getrange name 0 4
    "zhang"
    
  11. incr key:给对应键的值++,即加1

    127.0.0.1:6379[1]> get height
    "56"
    127.0.0.1:6379[1]> incr height
    (integer) 57
    127.0.0.1:6379[1]> get height
    "57"
    127.0.0.1:6379[1]> 
    
  12. incrby key value:给对应键的值加上指定的数

    127.0.0.1:6379[1]> get height
    "57"
    127.0.0.1:6379[1]> incrby height 5
    (integer) 62
    127.0.0.1:6379[1]> get height
    "62"
    
  13. decr key:给对应键的值–,即减1

    27.0.0.1:6379[1]> get height
    "62"
    127.0.0.1:6379[1]> decr height
    (integer) 61
    127.0.0.1:6379[1]> get height
    "61"
    
  14. decrby key value:给对应键减去相应的值

    127.0.0.1:6379[1]> get height
    "61"
    127.0.0.1:6379[1]> decrby height 10
    (integer) 51
    127.0.0.1:6379[1]> get height
    "51"
    
  15. append key value:给指定的键追加指定的值,返回值是增加后的总长度

    127.0.0.1:6379[1]> append name jjj
    (integer) 11
    127.0.0.1:6379[1]> get name
    "zhangsanjjj"
    127.0.0.1:6379[1]> append height jjj
    (integer) 5
    127.0.0.1:6379[1]> get height
    "51jjj"
    
  16. strlen key:查看字符串的长度

    127.0.0.1:6379[1]> strlen name
    (integer) 11
    127.0.0.1:6379[1]> strlen height
    (integer) 5
    
(二):列表操作

Redis数据库中的列表是双向链表结构,基于这种结构,redis数据库的列表可以实现栈和队列。

  1. lpush key value:在列表头部插入元素,返回值代表添加后的列表的长度

    127.0.0.1:6379[1]> lpush name zhangsan
    (integer) 1
    127.0.0.1:6379[1]> keys *
    1) "name"
    127.0.0.1:6379[1]> lpush name lisi
    (integer) 2
    127.0.0.1:6379[1]> keys *
    1) "name"
    127.0.0.1:6379[1]> lpush name lisi
    (integer) 3
    
  2. lrange key start end:查看列表中指定范围的元素

    127.0.0.1:6379[1]> lrange name 0 2
    1) "lisi"
    2) "lisi"
    3) "zhangsan"
    
  3. rpush key value:在列表尾部插入元素

    127.0.0.1:6379[1]> rpush name wangwu zhaoliu
    (integer) 5
    127.0.0.1:6379[1]> lrange name 0 -1
    1) "lisi"
    2) "lisi"
    3) "zhangsan"
    4) "wangwu"
    5) "zhaoliu"
    
  4. lpop key:从头部弹出一个元素,返回值是删除的那个元素

    127.0.0.1:6379[1]> lpop name
    "lisi"
    127.0.0.1:6379[1]> lrange name 0 -1
    1) "lisi"
    2) "zhangsan"
    3) "wangwu"
    4) "zhaoliu"
    
  5. rpop key:从尾部弹出一个元素,返回值是删除的那个元素

    127.0.0.1:6379[1]> rpop name
    "zhaoliu"
    127.0.0.1:6379[1]> lrange name 0 -1
    1) "lisi"
    2) "zhangsan"
    3) "wangwu"
    
  6. linsert key BEFORE|AFTER 值 新值,在原有元素之前或之后插入一个元素,返回值是插入之后的列表的长度

    127.0.0.1:6379[1]> linsert name AFTER zhangsan zhaoliu
    (integer) 4
    127.0.0.1:6379[1]> lrange name 0 -1
    1) "lisi"
    2) "zhangsan"
    3) "zhaoliu"
    4) "wangwu"
    
  7. lset key 索引 新值,修改指定索引位置上的元素

    127.0.0.1:6379[1]> lset name 2 xiaoming
    OK
    127.0.0.1:6379[1]> lrange name 0 -1
    1) "lisi"
    2) "zhangsan"
    3) "xiaoming"
    4) "wangwu"
    
  8. lrem key count value,从key中删除指定数量的元素,

    count > 0 代表头部删除

    count < 0 代表尾部删除

    count = 0 代表全部删除

    127.0.0.1:6379[1]> lrem name -2 wangwu
    (integer) 1
    127.0.0.1:6379[1]> lrange name 0 -1
    1) "lisi"
    2) "zhangsan"
    3) "xiaoming"
    
  9. ltrim key start end,保留[start,end]范围内的元素,或者删除[start,end]范围外的元素

    127.0.0.1:6379[1]> lrange name 0 -1
    1) "lisi"
    2) "zhangsan"
    3) "xiaoming"
    127.0.0.1:6379[1]> ltrim name 1 1
    OK
    127.0.0.1:6379[1]> lrange name 0 -1
    1) "zhangsan"
    
  10. lindex key 索引,查看指定索引上的元素

    127.0.0.1:6379[1]> rpush name lisi wangwu zhaoliu
    (integer) 4
    127.0.0.1:6379[1]> lrange name 0 -1 
    1) "zhangsan"
    2) "lisi"
    3) "wangwu"
    4) "zhaoliu"
    127.0.0.1:6379[1]> lindex name 2
    "wangwu"
    
  11. llen key,查看键的长度

    127.0.0.1:6379[1]> llen name
    (integer) 4
    
  12. rpoplpush,从key1的尾部删除元素,将删除的元素添加到key2的头部,返回值是删除的元素

    127.0.0.1:6379[1]> lpush age 18 27 24 20
    (integer) 4
    127.0.0.1:6379[1]> rpoplpush name age
    "zhaoliu"
    127.0.0.1:6379[1]> lrange name 0 -1
    1) "zhangsan"
    2) "lisi"
    3) "wangwu"
    127.0.0.1:6379[1]> lrange age 0 -1
    1) "zhaoliu"
    2) "20"
    3) "24"
    4) "27"
    5) "18"
    
三:Redis数据库中的无序集合

集合是没有重复元素的,故可用来进行数据的去重

  1. sadd key member1 member2 …,向集合中插入多个元素,返回值是插入成功的元素的数量

    127.0.0.1:6379[1]> select 2
    OK
    127.0.0.1:6379[2]> sadd name zhangsan lisi wangwu
    (integer) 3
    
  2. smembers key,查看集合中的元素数量

    127.0.0.1:6379[2]> smembers name
    1) "lisi"
    2) "zhangsan"
    3) "wangwu"
    127.0.0.1:6379[2]> 
    
  3. srem key value1 value2 …,指定成员进行删除,返回值是删除成功的元素的数量

    127.0.0.1:6379[2]> srem name lisi zhangsan 
    (integer) 2
    127.0.0.1:6379[2]> smembers name
    1) "wangwu"
    
  4. spop key count,从集合中随机弹出count个元素,默认弹出1个,返回值是弹出的元素

    127.0.0.1:6379[2]> sadd name zhangsan lisi zhaoliu wangwu xiaoming
    (integer) 4
    127.0.0.1:6379[2]> spop name 2
    1) "zhaoliu"
    2) "xiaoming"
    127.0.0.1:6379[2]> smembers name 
    1) "lisi"
    2) "zhangsan"
    3) "wangwu"
    
  5. srandmember key count,随机获取count个元素,默认获取一个,返回值是获取的元素

    127.0.0.1:6379[2]> srandmember name 2
    1) "lisi"
    2) "wangwu"
    
  6. smove key1 key2 value,将key1中的value移动到key2中

    127.0.0.1:6379[2]> sadd age 12 30 20
    (integer) 3
    127.0.0.1:6379[2]> smembers age
    1) "12"
    2) "20"
    3) "30"
    127.0.0.1:6379[2]> smove age name 20
    (integer) 1
    127.0.0.1:6379[2]> smembers age
    1) "12"
    2) "30"
    127.0.0.1:6379[2]> smembers name
    1) "lisi"
    2) "zhangsan"
    3) "20"
    4) "wangwu"
    
  7. scard key,查看集合长度

    127.0.0.1:6379[2]> scard name
    (integer) 4
    
  8. sdiff key1 key2,查看两个集合中的差集

    127.0.0.1:6379[2]> sadd name2 zhangsan wangwu zhaoliu
    (integer) 3
    127.0.0.1:6379[2]> sdiff name name2
    1) "lisi"
    2) "20"
    
  9. sinter key1 key2,查看两个集合的交集

    127.0.0.1:6379[2]> sinter name name2
    1) "zhangsan"
    2) "wangwu"
    
  10. sunion key1 key2,查看两个集合的并集

    127.0.0.1:6379[2]> sunion name name2
    1) "wangwu"
    2) "20"
    3) "lisi"
    4) "zhangsan"
    5) "zhaoliu"
    
  11. sismember key value,判断value是否在集合中存在,返回值1代表存在,返回值0代表不存在

    127.0.0.1:6379[2]> sismember name zhangsan 
    (integer) 1
    127.0.0.1:6379[2]> sismember name xiaoming
    (integer) 0
    
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐