Redis基本操作

来源:互联网 发布:pkpm软件4.1 编辑:程序博客网 时间:2024/05/17 01:16

最近工作可能要使用Redis,首先对Redis的基本操作有一个初步的了解吧,这里的基本操作主要是Redis-cli的命令,至于JavaAPI的操作后面再了解一下分享@@。。
首先,要知道Redis中默认有16个数据库,数据库名字为0-15,在Redis-cli初始化时默认使用0号数据库。
其次应当知道Redis是一种面向“键/值”对儿数据类型的内存数据库。
其中Redis的键只能是字符串,Redis的值支持多种数据类型:

  1. 字符串 string
  2. 哈希 hash
  3. 字符串 list
  4. 集合 set
  5. 有序集合 sorted set
  6. HyperLogLog结构

一、命令示例
1、string命令

127.0.0.1:6379> set hello world             #通过set命令设置值,也可覆盖原有值。mset可以同时设置多个OK      127.0.0.1:6379> get hello                   #通过get命令获取该键对应的值。mget可同时取出多个"world"     127.0.0.1:6379> append hello world          #该键已经存在,因此返回追加后Value的长度(integer) 10127.0.0.1:6379> strlen hello                    #返回键对应值的长度(integer) 10127.0.0.1:6379> exists hello                    #返回key是否存在,1代表存在,0代表不存在。(integer) 1127.0.0.1:6379> incr num                    #key值递增1,如果不存在,默认值0递增1,非数值会抛错(integer) 1127.0.0.1:6379> decr num                    #key值递减1(integer) 0127.0.0.1:6379> incrby num 5                    #key值增加指定值(integer) 5 127.0.0.1:6379> decrby num 5                #key值减少指定值(integer) 0127.0.0.1:6379> del num                     #删除已有键(integer) 1

2、hash命令
hash类型的值存储了字段和字段值的映射,字段和字段值只能是字符串,不支持其他数据类型。

127.0.0.1:6379> hset homeset network www.sina.cn        #hset命令添加hash类型数据(integer) 1127.0.0.1:6379> hget homeset baidu                  #hget命令读取指定hash列表中key值"www.baidu.com"127.0.0.1:6379> hexists homeset baidu                   #判断键中属性是否存在(integer) 1127.0.0.1:6379> hincrby num incre 5                 #键值增加指定数值(hash类型中没有加一命令)(integer) 6127.0.0.1:6379> hdel num incre                      #删除hash列表中指定键值。(integer) 1127.0.0.1:6379> hkeys num                           #获取指定hash中所有键1) "incre"2) "dey"3) "anoth"127.0.0.1:6379> hvals num                           #获取指定hash中所有值1) "1"2) "2"3) "3"127.0.0.1:6379> hlen num                            #获取指定hash数据中包含多少字段(integer) 3

3、list命令
list是一个有序的字符串列表,列表内部实现使用双向列表(linked list)实现。
list还可以作为队列使用。

127.0.0.1:6379> lpush ab a                  (integer) 1127.0.0.1:6379> lpush ab b                      #list的左侧写入数据(integer) 2127.0.0.1:6379> rpush ab c                      #list的右侧写入数据    (integer) 3127.0.0.1:6379> lrange ab 0 -1                  #读取全部数据(下标为-1代表最大下标)1) "b"2) "a"3) "c"127.0.0.1:6379> lindex ab 0                     #查看指定下标数据"b"127.0.0.1:6379> llen ab                         #获取list的长度(integer) 3127.0.0.1:6379> lset ab 1 d                     #修改指定下标的值OK127.0.0.1:6379> ltrim ab 0 1                        #截取,保留指定数据OK127.0.0.1:6379> rpoplpush ab de                 #将元素从一个列表转到另一个列表"d"127.0.0.1:6379> lrange de 0 -11) "d"2) "DDD"3) "BBB"4) "AAA"127.0.0.1:6379> lrange ab 0 -11) "b"

4、set命令
set集合中的元素都是不重复的,无序的

