您的位置:首页 > 数据库 > Redis

NoSql——redis(基础)

2015-08-31 15:04 786 查看

一、基础知识

  Redis是什么就不多说了,这篇博客说一下Redis的一些常见操作

 安装:

  1、下载地址https://github.com/dmajkic/redis/downloads。

  下载到的Redis支持32bit和64bit。根据自己实际情况选择,我选择32bit。把32bit文件内容拷贝到需要安装的目录下,比如:D:\dev\redis-2.4.5。打开一个cmd窗口,使用cd命令切换到指定目录(D:\dev\redis-2.4.5)运行 redis-server.exe redis.conf 。运行以后出现如下界面。



  2、这就说明Redis服务端已经安装成功。

  重新打开一个cmd窗口,使用cd命令切换到指定目录(D:\dev\redis-2.4.5)运行redis-cli.exe -h 127.0.0.1 -p 6379,其中127.0.0.1是本地ip,6379是redis服务端的默认端口。运行成功如下图所示。



  3、通过自定义bat启动

    类似mongoDB那样,将服务路径配置到环境变量中

  1、将D:\test\redis\32bit  添加到path中

  2、编写脚本

   redis-start.bat

    redis-server.exe

   redis-client.bat

    redis-cli.exe -h 127.0.0.1 -p 6379

二、数据类型

 String类型

  常用操作  

1、set和get
set admin "leilei"          设置key为admin的value为leilei
get  admin                  获取admin的value

2、setnx命令,如果存在返回0,如果不存在返回1

3、mset和mget
mset name "leilei" age 25 sex "man"
mget name age sex
1) "leilei"
2) "25"
3) "man"
4、setex,指定键值对应的有效期
setex name 10 leilei                     设置name 有效期为10秒
redis 127.0.0.1:6379> get name
"leilei"
redis 127.0.0.1:6379> get name
(nil)
5、setrange,从某位置开始,替换字符串,如果要替换的字符串长度超过原来的,全部替换,否则,会保留一部分原来的字符串
set email zllaptx4869@163.com
OK
get email
"zllaptx4869@163.com"
setrange email 12 qq.com              从第12位开始,替换字符串
(integer) 19
redis 127.0.0.1:6379> get email
"zllaptx4869@qq.comm"

6、incr,递增,必须是Integer类型
get age
"28"
incr age
(integer) 29

7、incrby,一次递增多少  语法:incrby key  integer
get age
"31"
incrby age 2
(integer) 33
8、decr  和decrby  递减操作
get age
"30"
decr age
(integer) 29
decrby age 9
(integer) 20
9、append,追加

get email
"zllaptx4869@qq.comm"
append email 123
(integer) 22
get email
"zllaptx4869@qq.comm123"

10、strlen,获取key的长度
strlen email
(integer) 22


 Hash类型,适合存取对象

  常用操作

1、hset和hget
很挫的写法
hset person name leilei  ————设置hash表名称为person中的一个name 属性为leilei
(integer) 1
(2.35s)
hset person age 23
(integer) 1
hset person sex 男
(integer) 1
hget person sex
"\xc4\xd0"
hget person name
"leilei"
hget person age
"23"
标准写法:
设置
person中编号为001的person的name age 和sex
hset person:001 name leilei
(integer) 1
hset person:001 age 23
(integer) 1
hset person:001 sex man
(integer) 1

获取
hget person:001 name
"leilei"
hget person:001 age
"23"
hmget person:001 age sex name
1) "23"
2) "man"
3) "leilei"

2、hsetnx,同理setnx

3、hmset和hmget,同理mset和mget

4、hincrby同理incrby

5、hexists,判断key是否存在,如果存在,返回1,不存在返回0
hexists person:001 name
(integer) 1
hexists person:001 big
(integer) 0

6、 hlen,获取某个hash表的长度
hlen person:001
(integer) 3

7、hdel,删除hash表中的某个字段

hkeys person:001
1) "name"
2) "age"
3) "sex"
hdel person:001 sex
(integer) 1
hkeys person:001
1) "name"
2) "age"

8、hkeys 获取hash表中的所有keys
hkeys person:001
1) "name"
2) "age"
3) "sex"

9、hvals 获取hash表中的所有values
hkeys person:001
1) "name"
2) "age"
hvals person:001
1) "leilei"
2) "25"

10、hgetall 获取key和value
hgetall person:001
1) "name"
2) "leilei"
3) "age"
4) "25"


 List双向链表结构

  常用操作

1、lpush 从头部添加元素——栈
lpush mylist user1
(integer) 1
lpush mylist user2
(integer) 2
lpush mylist user3
(integer) 3
lrange mylist 0 -1
1) "user3"
2) "user2"
3) "user1"

2、lrange mylist 0 -1 表示,取正序第一个到倒序第一个,也就是全的链表中的全部数据

3、rpush  从尾部添加元素——队列
rpush mylist user4
(integer) 4
lrange mylist 0 -1
1) "user3"
2) "user2"
3) "user1"
4) "user4"

4、linsert 从中间插入,都是针对出来的顺序而言的

before:
linsert mylist before "user1" "user7"               在user1前面插入user7
(integer) 7
(2.31s)
lrange mylist 0 -1
1) "user3"
2) "user2"
3) "user7"
4) "user1"
5) "user4"
6) "user5"
7) "user6"

after:
linsert myduilie after user3 user5
(integer) 5
lrange myduilie 0 -1
1) "user1"
2) "user4"
3) "user2"
4) "user3"
5) "user5"

