redis-(原理&命令行操作)

redis-(原理&命令行操作)

 

常用网址:

https://redis.io/ 官网

http://www.redis.cn 中文网

 

1 Redis是什么

RedisREmote DIctionary Server(远程字典服务器)

是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(Key/Value)分布式内存数据库,基于内存运行,并支持持久化的NoSQL数据库,是当前最热门的NoSQL数据库之一,也被人们称为数据结构服器

Redis(key-value)三个特点

Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

Redis不仅仅支持简单的 key-value 类型的数据,同时还提供list、set、zset、hash等数据结构的存储。

Redis支持数据的备份,即master-slave模式的数据备份。

Redis能干嘛

内存存储和持久化:redis支持异步将内存中的数据写到硬盘上,同时不影响继续服务

取最新N个数据的操作,如:可以将最新的10条评论的ID放在Redis的List集合里面

发布、订阅消息系统

地图信息分析

定时器、计数器

......

特性

数据类型、基本操作和配置

持久化和复制,RDB、AOF

事务的控制

.....

 
redis介绍

 

2 基本数据库知识

默认16个数据库,类似数组下标从零开始,初始默认使用零号库
#查看 redis.conf ,里面有默认的配置
#databases 16

1.1 Select命令切换数据库 (# 不同的库可以存不同的数据)
127.0.0.1:6379> select 7
OK
127.0.0.1:6379[7]>

1.2 Dbsize查看当前数据库的key的数量
127.0.0.1:6379[7]> DBSIZE
(integer) 0

1.3  查看具体的key
127.0.0.1:6379> keys * 

1.4 清空数据库
Flushdb:清空当前库
Flushall:清空全部的库
基本操作

 

3 redis键

# keys * 查看所有的key
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set name qinjiang
OK
127.0.0.1:6379> keys *
1) "name"

# exists key 的名字,判断某个key是否存在
 127.0.0.1:6379> EXISTS name
 (integer) 1
 127.0.0.1:6379> EXISTS name1
 (integer) 0

 # move key db ---> 移除key到另一个库
 127.0.0.1:6379> move name 1
 (integer) 1
 127.0.0.1:6379> keys *
 (empty list or set)

  expire key 秒钟:为给定 key 设置生存时间,当 key 过期时(生存时间       
  为0 ),它会被自动删除。
 # ttl key 查看还有多少秒过期,-1 表示永不过期,-2 表示已过期
 127.0.0.1:6379> set name qinjiang
 OK
127.0.0.1:6379> EXPIRE name 10 # 10s后过期
 (integer) 1
 127.0.0.1:6379> ttl name
 (integer) 4
 127.0.0.1:6379> ttl name
 127.0.0.1:6379> ttl name
 (integer) 1
 127.0.0.1:6379> ttl name
 (integer) -2
 127.0.0.1:6379> keys *
 (empty list or set)

# type key 查看你的key是什么类型
 127.0.0.1:6379> set name qinjiang
 OK
 127.0.0.1:6379> get name
 "qinjiang"
 127.0.0.1:6379> type name
 string

 

3 String(字符串类型)

String数据结构是简单的key-value类型,value其实不仅可以是String,也可以是数字。常规key-value缓存应用:

常规计数:微博数,粉丝数等。

========================================
# setget、del、append、strlen
========================================
127.0.0.1:6379> set key1 value1  #设置值
OK
127.0.0.1:6379> get key1  #获得key
"value1"
127.0.0.1:6379> del key1  #删除key
(integer) 1

127.0.0.1:6379> keys * #查看全部的key
 (empty list or set)
 127.0.0.1:6379> exists key1  确保 key1 不存在
 (integer) 0

 127.0.0.1:6379> append key1 "hello" # 对不存在的 key 进行 
 APPEND ,等同于 SET key1 "hello"
 (integer) 5 ## 字符长度
127.0.0.1:6379> APPEND key1 "-2333" # 对已存在的字符串进行APPEND
 (integer) 10 # 长度从 5 个字符增加到 10 个字符
 127.0.0.1:6379> get key1 
 "hello-2333"
 127.0.0.1:6379> STRLEN key1  #  获取字符串的长度
 (integer) 10