127.0.0.1:6379> sadd myset a                        #使用sadd添加set类型数据(integer) 1127.0.0.1:6379> smembers myset                  #读取指定set内的数据。1) "b"2) "a"3) "z"4) "d"127.0.0.1:6379> srem myset b                    #member移除集合中的member元素。(integer) 1127.0.0.1:6379> sismember myset b               #指定的元素在集合中是否存在,存在返回1,否则返回0(integer) 0127.0.0.1:6379> sdiff myset yourset             #返回所有指定集合的差集1) "a"2) "d"3) "z"127.0.0.1:6379> sinter myset yourset                #返回所有指定集合的交集1) "b"127.0.0.1:6379> sunion myset yourset                #返回所有集合的并集1) "2"2) "b"3) "a"4) "d"5) "1"6) "z"127.0.0.1:6379> scard myset                 #返回集合的长度(integer) 4127.0.0.1:6379> spop myset                  #从集合中随机取出一个元素并且删除"b"

5、sorted set 命令
有序集合,在集合类型的基础上为集合中的每个元素都关联了一个分数,这样可以很方便的获得分数最高的N个元素(topN)。

127.0.0.1:6379> zadd sor 1 aa               #使用zadd来写入sorted set 数据(写入时需要为数据添加权值)(integer) 1127.0.0.1:6379> ZSCORE sor aa               #获取某个数据的权值。"1"127.0.0.1:6379> zrange sor 0 -1             #获取sort set 内的所有数据1) "aa"2) "bb"3) "cc"127.0.0.1:6379> zrevrange sor 0 2               #将数据倒置并输出下标在[0,2]中的值1) "dd"2) "cc"3) "bb"127.0.0.1:6379> zrangebyscore sor 0 100         #将数据按分数从低到高排序,后面的数字是两个分数,并非下标。1) "aa"2) "bb"3) "cc"4) "dd"127.0.0.1:6379> zrem sor aa                 #删除指定内容(integer) 1127.0.0.1:6379> zincrby sor 11 bb               #指定元素的分值增加"13"127.0.0.1:6379> zcard sor                   #返回sorted set 的长度(integer) 3127.0.0.1:6379> zcount sor 0 100                #获取指定分数范围内的元素个数(闭区间)(integer) 3

Redis HyperLogLog 是用来做基数统计的算法。
优点:在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。
缺点:因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。
但是个人还是对这个数据类型比较生疏。

最后还有一点,可能有的朋友会觉得sorted set和list略有相似:
相同点:

(1). 二者都是有序的
(2).二者都可以获得某一范围的元素
不同点:
(1).列表类型是通过双向链表实现的,获取靠近两端的数据速度极快,当列表中元素增多后,访问中间的数据速度会很慢,所以它比较适合很少访问中间元素的应用
(2).有序集合类型是使用散列表和跳跃表(skip list)实现的,所以即使读取位于中间部分的数据速度也很快
(3).列表中不能简单的调整某个元素的位置,但是有序集合可以(通过更改这个元素的分值)
(4).有序集合要比列表更加消耗内存

未完待续。。。。

Redis中文乱码问题
有限中文内容存储到Redis当中,在Redis-cli查看时可能显示的是一些看不懂的十六进制内容,完全看不懂啊,这。

[root@master ~]# redis-cli127.0.0.1:6379> keys *1) "\xe5\x8c\x97\xe4\xba\xac\xe5\xbe\xa1\xe5\xae\xab\xe5\xa0\x82\xe8\xbf\x9b\xe5\x87\xba\xe5\x8f\xa3\xe8\xb4\xb8\xe6\x98\x93\xe6\x9c\x89\xe9\x99\x90\xe5\x85\xac\xe5\x8f\xb8"127.0.0.1:6379> exit

为了方便查看,其实是有解决方案的……^^,在登录Redis-cli时加选项 –raw

[root@master ~]# redis-cli  --raw127.0.0.1:6379> keys *北京御宫堂进出口贸易有限公司
1 0
原创粉丝点击