Redis的常用操作命令

发表时间:2017-07-19 21:49:43 浏览量( 37 ) 留言数( 0 )

学习目标:

1、了解Redis的基本命令介绍


学习过程:

1、赋值与取值

      set key value  赋值

      get key   取值

重点是这个set 值

SET key value [EX seconds] [PX milliseconds] [NX|XX]

将字符串值 value 关联到 key 。

如果 key 已经持有其他值, SET 就覆写旧值,无视类型。

对于某个原本带有生存时间(TTL)的键来说, 当 SET 命令成功在这个键上执行时, 这个键原有的 TTL 将被清除。

可选参数:

  •     EX second :设置键的过期时间为 second 秒。 SET key value EX second 效果等同于 SETEX key second value 。

  •     PX millisecond :设置键的过期时间为 millisecond 毫秒。 SET key value PX millisecond 效果等同于 PSETEX key millisecond value 。

  •     NX :只在键不存在时,才对键进行设置操作。 SET key value NX 效果等同于 SETNX key value 。

  •     XX :只在键已经存在时,才对键进行设置操作。

示例:

先启动并进入客户端

[root@run1 bin]# ./redis-server /etc/redis.conf 

[root@run1 bin]# ./redis-cli 

127.0.0.1:6379> get name

"liubao"

127.0.0.1:6379> ttl name  # 查看剩余生存时间

(integer) -1

默认是-1表示永不过期。



#使用 EX 选项

127.0.0.1:6379> set expname "baobao" EX 5   # 设置过期时间为 5 秒

OK

127.0.0.1:6379> ttl expname  # 查看剩余生存时间

(integer) 2

127.0.0.1:6379> get expname # 过期就会查询不到了

(nil)


#也可以使用EXPIRE 设置过期时间

redis> SET cache_page "www.google.com"

OK

redis> EXPIRE cache_page 30  # 设置过期时间为 30 秒

(integer) 1

redis> TTL cache_page    # 查看剩余生存时间

(integer) 23

redis> EXPIRE cache_page 30000   # 更新过期时间

(integer) 1

redis> TTL cache_page

(integer) 29996


# 使用 PX 选项

127.0.0.1:6379> set pxname "baobao" px 6000

OK

127.0.0.1:6379> pttl pxname

(integer) 4231

127.0.0.1:6379> get pxname

"baobao"

127.0.0.1:6379> get pxname

(nil)


# 使用 NX 选项

127.0.0.1:6379> set extkey "baobao"

OK    # 键不存在,设置成功

127.0.0.1:6379> set extkey "abc" NX

(nil)   # 键已经存在,设置失败

127.0.0.1:6379> get extkey

"baobao"  # 原值没有修改成功



# 使用 XX 选项

127.0.0.1:6379> EXISTS exname 

(integer) 0 #判断释放存在 并不存在

127.0.0.1:6379> set exname "hello" XX

(nil)  # 因为键不存在,设置失败

127.0.0.1:6379> set exname "hello" 

OK  # 先给键设置一个值

127.0.0.1:6379> set exname "hello" XX

OK  # 设置新值成功

127.0.0.1:6379> set exname "abc" XX

OK # 设置新值成功

127.0.0.1:6379> get exname

"abc" #取得最新设置的值


2、keys 命令

    查找所有符合给定模式 pattern 的 key 。       

        ?    匹配一个字符

        *    匹配任意个(包括0个)字符

        []    匹配括号间的任一个字符,可以使用 "-" 符号表示一个范围,如 a[b-d] 可以匹配 "ab","ac","ad"

        \x    匹配字符x,用于转义符号,如果要匹配 "?" 就需要使用 \?

例如:

    KEYS * 匹配数据库中所有 key 。

    KEYS h?llo 匹配 hello , hallo 和 hxllo 等。

    KEYS h*llo 匹配 hllo 和 heeeeello 等。

    KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo 。

    特殊符号用 \ 隔开

    KEYS 的速度非常快,但在一个大的数据库中使用它仍然可能造成性能问题,如果你需要从一个数据集中查找特定的 key ,你最好还是用 Redis 的集合结构(set)来代替。

示例:

redis> MSET one 1 two 2 three 3 four 4  # 一次设置 4 个 key

OK

redis> KEYS *o*

1) "four"

2) "two"

3) "one"


redis> KEYS t??

1) "two"


redis> KEYS t[w]*

1) "two"


redis> KEYS *  # 匹配数据库内所有 key

1) "four"

2) "three"

3) "two"

4) "one"