========================================
 # incr、decr 一定要是数字才能进行加减,+1 和 -1。
 # incrby、decrby 命令将 key 中储存的数字加上指定的增量值。
 ========================================
127.0.0.1:6379> set views 0  # 设置浏览量为0
 OK
 127.0.0.1:6379> incr views  # 浏览+ 1
 (integer) 1
 127.0.0.1:6379> incr views  #  浏览+ 1
 (integer) 2
 127.0.0.1:6379> decr views  # 浏览- 1
 (integer) 1
 127.0.0.1:6379> incrby views 10  #+10
 (integer) 11
 127.0.0.1:6379> decrby views 10  #-10
 (integer) 1


#=======================================
 # range [范围]
 # getrange 获取指定区间范围内的值,类似between...and的关系,从零到负一表示全部
========================================
 127.0.0.1:6379> set key2 abcd123456 # 设置key2的值
 OK
 127.0.0.1:6379> getrange key2 0 -1  # 获得全部的值
 "abcd123456"
 127.0.0.1:6379> getrange key2 0 2 # 截取部分字符串
 "abc"


========================================
 # setrange 设置指定区间范围内的值,格式是setrange key值 具体值
========================================
 127.0.0.1:6379> get key2
 "abcd123456"
 127.0.0.1:6379> SETRANGE key2 1 xx  # 替换值
 (integer) 10
 127.0.0.1:6379> get key2
 "axxd123456"


========================================
 # setex(set with expire)键秒值
 # setnx(set if not exist)
========================================
 127.0.0.1:6379> setex key3 60 expire # 设置过期时间
 OK
 127.0.0.1:6379> ttl key3 # 查看剩余的时间
 (integer) 55
 127.0.0.1:6379> setnx mykey "redis" # 如果不存在就设置,成功返回1
 (integer) 1
 127.0.0.1:6379> setnx mykey "mongodb" # 如果存在就设置,失败返回0
 (integer) 0
 127.0.0.1:6379> get mykey
 "redis"


========================================
 # mset   Mset 命令用于同时设置一个或多个 key-value 对。
 # mset   Mget 命令返回所有(一个或多个)给定 key 的值。
# 如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值nil 。
# msetnx  当所有 key 都成功设置,返回 1 
#如果所有给定 key 都设置失败(至少有一个 key 已经存在),那么返回 0原子操作
========================================
 127.0.0.1:6379> mset k10 v10 k11 v11 k12 v12
 OK
 127.0.0.1:6379> keys *
 1) "k12"
 2) "k11"
 3) "k10"
 127.0.0.1:6379> mget k10 k11 k12 k13
 1) "v10"
 2) "v11"
 3) "v12"
 4) (nil)
 127.0.0.1:6379> msetnx k10 v10 k15 v15 # 原子性操作!
 (integer) 0
 127.0.0.1:6379> get key15
 (nil)

# 传统对象缓存
 set user:1 value(json数据)

 # 可以用来缓存对象
 mset user:1:name zhangsan user:1:age 2
 mget user:1:name user:1:age


========================================
 # getset(先get再set)
========================================
 127.0.0.1:6379> getset db mongodb  # 没有旧值,返回 nil
 (nil)
 127.0.0.1:6379> get db
 "mongodb"
 127.0.0.1:6379> getset db redis  # 返回旧值 mongodb
 "mongodb"
 127.0.0.1:6379> get db
 "redis"
string

 

4 列表List(单值多Value)

最新消息排行,消息队列

========================================
# Lpush:将一个或多个值插入到列表头部。(左)
# rpush:将一个或多个值插入到列表尾部。(右)
# lrange:返回列表中指定区间内的元素,区间以偏移量 START 和 END指定。
# 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。
# 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
========================================
127.0.0.1:6379> LPUSH list "one"
(integer) 1
 127.0.0.1:6379> LPUSH list "two"
 (integer) 2 
 127.0.0.1:6379> RPUSH list "right"
 (integer) 3
 127.0.0.1:6379> Lrange list 0 -1
 1) "two"
 2) "one"
 3) "right"
 127.0.0.1:6379> Lrange list 0 1
 1) "two"
 2) "one"