5、lset,针对出来的顺序而言
lset myduilie 0 user8  设置myduilie的第一个元素为user8
OK
lrange myduilie 0 -1
1) "user8"
2) "user4"
3) "user2"
4) "user5"
5) "user3"

6、lrem,从list中删除n个指定元素
rpush myduilie user1
(integer) 1
rpush myduilie user2
(integer) 2
rpush myduilie user3
(integer) 3
rpush myduilie user1
(integer) 4
lrange myduilie 0 -1
1) "user1"
2) "user2"
3) "user3"
4) "user1"
lrem myduilie 1 user1           从队列中删除1个user1
(integer) 1
lrem myduilie 1 user1
(integer) 1
lrem myduilie 1 user1
(integer) 0

rpush myduilie user1

rpush myduilie user1

rpush myduilie user1

lrem myduilie 3 user1   从队列中删除3个user1

7、ltrim,保留指定范围内的数据
lrange myzhan 0 -1
1) "user5"
2) "user4"
3) "user3"
4) "user2"
5) "user1"
ltrim myzhan 2 -1   保存下标2开始到最后的一个元素
OK
lrange myzhan 0 -1
1) "user3"
2) "user2"
3) "user1"

8、lpop,从list的头部删除元素,并返回删除的元素,这里的头部指的是出来的地方
1) "user4"
2) "user3"
3) "user2"
4) "user1"
lpop myzhan
"user4"
lrange myzhan 0 -1
1) "user3"
2) "user2"
3) "user1"

9、rpop,从list的尾部删除元素

10、lindex,查看索引对应的key
lrange myduilie 0 -1
1) "user1"
2) "user2"
3) "user3"
4) "user4"
lindex myduilie 0
"user1"
lindex myduilie 1
                "user2"


 Set类型

  常用操作

1、sadd  添加元素
sadd myset user1
sadd myset user2
sadd myset user3

2、smembers 查看元素
smembers myset
1) "user1"
2) "user2"
3) "user3"

3、srem  删除元素
srem myset user1
(integer) 1
smembers myset
1) "user2"
2) "user3"

4、spop  随机删除set中的一个key,并返回该key
spop myset
"user3"

5、sdiff  返回差集
redis 127.0.0.1:6379> sadd myset1 user1
(integer) 1
redis 127.0.0.1:6379> sadd myset1 user2
(integer) 1
redis 127.0.0.1:6379> sadd myset1 user3
(integer) 1
redis 127.0.0.1:6379> sadd myset1 user4
(integer) 1
redis 127.0.0.1:6379> sadd myset2 user3
(integer) 1
redis 127.0.0.1:6379> sadd myset2 user4
(integer) 1
redis 127.0.0.1:6379> sadd myset2 user5
(integer) 1
redis 127.0.0.1:6379> sdiff myset1 myset2
1) "user1"
2) "user2"
redis 127.0.0.1:6379> sdiff myset2 myset1
1) "user5"

6、sdiffstore  返回差集并存储到另一个set中去
sdiffstore myset4 myset2 myset1  返回myset2与myset1的差集,并将结果存取到myset4中
(integer) 1
smembers myset4
1) "user5"

7、sinter  交集

8、sinterstore  交集并存放结果
sinter myset1 myset2
1) "user4"
2) "user3"
sinterstore myset3 myset1 myset2
(integer) 2
smembers myset3
1) "user4"
2) "user3"

9、sunion  并集

10、sunionstore 并集并存放结果
sunion myset1 myset2
1) "user2"
2) "user3"
3) "user4"
4) "user5"
5) "user1"
sunionstore myset5 myset1 myset2
(integer) 5
smembers myset5
1) "user2"
2) "user3"
3) "user4"
4) "user5"
5) "user1"

11、smove 从第一个set中移除,并放到第二个set中
smove myset1 myset2 user1
(integer) 1
将user1从myset1中移除,并放入到myset2中

12、scard 查看集合元素个数
scard myset3
(integer) 2
scard myset4
(integer) 1
scard myset5
(integer) 5

13、sismember 判断是不是集合中的元素
sismember myset1 leilei
(integer) 0

14、srandmember 随机返回一个元素,不删除
srandmember myset1
                    "user4"


 ZSet类型

  常用操作

1、zadd  添加
zadd myzset 1 user1
(integer) 1
zadd myzset 2 user2
(integer) 1

2、zrang 取值
zrange myzset 0 -1
1) "user1"
2) "user2"
zrange myzset 0 -1 withscores     输出顺序号
1) "user1"
2) "1"
3) "user2"
4) "2"

3、zrem 移除
zrem myzset user1
(integer) 1

4、zincrby 递增,如果元素存在,顺序号+1 如果元素不存在,向集合中添加
zincrby myzset 2 leilei
"2"
zrange myzset 0 -1
1) "leilei"
2) "user2"

又一次执行命令
zincrby myzset 2 leilei
"4"
zrange myzset 0 -1 withscores
1) "user2"
2) "2"
3) "leilei"
4) "4"

5、zrank 排序之后返回key的索引
zrank myzset user2
(integer) 1
zrange myzset 0 -1 withscores
1) "admin"
2) "1"
3) "user2"
4) "2"
5) "nana"
6) "3"
7) "leilei"
8) "4"
zrank myzset nana
(integer) 2

6、zrevrank  反转排序并取得key对应的索引

7、zrankbyscore  取范围内的

8、zcount 返回集合中的score给定区间的数量

9、zcard 返回集合数量


三、未完待续

    这篇只是简单的说了一下Redis的常用操作,下篇说一下redis的高级操作,包括持久化,主从复制等
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: