Redis入门
Redis
1、查看redis进程状态
[root@iZwz9cblj816cr6br161xoZ ~]# ps -ef|grep redis # 查看Redis进程的状态
root 734 32446 0 15:31 pts/2 00:00:00 grep --color=auto redis
root 7591 1 0 Feb02 ? 01:20:47 redis-server *:6379
root 32346 31563 0 15:18 pts/0 00:00:00 redis-cli -p 6379
root 32528 32473 0 15:20 pts/3 00:00:00 redis-cli -p 6379
介绍 :string 数据结构是简单的 key-value 类型。虽然 Redis 是用 C 语言写的,但是 Redis 并没有使用 C 的字符串表示,而是自己构建了一种 简单动态字符串(simple dynamic string,SDS)。相比于 C 的原生字符串,Redis 的 SDS 不光可以保存文本数据还可以保存二进制数据,并且获取字符串长度复杂度为 O(1)(C 字符串为 O(N)),除此之外,Redis 的 SDS API 是安全的,不会造成缓冲区溢出。
- 常用命令 :
set,get,strlen,exists,dect,incr,setex
等等。 - 应用场景 :一般常用在需要计数的场景,比如用户的访问次数、热点文章的点赞转发数量等等。
1、String
127.0.0.1:6379> set name hzb # 设置name的值
OK
127.0.0.1:6379> set age 23 # 设置age的值
OK
127.0.0.1:6379> keys * # 获取所有的Key
1) "age"
2) "name"
127.0.0.1:6379> get name # 取出name里的值
"hzb"
127.0.0.1:6379> Exists name # 判断key为name的是否存在
(integer) 1
127.0.0.1:6379> Append name "is cool" # name后面拼接字符串“is Cool”
(integer) 10
127.0.0.1:6379> StrLen name # 查看字符串的长度
(integer) 10
127.0.0.1:
批量设置
127.0.0.1:6379> mset key1 value1 key2 value2 # 批量设置 key-value 类型的值
OK
127.0.0.1:6379> mget key1 key2 # 批量获取多个 key 对应的 value
1) "value1"
2) "value2"
清除数据库内容
127.0.0.1:6379> flushdb # 清空当前库的内容
OK
127.0.0.1:6379> flushAll # 清空所有库的内容
OK
自增1
127.0.0.1:6379> set views 0 # 设置views的值
OK
127.0.0.1:6379> INCR views # 设置key为views的自增1
(integer) 1
127.0.0.1:6379> get views # 取出key为views的值
"1"
127.0.0.1:6379> get views
"1"
127.0.0.1:6379> INCR views
(integer) 2
127.0.0.1:6379> get views
"2"
127.0.0.1:6379> INCRBY views 10 # 设置步长,一次增加10
(integer) 11
自减1
127.0.0.1:6379> decr views # 设置属性自减1
(integer) 1
127.0.0.1:6379> get views # 获取值
"1"
127.0.0.1:6379> set name "hzbisCool" # 设置key值
OK
127.0.0.1:6379> GETRANGE name 0 3 # 获取索引为0-3的值
"hzbi"
127.0.0.1:6379> GETRANGE name 0 -1 # 获取name的所有值
"hzbisCool"
127.0.0.1:6379> set key1 abcdef # 设置key1的值
OK
127.0.0.1:6379> get key1
"abcdef"
127.0.0.1:6379> SETRANGE key1 0 XX # 字符串替换
(integer) 6
127.0.0.1:6379> get key1
"XXcdef"
# setex (set with expire) # 设置过期时间
# setnx (set if not exist) # 不存在在设置 (在分布式锁中会常常使用!)
127.0.0.1:6379> setex key3 30 "hello" # 设置key3 的值为 hello,30秒后过期
OK
127.0.0.1:6379> ttl key3
(integer) 26
127.0.0.1:6379> get key3
"hello"
127.0.0.1:6379> setnx mykey "redis" # 如果mykey 不存在,创建mykey
(integer) 1
127.0.0.1:6379> keys *
1) "key2"
2) "mykey"
3) "key1"
127.0.0.1:6379> ttl key3
(integer) -2
127.0.0.1:6379> setnx mykey "MongoDB" # 如果mykey存在,创建失败!
(integer) 0
127.0.0.1:6379> get mykey
"redis"
##########################################################################
mset
mget
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 # 同时设置多个值
OK
127.0.0.1:6379> keys *
1) "k1"
2) "k2"
3) "k3"
127.0.0.1:6379> mget k1 k2 k3 # 同时获取多个值
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> msetnx k1 v1 k4 v4 # msetnx 是一个原子性的操作,要么一起成功,要么一起
失败!
(integer) 0
127.0.0.1:6379> get k4
(nil)
# 对象
set user:1 {name:zhangsan,age:3} # 设置一个user:1 对象 值为 json字符来保存一个对象!
# 这里的key是一个巧妙的设计: user:{id}:{filed} , 如此设计在Redis中是完全OK了!
127.0.0.1:6379> mset user:1:name zhangsan user:1:age 2
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "zhangsan"
2) "2"
##########################################################################
getset # 先get然后在set
127.0.0.1:6379> getset db redis # 如果不存在值,则返回 nil
(nil)
127.0.0.1:6379> get db
"redis
127.0.0.1:6379> getset db mongodb # 如果存在值,获取原来的值,并设置新的值
"redis"
127.0.0.1:6379> get db
"mongodb"
List
介绍 :list 即是 链表。链表是一种非常常见的数据结构,特点是易于数据元素的插入和删除并且且可以灵活调整链表长度,但是链表的随机访问困难。许多高级编程语言都内置了链表的实现比如 Java 中的 LinkedList,但是 C 语言并没有实现链表,所以 Redis 实现了自己的链表数据结构。Redis 的 list 的实现为一个 双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销。
- 常用命令: rpush,lpop,lpush,rpop,lrange、llen 等。
- 应用场景: 发布与订阅或者说消息队列、慢查询。
127.0.0.1:6379> rpush myList value1 # 向 list 的头部(右边)添加元素
(integer) 1
127.0.0.1:6379> rpush myList value2 value3 # 向list的头部(最右边)添加多个元素
(integer) 3
127.0.0.1:6379> lpop myList # 将 list的尾部(最左边)元素取出
"value1"
127.0.0.1:6379> lrange myList 0 1 # 查看对应下标的list列表, 0 为 start,1为 end
1) "value2"
2) "value3"
127.0.0.1:6379> lrange myList 0 -1 # 查看列表中的所有元素,-1表示倒数第一
1) "value2"
2) "value3"
通过 rpush/rpop 实现栈:
127.0.0.1:6379> rpush myList value1 value2 value3
(integer) 3
127.0.0.1:6379> rpop myList # 将 list的头部(最右边)元素取出
"value3"