3、判断一个键值是否存在

        exists key

   如果存在,返回整数类型 1 ,否则返回 0

   前面已经有示例了。


3、删除键

        del key [key.....]

        可以删除一个或多个键,返回值是删除的键的个数

        注意:不支持通配符删除,但是可以同事删除多个。

   示例:

127.0.0.1:6379> del exname

(integer) 1 #删除一个,并返回删除的个数

127.0.0.1:6379> del extkey name

(integer) 2 #同时删除两个

 

4、获得键值的数据类型

     type key

     返回值可能是 string(字符串类型) hash(散列类型) list(列表类型) set(集合类型) zset(有序集合类型)

    127.0.0.1:6379> set name liubao

    OK

    127.0.0.1:6379> type name

    string


5、递增数字

    这个命令虽然只是简单的加1,但是因为redis 所有的命令都是原子性的,因为后台是单线程。我们可以不用考虑并发的问题,可以方便的利用其功能实现简单的计数器功能,我们可以用来序列号生成方案(高并发和数据一致性的保证,以及断电数据不丢失,分布式扩展能力等优势),网站的技术器等等。

     incr key

        当要操作的键不存在时会默认键值为 0  ,所以第一次递增后的结果是 1 ,当键值不是整数时 redis会提示错误

示例:   

127.0.0.1:6379> SET viewcount 10

OK

127.0.0.1:6379> incr viewcount

(integer) 11


6、增加指定的整数

        incrby key increment

        incrby 命令与 incr 命令基本一样,只不过前者可以通过 increment 参数指定一次增加的数值如:

         

127.0.0.1:6379>  incrby num 2

(integer) 2 #一次加2

127.0.0.1:6379> get num

"2"

127.0.0.1:6379>  incrby num 3

(integer) 5 #一次加3

127.0.0.1:6379> get num

"5"

 

7、减少指定的整数

        decr key

        decrby key increment

        desc 命令与incr 命令用法相同,只不过是让键值递减

        decrby 命令与 incrby命令用法相同

 

8、增加指定浮点数

        incrbyfloat key increment

        incrbyfloat 命令类似 incrby 命令,差别是前者可以递增一个双精度浮点数,如:

        incrbyfloat num 2.7

        注意: ( 受reids 版本限制,版本需要大于 2.6 版本) 

 

9、向尾部追加值

        append key value

        作用是向键值的末尾追加 value ,如果键不存在则将改键的值设置为 value,即相当于 set key value。返回值是追加后字符串的长度

        如:append foo " hello word!"

  示例

127.0.0.1:6379> set name liu

OK

127.0.0.1:6379> append name bao

(integer) 6

127.0.0.1:6379> get name

"liubao"


10、获取字符串长度

        strlen key

        返回键值的长度,如果键不存在则返回0

 

127.0.0.1:6379> strlen name

(integer) 6

11、 同时 获得/设置 多个键值

        mget key [key.....]

        mset key value [key value .......]

     前面已经有示例了。


12、Redis 密码设置和查看密码

redis没有实现访问控制这个功能,但是它提供了一个轻量级的认证方式,可以编辑redis.conf配置来启用认证。

   1、初始化Redis密码:

   在配置文件中有个参数: requirepass  这个就是配置redis访问密码的参数;

   比如 requirepass test123;

   (Ps:需重启Redis才能生效)

   redis的查询速度是非常快的,外部用户一秒内可以尝试多大150K个密码;所以密码要尽量长(对于DBA 没有必要必须记住密码);


   2、不重启Redis设置密码:

   在配置文件中配置requirepass的密码(当redis重启时密码依然有效)。

   redis 127.0.0.1:6379> config set requirepass test123

   查询密码:

   redis 127.0.0.1:6379> config get requirepass

   (error) ERR operation not permitted

   密码验证:

   redis 127.0.0.1:6379> auth test123

   OK

   再次查询:

   redis 127.0.0.1:6379> config get requirepass

   1) "requirepass"

   2) "test123"

   PS:如果配置文件中没添加密码 那么redis重启后,密码失效;


   3、登陆有密码的Redis:

   在登录的时候的时候输入密码:

   redis-cli -p 6379 -a test123

   先登陆后验证:

   redis-cli -p 6379

   redis 127.0.0.1:6379> auth test123

   OK

   AUTH命令跟其他redis命令一样,是没有加密的;阻止不了攻击者在网络上窃取你的密码;

   认证层的目标是提供多一层的保护。如果防火墙或者用来保护redis的系统防御外部攻击失败的话,外部用户如果没有通过密码认证还是无法访问redis的。