========================================
 # lpop 命令用于移除并返回列表的第一个元素。当列表 key 不存在时,返回 nil 。
 # rpop 移除列表的最后一个元素,返回值为移除的元素。
===================================================
 127.0.0.1:6379> Lpop list
 "two"
 127.0.0.1:6379> Rpop list
 "right"
 127.0.0.1:6379> Lrange list 0 -1
 1) "one"



========================================
# Lindex,按照索引下标获得元素(-1代表最后一个,0代表是第一个)
========================================
 127.0.0.1:6379> Lindex list 1
 (nil)
 127.0.0.1:6379> Lindex list 0
 "one"
 127.0.0.1:6379> Lindex list -1
 "one"


 ========================================
 # llen 用于返回列表的长度。
========================================
 127.0.0.1:6379> flushdb
 OK
 127.0.0.1:6379> Lpush list "one"
 (integer) 1
 127.0.0.1:6379> Lpush list "two"
 (integer) 2
 127.0.0.1:6379> Lpush list "three"
 (integer) 3
 127.0.0.1:6379> Llen list  # 返回列表的长度
 (integer) 3


========================================
 # lrem key 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。 ========================================
 127.0.0.1:6379> lrem list 1 "two"
 (integer) 1
 127.0.0.1:6379> Lrange list 0 -1
 1) "three"
 2) "one"



========================================
 # Ltrim key 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区
间之内的元素都将被删除。
========================================
127.0.0.1:6379> RPUSH mylist "hello"
 (integer) 1
 127.0.0.1:6379> RPUSH mylist "hello"
 (integer) 2
 127.0.0.1:6379> RPUSH mylist "hello2"
 (integer) 3
 127.0.0.1:6379> RPUSH mylist "hello3"
 (integer) 4
 127.0.0.1:6379> ltrim mylist 1 2
 OK
 127.0.0.1:6379> lrange mylist 0 -1
 1) "hello"
 2) "hello2"



========================================
 # rpoplpush 移除列表的最后一个元素,并将该元素添加到另一个列表并返回。
========================================
 127.0.0.1:6379> rpush mylist "hello"
 (integer) 1
 127.0.0.1:6379> rpush mylist "foo"
 (integer) 2
 127.0.0.1:6379> rpush mylist "bar"
 (integer) 3
 127.0.0.1:6379> rpoplpush mylist myotherlist
 "bar"
 127.0.0.1:6379> lrange mylist 0 -1
 1) "hello"
 2) "foo"
 127.0.0.1:6379> lrange myotherlist 0 -1
 1) "bar"



 ========================================
# lset key index value 将列表 key 下标为 index 的元素的值设置为 value 。
========================================
 127.0.0.1:6379> exists list # 对空列表(key 不存在)进行 LSET
 (integer) 0
 127.0.0.1:6379> lset list 0 item # 报错
 (error) ERR no such key
 127.0.0.1:6379> lpush list "value1" # 对非空列表进行 LSET
 (integer) 1
 127.0.0.1:6379> lrange list 0 0
 1) "value1"
 127.0.0.1:6379> lset list 0 "new" # 更新值
 OK
 127.0.0.1:6379> lrange list 0 0
 1) "new"
 127.0.0.1:6379> lset list 1 "new" # index 超出范围报错
 (error) ERR index out of range



======================================== # linsert key before/after pivot value 用于在列表的元素前或者后插入元素。
 # 将值 value 插入到列表 key 当中,位于值 pivot 之前或之后。
========================================
 redis> RPUSH mylist "Hello"
 (integer) 1
 redis> RPUSH mylist "World"
 (integer) 2
 redis> LINSERT mylist BEFORE "World" "There"
 (integer) 3
 redis> LRANGE mylist 0 -1
 1) "Hello"
 2) "There"
 3) "World"
list

 

posted @ 2021-12-28 16:50  风hua  阅读(102)  评论(0)    收藏  举报